';
+
return $btn;
})
->rawColumns(['action'])
diff --git a/app/Http/Controllers/WarehouseManagement/MutationsController.php b/app/Http/Controllers/WarehouseManagement/MutationsController.php
index 45fff5c..876e29c 100755
--- a/app/Http/Controllers/WarehouseManagement/MutationsController.php
+++ b/app/Http/Controllers/WarehouseManagement/MutationsController.php
@@ -12,12 +12,14 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Yajra\DataTables\DataTables;
+use Illuminate\Support\Facades\Gate;
class MutationsController extends Controller
{
public function index(Request $request)
{
$menu = Menu::where('link','mutations.index')->first();
+ abort_if(!Gate::allows('view', $menu), 403);
$dealers = Dealer::all();
if ($request->ajax()) {
diff --git a/app/Http/Controllers/WarehouseManagement/OpnamesController.php b/app/Http/Controllers/WarehouseManagement/OpnamesController.php
index 7fb5b08..e3ff796 100755
--- a/app/Http/Controllers/WarehouseManagement/OpnamesController.php
+++ b/app/Http/Controllers/WarehouseManagement/OpnamesController.php
@@ -17,11 +17,13 @@ use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
use Yajra\DataTables\Facades\DataTables;
+use Illuminate\Support\Facades\Gate;
class OpnamesController extends Controller
{
public function index(Request $request){
$menu = Menu::where('link','opnames.index')->first();
+ abort_if(!Gate::allows('view', $menu), 403);
$dealers = Dealer::all();
if($request->ajax()){
$data = Opname::query()
diff --git a/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php b/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php
index 3455476..8460ab5 100755
--- a/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php
+++ b/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php
@@ -9,6 +9,7 @@ use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Yajra\DataTables\Facades\DataTables;
+use Illuminate\Support\Facades\Gate;
class ProductCategoriesController extends Controller
{
@@ -20,6 +21,7 @@ class ProductCategoriesController extends Controller
public function index(Request $request)
{
$menu = Menu::where('link','product_categories.index')->first();
+ abort_if(!Gate::allows('view', $menu), 403);
if($request->ajax()){
$data = ProductCategory::query();
return DataTables::of($data)
@@ -30,11 +32,11 @@ class ProductCategoriesController extends Controller
->addColumn('action', function ($row) use ($menu) {
$btn = '';
- if (Auth::user()->can('delete', $menu)) {
+ if (Gate::allows('delete', $menu)) {
$btn .= '';
}
- if (Auth::user()->can('update', $menu)) {
+ if (Gate::allows('update', $menu)) {
$btn .= '';
}
diff --git a/app/Http/Controllers/WarehouseManagement/ProductsController.php b/app/Http/Controllers/WarehouseManagement/ProductsController.php
index 92387f3..4253be9 100755
--- a/app/Http/Controllers/WarehouseManagement/ProductsController.php
+++ b/app/Http/Controllers/WarehouseManagement/ProductsController.php
@@ -28,6 +28,7 @@ class ProductsController extends Controller
public function index(Request $request)
{
$menu = Menu::where('link','products.index')->first();
+ abort_if(!Gate::allows('view', $menu), 403);
if($request->ajax()){
Log::info('Products DataTables request received');
Log::info('Request parameters:', $request->all());
diff --git a/app/Http/Controllers/WarehouseManagement/StockAuditController.php b/app/Http/Controllers/WarehouseManagement/StockAuditController.php
index ccce241..c67dda1 100644
--- a/app/Http/Controllers/WarehouseManagement/StockAuditController.php
+++ b/app/Http/Controllers/WarehouseManagement/StockAuditController.php
@@ -10,12 +10,14 @@ use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Yajra\DataTables\DataTables;
+use Illuminate\Support\Facades\Gate;
class StockAuditController extends Controller
{
public function index(Request $request)
{
$menu = Menu::where('link', 'stock-audit.index')->first();
+ abort_if(!Gate::allows('view', $menu), 403);
$dealers = Dealer::all();
$products = Product::all();
diff --git a/database/seeders/ProductAndCategorySeeder.php b/database/seeders/ProductAndCategorySeeder.php
index 8fdf46a..742cee0 100755
--- a/database/seeders/ProductAndCategorySeeder.php
+++ b/database/seeders/ProductAndCategorySeeder.php
@@ -16,17 +16,42 @@ class ProductAndCategorySeeder extends Seeder
public function run()
{
$categories = [
+ // Oli & Pelumas
'Oli & Pelumas' => [
- ['code' => 'OLI001', 'name' => 'Oli Mesin 10W-40', 'subcategory' => 'Oli Mesin'],
- ['code' => 'OLI002', 'name' => 'Oli Gardan', 'subcategory' => 'Oli Gardan'],
+ ['code' => 'OLI001', 'name' => 'Oli Mesin 10W-40', 'subcategory' => 'Oli Mesin', 'unit' => 'liter'],
+ ['code' => 'OLI002', 'name' => 'Oli Mesin 20W-50', 'subcategory' => 'Oli Mesin', 'unit' => 'liter'],
+ ['code' => 'OLI003', 'name' => 'Oli Gardan SAE 90', 'subcategory' => 'Oli Gardan', 'unit' => 'liter'],
+ ['code' => 'OLI004', 'name' => 'Minyak Rem DOT 3', 'subcategory' => 'Minyak Rem', 'unit' => 'ml'],
+ ['code' => 'OLI005', 'name' => 'Grease Serbaguna', 'subcategory' => 'Pelumas Lain', 'unit' => 'gram'],
],
+
+ // Aki & Kelistrikan
'Aki & Kelistrikan' => [
- ['code' => 'AKI001', 'name' => 'Aki Kering 12V', 'subcategory' => 'Aki'],
- ['code' => 'AKI002', 'name' => 'Regulator Rectifier', 'subcategory' => 'Kelistrikan'],
+ ['code' => 'AKI001', 'name' => 'Aki Kering 12V 5Ah', 'subcategory' => 'Aki', 'unit' => 'pcs'],
+ ['code' => 'AKI002', 'name' => 'Aki Basah 12V 7Ah', 'subcategory' => 'Aki', 'unit' => 'pcs'],
+ ['code' => 'AKI003', 'name' => 'Lampu LED Headlight', 'subcategory' => 'Lampu', 'unit' => 'pcs'],
+ ['code' => 'AKI004', 'name' => 'Sekring 10A', 'subcategory' => 'Kelistrikan', 'unit' => 'pcs'],
+ ['code' => 'AKI005', 'name' => 'Regulator Rectifier', 'subcategory' => 'Kelistrikan', 'unit' => 'pcs'],
],
+
+ // Rem
'Rem' => [
- ['code' => 'REM001', 'name' => 'Kampas Rem Belakang', 'subcategory' => 'Kampas Rem'],
- ['code' => 'REM002', 'name' => 'Cakram Depan', 'subcategory' => 'Cakram'],
+ ['code' => 'REM001', 'name' => 'Kampas Rem Depan Motor', 'subcategory' => 'Kampas Rem', 'unit' => 'set'],
+ ['code' => 'REM002', 'name' => 'Kampas Rem Belakang Motor', 'subcategory' => 'Kampas Rem', 'unit' => 'set'],
+ ['code' => 'REM003', 'name' => 'Cakram Rem Depan Mobil', 'subcategory' => 'Cakram', 'unit' => 'pcs'],
+ ['code' => 'REM004', 'name' => 'Minyak Rem DOT 4', 'subcategory' => 'Minyak Rem', 'unit' => 'ml'],
+ ['code' => 'REM005', 'name' => 'Master Rem Depan', 'subcategory' => 'Master Rem', 'unit' => 'pcs'],
+ ],
+
+ // Cuci Kendaraan & Perawatan
+ 'Cuci Kendaraan' => [
+ ['code' => 'CUCI001', 'name' => 'Shampoo Mobil PH Netral', 'subcategory' => 'Shampoo', 'unit' => 'liter'],
+ ['code' => 'CUCI002', 'name' => 'Sabun Cuci Motor Anti Karat', 'subcategory' => 'Shampoo', 'unit' => 'liter'],
+ ['code' => 'CUCI006', 'name' => 'Semir Ban Botol 500ml', 'subcategory' => 'Perawatan Eksterior', 'unit' => 'ml'],
+ ['code' => 'CUCI007', 'name' => 'Snow Foam Cuci Mobil', 'subcategory' => 'Shampoo', 'unit' => 'liter'],
+ ['code' => 'CUCI008', 'name' => 'Pembersih Interior Dashboard', 'subcategory' => 'Perawatan Interior', 'unit' => 'ml'],
+ ['code' => 'CUCI009', 'name' => 'Wax Body Mobil', 'subcategory' => 'Perawatan Eksterior', 'unit' => 'ml'],
+ ['code' => 'CUCI010', 'name' => 'Pembersih Kaca Anti Jamur', 'subcategory' => 'Perawatan Kaca', 'unit' => 'ml'],
],
];
@@ -50,7 +75,8 @@ class ProductAndCategorySeeder extends Seeder
[
'name' => $product['name'],
'description' => $product['name'],
- 'product_category_id' => $child->id
+ 'product_category_id' => $child->id,
+ 'unit' => $product['unit'],
]
);
}
diff --git a/public/js/warehouse_management/mutations/index.js b/public/js/warehouse_management/mutations/index.js
index e942dd9..7d28fa1 100755
--- a/public/js/warehouse_management/mutations/index.js
+++ b/public/js/warehouse_management/mutations/index.js
@@ -1,2 +1,2 @@
-(()=>{function e(e){console.log("Enabling end date picker with min date:",e),$("#date_to").prop("disabled",!1),$("#date_to").datepicker("remove"),$("#date_to").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom auto",language:"id",clearBtn:!0,container:"body",startDate:e,endDate:new Date}).on("changeDate",(function(e){console.log("End date selected:",e.format())})).on("clearDate",(function(e){console.log("End date cleared")})),console.log("End date picker enabled with startDate:",e)}function a(){$("#date_to").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom auto",language:"id",clearBtn:!0,container:"body",endDate:new Date}).on("changeDate",(function(e){console.log("End date selected:",e.format())})).on("clearDate",(function(e){console.log("End date cleared")}))}function t(){$("#date_to").datepicker("remove"),$("#date_to").val(""),a(),$("#date_to").prop("disabled",!0),console.log("End date picker reset and disabled")}function o(e,a){$.ajax({url:"/warehouse/mutations/"+e+"/cancel",type:"POST",data:{_token:$('meta[name="csrf-token"]').attr("content")},success:function(e){"undefined"!=typeof Swal?Swal.fire({title:"Berhasil!",text:"Mutasi berhasil dibatalkan",icon:"success",timer:2e3,showConfirmButton:!1}):alert("Mutasi berhasil dibatalkan"),a.ajax.reload()},error:function(e){var a,t=(null===(a=e.responseJSON)||void 0===a?void 0:a.message)||"Gagal membatalkan mutasi";"undefined"!=typeof Swal?Swal.fire({title:"Error!",text:t,icon:"error"}):alert("Error: "+t)}})}$(document).ready((function(){console.log("Mutations index.js loaded"),void 0!==$.fn.DataTable?(console.log("Initializing Select2..."),void 0!==$.fn.select2?$("#dealer_filter").select2({placeholder:"Pilih...",allowClear:!0,width:"100%"}):console.warn("Select2 not available, using regular select"),console.log("Initializing datepickers..."),$("#date_from").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom auto",language:"id",clearBtn:!0,container:"body",endDate:new Date}).on("changeDate",(function(a){console.log("Start date selected:",a.format()),e(a.format())})).on("clearDate",(function(e){console.log("Start date cleared"),t()})),a(),$("#date_to").prop("disabled",!0),$("#date_from").on("change",(function(){var a=$(this).val();a?(console.log("Start date change event:",a),e(a)):(console.log("Start date cleared via change event"),t())})),setTimeout((function(){!function(){console.log("Initializing DataTable..."),$.fn.DataTable.isDataTable("#mutations-table")&&$("#mutations-table").DataTable().destroy();var e=$("#mutations-table").DataTable({processing:!0,serverSide:!0,destroy:!0,ajax:{url:$("#mutations-table").data("url"),type:"GET",data:function(e){return e.dealer_filter=$("#dealer_filter").val(),e.date_from=$("#date_from").val(),e.date_to=$("#date_to").val(),console.log("AJAX data being sent:",{dealer_filter:e.dealer_filter,date_from:e.date_from,date_to:e.date_to}),e},error:function(e,a,t){console.error("DataTables AJAX error:",a,t),console.error("Response:",e.responseText)}},columnDefs:[{targets:0,width:"5%"},{targets:8,width:"20%",className:"text-center"},{targets:[6,7],className:"text-center"}],columns:[{data:"DT_RowIndex",name:"DT_RowIndex",orderable:!1,searchable:!1},{data:"mutation_number",name:"mutation_number",orderable:!0},{data:"created_at",name:"created_at",orderable:!0},{data:"from_dealer",name:"from_dealer",orderable:!0},{data:"to_dealer",name:"to_dealer",orderable:!0},{data:"requested_by",name:"requested_by",orderable:!0},{data:"total_items",name:"total_items",orderable:!0},{data:"status",name:"status",orderable:!0},{data:"action",name:"action",orderable:!1,searchable:!1}],order:[[1,"desc"]],pageLength:10,responsive:!0,ordering:!0,orderMulti:!1});(function(e){$("#kt_search").on("click",(function(){console.log("Filter button clicked");var a=$("#dealer_filter").val(),t=$("#date_from").val(),o=$("#date_to").val();console.log("Filtering with:",{dealer:a,dateFrom:t,dateTo:o}),e.ajax.reload()})),$("#kt_reset").on("click",(function(){console.log("Reset button clicked"),$("#dealer_filter").val(null).trigger("change.select2"),$("#date_from").datepicker("clearDates"),$("#date_to").datepicker("clearDates"),t(),e.ajax.reload()})),$("#date_from, #date_to").on("keypress",(function(e){13===e.which&&$("#kt_search").click()})),$("#dealer_filter").on("change",(function(){console.log("Dealer filter changed:",$(this).val())}))})(e),function(e){e.on("order.dt",(function(){console.log("Order changed:",e.order())})),e.on("processing.dt",(function(e,a,t){t?console.log("DataTable processing started"):console.log("DataTable processing finished")})),$("#mutations-table thead th").on("click",(function(){var a=$(this).index();console.log("Column header clicked:",a,$(this).text()),0!==a&&8!==a?$(this).hasClass("sorting")||$(this).hasClass("sorting_asc")||$(this).hasClass("sorting_desc")?console.log("DataTables should handle this click"):(console.log("DataTables not handling click, manual trigger needed"),e.order([a,"asc"]).draw()):console.log("Non-sortable column clicked, ignoring")})),$(document).on("click",".btn-cancel",(function(){!function(e,a){"undefined"!=typeof Swal?Swal.fire({title:"Batalkan Mutasi?",text:"Apakah Anda yakin ingin membatalkan mutasi ini?",icon:"warning",showCancelButton:!0,confirmButtonColor:"#d33",cancelButtonColor:"#3085d6",confirmButtonText:"Ya, Batalkan",cancelButtonText:"Batal"}).then((function(t){t.isConfirmed&&o(e,a)})):confirm("Apakah Anda yakin ingin membatalkan mutasi ini?")&&o(e,a)}($(this).data("id"),e)})),$(document).on("submit",".approve-form",(function(){$(this).find('button[type="submit"]').prop("disabled",!0).html("Memproses...")})),$(document).on("input",'input[name*="quantity_approved"]',(function(){var e,a,t;e=$(this),a=parseFloat(e.attr("max")),t=parseFloat(e.val()),a&&t>a?(e.val(a),e.addClass("is-invalid"),e.siblings(".invalid-feedback").length||e.after('
Quantity tidak boleh melebihi yang diminta
')):(e.removeClass("is-invalid"),e.siblings(".invalid-feedback").remove())}))}(e)}()}),100)):console.error("DataTables not available!")}))})();
+(()=>{function e(){$("#date_to").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom left",templates:{leftArrow:'',rightArrow:''},endDate:new Date,clearBtn:!0}).on("changeDate",(function(e){console.log("End date selected:",e.format())})).on("clearDate",(function(e){console.log("End date cleared")}))}function a(){$("#date_to").datepicker("remove"),$("#date_to").val(""),e(),$("#date_to").prop("disabled",!0),console.log("End date picker reset and disabled")}function t(e,a){$.ajax({url:"/warehouse/mutations/"+e+"/cancel",type:"POST",data:{_token:$('meta[name="csrf-token"]').attr("content")},success:function(e){"undefined"!=typeof Swal?Swal.fire({title:"Berhasil!",text:"Mutasi berhasil dibatalkan",icon:"success",timer:2e3,showConfirmButton:!1}):alert("Mutasi berhasil dibatalkan"),a.ajax.reload()},error:function(e){var a,t=(null===(a=e.responseJSON)||void 0===a?void 0:a.message)||"Gagal membatalkan mutasi";"undefined"!=typeof Swal?Swal.fire({title:"Error!",text:t,icon:"error"}):alert("Error: "+t)}})}$(document).ready((function(){console.log("Mutations index.js loaded"),void 0!==$.fn.DataTable?(console.log("Initializing Select2..."),void 0!==$.fn.select2?$("#dealer_filter").select2({placeholder:"Pilih...",allowClear:!0,width:"100%"}):console.warn("Select2 not available, using regular select"),function(){if(console.log("Initializing datepickers..."),void 0===$.fn.datepicker)return void console.error("Bootstrap Datepicker not available!");$("#date_from").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom left",templates:{leftArrow:'',rightArrow:''},endDate:new Date,clearBtn:!0}).on("changeDate",(function(e){var a;console.log("Start date selected:",e.format()),a=e.format(),console.log("Enabling end date picker with min date:",a),$("#date_to").prop("disabled",!1),$("#date_to").datepicker("remove"),$("#date_to").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom left",templates:{leftArrow:'',rightArrow:''},startDate:a,endDate:new Date,clearBtn:!0}).on("changeDate",(function(e){console.log("End date selected:",e.format())})).on("clearDate",(function(e){console.log("End date cleared")})),console.log("End date picker enabled with startDate:",a)})).on("clearDate",(function(e){console.log("Start date cleared"),a()})),e(),$("#date_to").prop("disabled",!0)}(),setTimeout((function(){!function(){console.log("Initializing DataTable..."),$.fn.DataTable.isDataTable("#mutations-table")&&$("#mutations-table").DataTable().destroy();var e=$("#mutations-table").DataTable({processing:!0,serverSide:!0,destroy:!0,ajax:{url:$("#mutations-table").data("url"),type:"GET",data:function(e){return e.dealer_filter=$("#dealer_filter").val(),e.date_from=$("#date_from").val(),e.date_to=$("#date_to").val(),console.log("AJAX data being sent:",{dealer_filter:e.dealer_filter,date_from:e.date_from,date_to:e.date_to}),e},error:function(e,a,t){console.error("DataTables AJAX error:",a,t),console.error("Response:",e.responseText)}},columnDefs:[{targets:0,width:"5%"},{targets:8,width:"20%",className:"text-center"},{targets:[6,7],className:"text-center"}],columns:[{data:"DT_RowIndex",name:"DT_RowIndex",orderable:!1,searchable:!1},{data:"mutation_number",name:"mutation_number",orderable:!0},{data:"created_at",name:"created_at",orderable:!0},{data:"from_dealer",name:"from_dealer",orderable:!0},{data:"to_dealer",name:"to_dealer",orderable:!0},{data:"requested_by",name:"requested_by",orderable:!0},{data:"total_items",name:"total_items",orderable:!0},{data:"status",name:"status",orderable:!0},{data:"action",name:"action",orderable:!1,searchable:!1}],order:[[1,"desc"]],pageLength:10,responsive:!0,ordering:!0,orderMulti:!1});(function(e){$("#kt_search").on("click",(function(){console.log("Filter button clicked");var a=$("#dealer_filter").val(),t=$("#date_from").val(),o=$("#date_to").val();console.log("Filtering with:",{dealer:a,dateFrom:t,dateTo:o}),e.ajax.reload()})),$("#kt_reset").on("click",(function(){console.log("Reset button clicked"),$("#dealer_filter").val(null).trigger("change.select2"),$("#date_from").datepicker("clearDates"),$("#date_to").datepicker("clearDates"),a(),e.ajax.reload()})),$("#date_from, #date_to").on("keypress",(function(e){13===e.which&&$("#kt_search").click()})),$("#dealer_filter").on("change",(function(){console.log("Dealer filter changed:",$(this).val())}))})(e),function(e){e.on("order.dt",(function(){console.log("Order changed:",e.order())})),e.on("processing.dt",(function(e,a,t){t?console.log("DataTable processing started"):console.log("DataTable processing finished")})),$("#mutations-table thead th").on("click",(function(){var a=$(this).index();console.log("Column header clicked:",a,$(this).text()),0!==a&&8!==a?$(this).hasClass("sorting")||$(this).hasClass("sorting_asc")||$(this).hasClass("sorting_desc")?console.log("DataTables should handle this click"):(console.log("DataTables not handling click, manual trigger needed"),e.order([a,"asc"]).draw()):console.log("Non-sortable column clicked, ignoring")})),$(document).on("click",".btn-cancel",(function(){!function(e,a){"undefined"!=typeof Swal?Swal.fire({title:"Batalkan Mutasi?",text:"Apakah Anda yakin ingin membatalkan mutasi ini?",icon:"warning",showCancelButton:!0,confirmButtonColor:"#d33",cancelButtonColor:"#3085d6",confirmButtonText:"Ya, Batalkan",cancelButtonText:"Batal"}).then((function(o){o.isConfirmed&&t(e,a)})):confirm("Apakah Anda yakin ingin membatalkan mutasi ini?")&&t(e,a)}($(this).data("id"),e)})),$(document).on("submit",".approve-form",(function(){$(this).find('button[type="submit"]').prop("disabled",!0).html("Memproses...")})),$(document).on("input",'input[name*="quantity_approved"]',(function(){var e,a,t;e=$(this),a=parseFloat(e.attr("max")),t=parseFloat(e.val()),a&&t>a?(e.val(a),e.addClass("is-invalid"),e.siblings(".invalid-feedback").length||e.after('
Quantity tidak boleh melebihi yang diminta
')):(e.removeClass("is-invalid"),e.siblings(".invalid-feedback").remove())}))}(e)}()}),100)):console.error("DataTables not available!")}))})();
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/public/js/warehouse_management/mutations/index.js.map b/public/js/warehouse_management/mutations/index.js.map
index 6b94756..eddb1ea 100755
--- a/public/js/warehouse_management/mutations/index.js.map
+++ b/public/js/warehouse_management/mutations/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"/js/warehouse_management/mutations/index.js","mappings":"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","sources":["webpack:///./resources/js/warehouse_management/mutations/index.js"],"sourcesContent":["$(document).ready(function () {\n console.log(\"Mutations index.js loaded\");\n\n // Check if DataTables is available\n if (typeof $.fn.DataTable === \"undefined\") {\n console.error(\"DataTables not available!\");\n return;\n }\n\n // Initialize components\n initializeSelect2();\n initializeDatepickers();\n\n // Wait for DOM to be fully ready\n setTimeout(function () {\n initializeDataTable();\n }, 100);\n});\n\nfunction initializeSelect2() {\n console.log(\"Initializing Select2...\");\n\n // Initialize Select2 for dealer filter - same as stock audit\n if (typeof $.fn.select2 !== \"undefined\") {\n $(\"#dealer_filter\").select2({\n placeholder: \"Pilih...\",\n allowClear: true,\n width: \"100%\",\n });\n } else {\n console.warn(\"Select2 not available, using regular select\");\n }\n}\n\nfunction initializeDatepickers() {\n console.log(\"Initializing datepickers...\");\n\n // Initialize start date picker with bootstrap datepicker\n $(\"#date_from\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom auto\",\n language: \"id\",\n clearBtn: true,\n container: \"body\",\n endDate: new Date(), // Don't allow future dates\n })\n .on(\"changeDate\", function (e) {\n console.log(\"Start date selected:\", e.format());\n enableEndDatePicker(e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"Start date cleared\");\n resetEndDatePicker();\n });\n\n // Initialize end date picker with bootstrap datepicker\n initializeEndDatePicker();\n\n // Initially disable end date input\n $(\"#date_to\").prop(\"disabled\", true);\n\n // Setup change event handlers\n setupChangeEventHandlers();\n}\n\nfunction enableEndDatePicker(startDate) {\n console.log(\"Enabling end date picker with min date:\", startDate);\n\n // Enable the input\n $(\"#date_to\").prop(\"disabled\", false);\n\n // Destroy existing datepicker\n $(\"#date_to\").datepicker(\"remove\");\n\n // Re-initialize with new startDate constraint using bootstrap datepicker\n $(\"#date_to\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom auto\",\n language: \"id\",\n clearBtn: true,\n container: \"body\",\n startDate: startDate, // Set minimum date to selected start date\n endDate: new Date(), // Don't allow future dates\n })\n .on(\"changeDate\", function (e) {\n console.log(\"End date selected:\", e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"End date cleared\");\n });\n\n console.log(\"End date picker enabled with startDate:\", startDate);\n}\n\nfunction initializeEndDatePicker() {\n $(\"#date_to\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom auto\",\n language: \"id\",\n clearBtn: true,\n container: \"body\",\n endDate: new Date(), // Don't allow future dates\n })\n .on(\"changeDate\", function (e) {\n console.log(\"End date selected:\", e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"End date cleared\");\n });\n}\n\n// Calendar icons and click handlers removed since bootstrap datepicker handles these automatically\n\nfunction setupChangeEventHandlers() {\n // For bootstrap datepicker, we already handle events in the datepicker initialization\n // But we can add additional handling if needed\n $(\"#date_from\").on(\"change\", function () {\n const selectedDate = $(this).val();\n if (selectedDate) {\n console.log(\"Start date change event:\", selectedDate);\n enableEndDatePicker(selectedDate);\n } else {\n console.log(\"Start date cleared via change event\");\n resetEndDatePicker();\n }\n });\n}\n\nfunction initializeDataTable() {\n console.log(\"Initializing DataTable...\");\n\n // Destroy existing table if any\n if ($.fn.DataTable.isDataTable(\"#mutations-table\")) {\n $(\"#mutations-table\").DataTable().destroy();\n }\n\n // Initialize DataTable\n const table = $(\"#mutations-table\").DataTable({\n processing: true,\n serverSide: true,\n destroy: true,\n ajax: {\n url: $(\"#mutations-table\").data(\"url\"),\n type: \"GET\",\n data: function (d) {\n // Add filter parameters\n d.dealer_filter = $(\"#dealer_filter\").val();\n d.date_from = $(\"#date_from\").val();\n d.date_to = $(\"#date_to\").val();\n\n console.log(\"AJAX data being sent:\", {\n dealer_filter: d.dealer_filter,\n date_from: d.date_from,\n date_to: d.date_to,\n });\n\n return d;\n },\n error: function (xhr, error, code) {\n console.error(\"DataTables AJAX error:\", error, code);\n console.error(\"Response:\", xhr.responseText);\n },\n },\n columnDefs: [\n { targets: 0, width: \"5%\" }, // No. column\n { targets: 8, width: \"20%\", className: \"text-center\" }, // Action column\n { targets: [6, 7], className: \"text-center\" }, // Total Items and Status columns\n ],\n columns: [\n {\n data: \"DT_RowIndex\",\n name: \"DT_RowIndex\",\n orderable: false,\n searchable: false,\n },\n {\n data: \"mutation_number\",\n name: \"mutation_number\",\n orderable: true,\n },\n { data: \"created_at\", name: \"created_at\", orderable: true },\n { data: \"from_dealer\", name: \"from_dealer\", orderable: true },\n { data: \"to_dealer\", name: \"to_dealer\", orderable: true },\n { data: \"requested_by\", name: \"requested_by\", orderable: true },\n { data: \"total_items\", name: \"total_items\", orderable: true },\n { data: \"status\", name: \"status\", orderable: true },\n {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false,\n },\n ],\n order: [[1, \"desc\"]], // Order by mutation_number desc\n pageLength: 10,\n responsive: true,\n ordering: true,\n orderMulti: false,\n });\n\n // Setup filter button handlers\n setupFilterHandlers(table);\n\n // Setup other event handlers\n setupTableEventHandlers(table);\n}\n\nfunction setupFilterHandlers(table) {\n // Handle Filter Search Button\n $(\"#kt_search\").on(\"click\", function () {\n console.log(\"Filter button clicked\");\n\n const dealerFilter = $(\"#dealer_filter\").val();\n const dateFrom = $(\"#date_from\").val();\n const dateTo = $(\"#date_to\").val();\n\n console.log(\"Filtering with:\", {\n dealer: dealerFilter,\n dateFrom,\n dateTo,\n });\n\n table.ajax.reload();\n });\n\n // Handle Filter Reset Button\n $(\"#kt_reset\").on(\"click\", function () {\n console.log(\"Reset button clicked\");\n\n // Reset select2 elements properly - same as stock audit\n $(\"#dealer_filter\").val(null).trigger(\"change.select2\");\n\n // Clear datepicker values using bootstrap datepicker method\n $(\"#date_from\").datepicker(\"clearDates\");\n $(\"#date_to\").datepicker(\"clearDates\");\n\n // Reset end date picker and disable it\n resetEndDatePicker();\n\n // Reload table\n table.ajax.reload();\n });\n\n // Handle Enter key on date inputs\n $(\"#date_from, #date_to\").on(\"keypress\", function (e) {\n if (e.which === 13) {\n // Enter key\n $(\"#kt_search\").click();\n }\n });\n\n // Auto-filter when dealer selection changes\n $(\"#dealer_filter\").on(\"change\", function () {\n console.log(\"Dealer filter changed:\", $(this).val());\n // Uncomment the line below if you want auto-filter on dealer change\n // table.ajax.reload();\n });\n}\n\nfunction resetEndDatePicker() {\n // Remove existing datepicker\n $(\"#date_to\").datepicker(\"remove\");\n\n // Clear the input value\n $(\"#date_to\").val(\"\");\n\n // Re-initialize without startDate constraint\n initializeEndDatePicker();\n\n // Disable the input\n $(\"#date_to\").prop(\"disabled\", true);\n\n console.log(\"End date picker reset and disabled\");\n}\n\nfunction setupTableEventHandlers(table) {\n // Debug ordering events\n table.on(\"order.dt\", function () {\n console.log(\"Order changed:\", table.order());\n });\n\n // Add loading indicator for ordering\n table.on(\"processing.dt\", function (e, settings, processing) {\n if (processing) {\n console.log(\"DataTable processing started\");\n } else {\n console.log(\"DataTable processing finished\");\n }\n });\n\n // Manual click handler for column headers (fallback)\n $(\"#mutations-table thead th\").on(\"click\", function () {\n const columnIndex = $(this).index();\n console.log(\"Column header clicked:\", columnIndex, $(this).text());\n\n // Skip if it's the first (No.) or last (Action) column\n if (columnIndex === 0 || columnIndex === 8) {\n console.log(\"Non-sortable column clicked, ignoring\");\n return;\n }\n\n // Check if DataTables is handling the click\n if (\n $(this).hasClass(\"sorting\") ||\n $(this).hasClass(\"sorting_asc\") ||\n $(this).hasClass(\"sorting_desc\")\n ) {\n console.log(\"DataTables should handle this click\");\n } else {\n console.log(\"DataTables not handling click, manual trigger needed\");\n // Force DataTables to handle the ordering\n table.order([columnIndex, \"asc\"]).draw();\n }\n });\n\n // Handle Cancel Button Click with SweetAlert\n $(document).on(\"click\", \".btn-cancel\", function () {\n const mutationId = $(this).data(\"id\");\n handleCancelMutation(mutationId, table);\n });\n\n // Handle form submissions with loading state\n $(document).on(\"submit\", \".approve-form\", function () {\n $(this)\n .find('button[type=\"submit\"]')\n .prop(\"disabled\", true)\n .html(\"Memproses...\");\n });\n\n // Validate quantity approved in receive modal\n $(document).on(\"input\", 'input[name*=\"quantity_approved\"]', function () {\n validateQuantityInput($(this));\n });\n}\n\nfunction handleCancelMutation(mutationId, table) {\n if (typeof Swal !== \"undefined\") {\n Swal.fire({\n title: \"Batalkan Mutasi?\",\n text: \"Apakah Anda yakin ingin membatalkan mutasi ini?\",\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#3085d6\",\n confirmButtonText: \"Ya, Batalkan\",\n cancelButtonText: \"Batal\",\n }).then((result) => {\n if (result.isConfirmed) {\n cancelMutation(mutationId, table);\n }\n });\n } else {\n if (confirm(\"Apakah Anda yakin ingin membatalkan mutasi ini?\")) {\n cancelMutation(mutationId, table);\n }\n }\n}\n\nfunction validateQuantityInput(input) {\n const maxValue = parseFloat(input.attr(\"max\"));\n const currentValue = parseFloat(input.val());\n\n if (maxValue && currentValue > maxValue) {\n input.val(maxValue);\n input.addClass(\"is-invalid\");\n\n if (!input.siblings(\".invalid-feedback\").length) {\n input.after(\n '
Quantity tidak boleh melebihi yang diminta
'\n );\n }\n } else {\n input.removeClass(\"is-invalid\");\n input.siblings(\".invalid-feedback\").remove();\n }\n}\n\nfunction cancelMutation(mutationId, table) {\n $.ajax({\n url: \"/warehouse/mutations/\" + mutationId + \"/cancel\",\n type: \"POST\",\n data: {\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\"),\n },\n success: function (response) {\n if (typeof Swal !== \"undefined\") {\n Swal.fire({\n title: \"Berhasil!\",\n text: \"Mutasi berhasil dibatalkan\",\n icon: \"success\",\n timer: 2000,\n showConfirmButton: false,\n });\n } else {\n alert(\"Mutasi berhasil dibatalkan\");\n }\n\n // Reload table\n table.ajax.reload();\n },\n error: function (xhr) {\n const errorMsg =\n xhr.responseJSON?.message || \"Gagal membatalkan mutasi\";\n\n if (typeof Swal !== \"undefined\") {\n Swal.fire({\n title: \"Error!\",\n text: errorMsg,\n icon: \"error\",\n });\n } else {\n alert(\"Error: \" + errorMsg);\n }\n },\n });\n}\n"],"names":["enableEndDatePicker","startDate","console","log","$","prop","datepicker","format","autoclose","todayHighlight","orientation","language","clearBtn","container","endDate","Date","on","e","initializeEndDatePicker","resetEndDatePicker","val","cancelMutation","mutationId","table","ajax","url","type","data","_token","attr","success","response","Swal","fire","title","text","icon","timer","showConfirmButton","alert","reload","error","xhr","errorMsg","responseJSON","message","document","ready","fn","DataTable","select2","placeholder","allowClear","width","warn","selectedDate","this","setTimeout","isDataTable","destroy","processing","serverSide","d","dealer_filter","date_from","date_to","code","responseText","columnDefs","targets","className","columns","name","orderable","searchable","order","pageLength","responsive","ordering","orderMulti","dealerFilter","dateFrom","dateTo","dealer","trigger","which","click","setupFilterHandlers","settings","columnIndex","index","hasClass","draw","showCancelButton","confirmButtonColor","cancelButtonColor","confirmButtonText","cancelButtonText","then","result","isConfirmed","confirm","handleCancelMutation","find","html","input","maxValue","currentValue","parseFloat","addClass","siblings","length","after","removeClass","remove","setupTableEventHandlers","initializeDataTable"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"/js/warehouse_management/mutations/index.js","mappings":"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","sources":["webpack:///./resources/js/warehouse_management/mutations/index.js"],"sourcesContent":["$(document).ready(function () {\n console.log(\"Mutations index.js loaded\");\n\n // Check if DataTables is available\n if (typeof $.fn.DataTable === \"undefined\") {\n console.error(\"DataTables not available!\");\n return;\n }\n\n // Initialize components\n initializeSelect2();\n initializeDatepickers();\n\n // Wait for DOM to be fully ready\n setTimeout(function () {\n initializeDataTable();\n }, 100);\n});\n\nfunction initializeSelect2() {\n console.log(\"Initializing Select2...\");\n\n // Initialize Select2 for dealer filter - same as stock audit\n if (typeof $.fn.select2 !== \"undefined\") {\n $(\"#dealer_filter\").select2({\n placeholder: \"Pilih...\",\n allowClear: true,\n width: \"100%\",\n });\n } else {\n console.warn(\"Select2 not available, using regular select\");\n }\n}\n\nfunction initializeDatepickers() {\n console.log(\"Initializing datepickers...\");\n\n // Check if bootstrap datepicker is available\n if (typeof $.fn.datepicker === \"undefined\") {\n console.error(\"Bootstrap Datepicker not available!\");\n return;\n }\n\n // Initialize start date picker\n $(\"#date_from\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom left\",\n templates: {\n leftArrow: '',\n rightArrow: '',\n },\n endDate: new Date(), // Don't allow future dates\n clearBtn: true,\n })\n .on(\"changeDate\", function (e) {\n console.log(\"Start date selected:\", e.format());\n enableEndDatePicker(e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"Start date cleared\");\n resetEndDatePicker();\n });\n\n // Initialize end date picker\n initializeEndDatePicker();\n\n // Initially disable end date input\n $(\"#date_to\").prop(\"disabled\", true);\n}\n\nfunction enableEndDatePicker(startDate) {\n console.log(\"Enabling end date picker with min date:\", startDate);\n\n // Enable the input\n $(\"#date_to\").prop(\"disabled\", false);\n\n // Remove existing datepicker\n $(\"#date_to\").datepicker(\"remove\");\n\n // Re-initialize with new startDate constraint\n $(\"#date_to\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom left\",\n templates: {\n leftArrow: '',\n rightArrow: '',\n },\n startDate: startDate, // Set minimum date to selected start date\n endDate: new Date(), // Don't allow future dates\n clearBtn: true,\n })\n .on(\"changeDate\", function (e) {\n console.log(\"End date selected:\", e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"End date cleared\");\n });\n\n console.log(\"End date picker enabled with startDate:\", startDate);\n}\n\nfunction initializeEndDatePicker() {\n $(\"#date_to\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom left\",\n templates: {\n leftArrow: '',\n rightArrow: '',\n },\n endDate: new Date(), // Don't allow future dates\n clearBtn: true,\n })\n .on(\"changeDate\", function (e) {\n console.log(\"End date selected:\", e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"End date cleared\");\n });\n}\n\n// Calendar icons and click handlers removed since bootstrap datepicker handles these automatically\n\nfunction initializeDataTable() {\n console.log(\"Initializing DataTable...\");\n\n // Destroy existing table if any\n if ($.fn.DataTable.isDataTable(\"#mutations-table\")) {\n $(\"#mutations-table\").DataTable().destroy();\n }\n\n // Initialize DataTable\n const table = $(\"#mutations-table\").DataTable({\n processing: true,\n serverSide: true,\n destroy: true,\n ajax: {\n url: $(\"#mutations-table\").data(\"url\"),\n type: \"GET\",\n data: function (d) {\n // Add filter parameters\n d.dealer_filter = $(\"#dealer_filter\").val();\n d.date_from = $(\"#date_from\").val();\n d.date_to = $(\"#date_to\").val();\n\n console.log(\"AJAX data being sent:\", {\n dealer_filter: d.dealer_filter,\n date_from: d.date_from,\n date_to: d.date_to,\n });\n\n return d;\n },\n error: function (xhr, error, code) {\n console.error(\"DataTables AJAX error:\", error, code);\n console.error(\"Response:\", xhr.responseText);\n },\n },\n columnDefs: [\n { targets: 0, width: \"5%\" }, // No. column\n { targets: 8, width: \"20%\", className: \"text-center\" }, // Action column\n { targets: [6, 7], className: \"text-center\" }, // Total Items and Status columns\n ],\n columns: [\n {\n data: \"DT_RowIndex\",\n name: \"DT_RowIndex\",\n orderable: false,\n searchable: false,\n },\n {\n data: \"mutation_number\",\n name: \"mutation_number\",\n orderable: true,\n },\n { data: \"created_at\", name: \"created_at\", orderable: true },\n { data: \"from_dealer\", name: \"from_dealer\", orderable: true },\n { data: \"to_dealer\", name: \"to_dealer\", orderable: true },\n { data: \"requested_by\", name: \"requested_by\", orderable: true },\n { data: \"total_items\", name: \"total_items\", orderable: true },\n { data: \"status\", name: \"status\", orderable: true },\n {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false,\n },\n ],\n order: [[1, \"desc\"]], // Order by mutation_number desc\n pageLength: 10,\n responsive: true,\n ordering: true,\n orderMulti: false,\n });\n\n // Setup filter button handlers\n setupFilterHandlers(table);\n\n // Setup other event handlers\n setupTableEventHandlers(table);\n}\n\nfunction setupFilterHandlers(table) {\n // Handle Filter Search Button\n $(\"#kt_search\").on(\"click\", function () {\n console.log(\"Filter button clicked\");\n\n const dealerFilter = $(\"#dealer_filter\").val();\n const dateFrom = $(\"#date_from\").val();\n const dateTo = $(\"#date_to\").val();\n\n console.log(\"Filtering with:\", {\n dealer: dealerFilter,\n dateFrom,\n dateTo,\n });\n\n table.ajax.reload();\n });\n\n // Handle Filter Reset Button\n $(\"#kt_reset\").on(\"click\", function () {\n console.log(\"Reset button clicked\");\n\n // Reset select2 elements properly - same as stock audit\n $(\"#dealer_filter\").val(null).trigger(\"change.select2\");\n\n // Clear datepicker values using bootstrap datepicker method\n $(\"#date_from\").datepicker(\"clearDates\");\n $(\"#date_to\").datepicker(\"clearDates\");\n\n // Reset end date picker and disable it\n resetEndDatePicker();\n\n // Reload table\n table.ajax.reload();\n });\n\n // Handle Enter key on date inputs\n $(\"#date_from, #date_to\").on(\"keypress\", function (e) {\n if (e.which === 13) {\n // Enter key\n $(\"#kt_search\").click();\n }\n });\n\n // Auto-filter when dealer selection changes\n $(\"#dealer_filter\").on(\"change\", function () {\n console.log(\"Dealer filter changed:\", $(this).val());\n // Uncomment the line below if you want auto-filter on dealer change\n // table.ajax.reload();\n });\n}\n\nfunction resetEndDatePicker() {\n // Remove existing datepicker\n $(\"#date_to\").datepicker(\"remove\");\n\n // Clear the input value\n $(\"#date_to\").val(\"\");\n\n // Re-initialize without startDate constraint\n initializeEndDatePicker();\n\n // Disable the input\n $(\"#date_to\").prop(\"disabled\", true);\n\n console.log(\"End date picker reset and disabled\");\n}\n\nfunction setupTableEventHandlers(table) {\n // Debug ordering events\n table.on(\"order.dt\", function () {\n console.log(\"Order changed:\", table.order());\n });\n\n // Add loading indicator for ordering\n table.on(\"processing.dt\", function (e, settings, processing) {\n if (processing) {\n console.log(\"DataTable processing started\");\n } else {\n console.log(\"DataTable processing finished\");\n }\n });\n\n // Manual click handler for column headers (fallback)\n $(\"#mutations-table thead th\").on(\"click\", function () {\n const columnIndex = $(this).index();\n console.log(\"Column header clicked:\", columnIndex, $(this).text());\n\n // Skip if it's the first (No.) or last (Action) column\n if (columnIndex === 0 || columnIndex === 8) {\n console.log(\"Non-sortable column clicked, ignoring\");\n return;\n }\n\n // Check if DataTables is handling the click\n if (\n $(this).hasClass(\"sorting\") ||\n $(this).hasClass(\"sorting_asc\") ||\n $(this).hasClass(\"sorting_desc\")\n ) {\n console.log(\"DataTables should handle this click\");\n } else {\n console.log(\"DataTables not handling click, manual trigger needed\");\n // Force DataTables to handle the ordering\n table.order([columnIndex, \"asc\"]).draw();\n }\n });\n\n // Handle Cancel Button Click with SweetAlert\n $(document).on(\"click\", \".btn-cancel\", function () {\n const mutationId = $(this).data(\"id\");\n handleCancelMutation(mutationId, table);\n });\n\n // Handle form submissions with loading state\n $(document).on(\"submit\", \".approve-form\", function () {\n $(this)\n .find('button[type=\"submit\"]')\n .prop(\"disabled\", true)\n .html(\"Memproses...\");\n });\n\n // Validate quantity approved in receive modal\n $(document).on(\"input\", 'input[name*=\"quantity_approved\"]', function () {\n validateQuantityInput($(this));\n });\n}\n\nfunction handleCancelMutation(mutationId, table) {\n if (typeof Swal !== \"undefined\") {\n Swal.fire({\n title: \"Batalkan Mutasi?\",\n text: \"Apakah Anda yakin ingin membatalkan mutasi ini?\",\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#3085d6\",\n confirmButtonText: \"Ya, Batalkan\",\n cancelButtonText: \"Batal\",\n }).then((result) => {\n if (result.isConfirmed) {\n cancelMutation(mutationId, table);\n }\n });\n } else {\n if (confirm(\"Apakah Anda yakin ingin membatalkan mutasi ini?\")) {\n cancelMutation(mutationId, table);\n }\n }\n}\n\nfunction validateQuantityInput(input) {\n const maxValue = parseFloat(input.attr(\"max\"));\n const currentValue = parseFloat(input.val());\n\n if (maxValue && currentValue > maxValue) {\n input.val(maxValue);\n input.addClass(\"is-invalid\");\n\n if (!input.siblings(\".invalid-feedback\").length) {\n input.after(\n '
Quantity tidak boleh melebihi yang diminta
'\n );\n }\n } else {\n input.removeClass(\"is-invalid\");\n input.siblings(\".invalid-feedback\").remove();\n }\n}\n\nfunction cancelMutation(mutationId, table) {\n $.ajax({\n url: \"/warehouse/mutations/\" + mutationId + \"/cancel\",\n type: \"POST\",\n data: {\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\"),\n },\n success: function (response) {\n if (typeof Swal !== \"undefined\") {\n Swal.fire({\n title: \"Berhasil!\",\n text: \"Mutasi berhasil dibatalkan\",\n icon: \"success\",\n timer: 2000,\n showConfirmButton: false,\n });\n } else {\n alert(\"Mutasi berhasil dibatalkan\");\n }\n\n // Reload table\n table.ajax.reload();\n },\n error: function (xhr) {\n const errorMsg =\n xhr.responseJSON?.message || \"Gagal membatalkan mutasi\";\n\n if (typeof Swal !== \"undefined\") {\n Swal.fire({\n title: \"Error!\",\n text: errorMsg,\n icon: \"error\",\n });\n } else {\n alert(\"Error: \" + errorMsg);\n }\n },\n });\n}\n"],"names":["initializeEndDatePicker","$","datepicker","format","autoclose","todayHighlight","orientation","templates","leftArrow","rightArrow","endDate","Date","clearBtn","on","e","console","log","resetEndDatePicker","val","prop","cancelMutation","mutationId","table","ajax","url","type","data","_token","attr","success","response","Swal","fire","title","text","icon","timer","showConfirmButton","alert","reload","error","xhr","errorMsg","responseJSON","message","document","ready","fn","DataTable","select2","placeholder","allowClear","width","warn","startDate","initializeDatepickers","setTimeout","isDataTable","destroy","processing","serverSide","d","dealer_filter","date_from","date_to","code","responseText","columnDefs","targets","className","columns","name","orderable","searchable","order","pageLength","responsive","ordering","orderMulti","dealerFilter","dateFrom","dateTo","dealer","trigger","which","click","this","setupFilterHandlers","settings","columnIndex","index","hasClass","draw","showCancelButton","confirmButtonColor","cancelButtonColor","confirmButtonText","cancelButtonText","then","result","isConfirmed","confirm","handleCancelMutation","find","html","input","maxValue","currentValue","parseFloat","addClass","siblings","length","after","removeClass","remove","setupTableEventHandlers","initializeDataTable"],"sourceRoot":""}
\ No newline at end of file
diff --git a/public/js/warehouse_management/opnames/index.js b/public/js/warehouse_management/opnames/index.js
index f84c839..a8c1f6a 100755
--- a/public/js/warehouse_management/opnames/index.js
+++ b/public/js/warehouse_management/opnames/index.js
@@ -1,2 +1,2 @@
-(()=>{function e(e){console.log("Enabling end date picker with min date:",e),$("#date_to").prop("disabled",!1),$("#date_to").datepicker("remove"),$("#date_to").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom auto",language:"id",clearBtn:!0,container:"body",startDate:e,endDate:new Date}).on("changeDate",(function(e){console.log("End date selected:",e.format())})).on("clearDate",(function(e){console.log("End date cleared")})),console.log("End date picker enabled with startDate:",e)}function a(){$("#date_to").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom auto",language:"id",clearBtn:!0,container:"body",endDate:new Date}).on("changeDate",(function(e){console.log("End date selected:",e.format())})).on("clearDate",(function(e){console.log("End date cleared")}))}function t(){$("#date_to").datepicker("remove"),$("#date_to").val(""),a(),$("#date_to").prop("disabled",!0),console.log("End date picker reset and disabled")}$(document).ready((function(){console.log("Opnames index.js loaded"),void 0!==$.fn.DataTable?(console.log("Initializing Select2..."),void 0!==$.fn.select2?$("#dealer_filter").select2({placeholder:"Pilih...",allowClear:!0,width:"100%"}):console.warn("Select2 not available, using regular select"),console.log("Initializing datepickers..."),$("#date_from").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom auto",language:"id",clearBtn:!0,container:"body",endDate:new Date}).on("changeDate",(function(a){console.log("Start date selected:",a.format()),e(a.format())})).on("clearDate",(function(e){console.log("Start date cleared"),t()})),a(),$("#date_to").prop("disabled",!0),$("#date_from").on("change",(function(){var a=$(this).val();a?(console.log("Start date change event:",a),e(a)):(console.log("Start date cleared via change event"),t())})),setTimeout((function(){!function(){console.log("Initializing DataTable..."),$.fn.DataTable.isDataTable("#opnames-table")&&$("#opnames-table").DataTable().destroy();var e=$("#opnames-table").DataTable({processing:!0,serverSide:!0,destroy:!0,ajax:{url:$("#opnames-table").data("url"),type:"GET",data:function(e){return e.dealer_filter=$("#dealer_filter").val(),e.date_from=$("#date_from").val(),e.date_to=$("#date_to").val(),console.log("AJAX data being sent:",{dealer_filter:e.dealer_filter,date_from:e.date_from,date_to:e.date_to}),e},error:function(e,a,t){console.error("DataTables AJAX error:",a,t),console.error("Response:",e.responseText)}},columnDefs:[{targets:0,width:"15%"},{targets:5,width:"15%",className:"text-center"}],columns:[{data:"created_at",name:"created_at",orderable:!0},{data:"opname_date",name:"opname_date",orderable:!0},{data:"dealer_name",name:"dealer.name",orderable:!0},{data:"user_name",name:"user.name",orderable:!0},{data:"status",name:"status",orderable:!0},{data:"action",name:"action",orderable:!1,searchable:!1}],order:[[4,"desc"]],pageLength:10,responsive:!0,ordering:!0,orderMulti:!1});(function(e){$("#kt_search").on("click",(function(){console.log("Filter button clicked");var a=$("#dealer_filter").val(),t=$("#date_from").val(),o=$("#date_to").val();console.log("Filtering with:",{dealer:a,dateFrom:t,dateTo:o}),e.ajax.reload()})),$("#kt_reset").on("click",(function(){console.log("Reset button clicked"),$("#dealer_filter").val(null).trigger("change.select2"),$("#date_from").datepicker("clearDates"),$("#date_to").datepicker("clearDates"),t(),e.ajax.reload()})),$("#date_from, #date_to").on("keypress",(function(e){13===e.which&&$("#kt_search").click()})),$("#dealer_filter").on("change",(function(){console.log("Dealer filter changed:",$(this).val())}))})(e),function(e){e.on("order.dt",(function(){console.log("Order changed:",e.order())})),e.on("processing.dt",(function(e,a,t){t?console.log("DataTable processing started"):console.log("DataTable processing finished")}))}(e)}()}),100)):console.error("DataTables not available!")}))})();
+(()=>{function e(){$("#date_to").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom left",templates:{leftArrow:'',rightArrow:''},endDate:new Date,clearBtn:!0}).on("changeDate",(function(e){console.log("End date selected:",e.format())})).on("clearDate",(function(e){console.log("End date cleared")}))}function a(){$("#date_to").datepicker("remove"),$("#date_to").val(""),e(),$("#date_to").prop("disabled",!0),console.log("End date picker reset and disabled")}$(document).ready((function(){console.log("Opnames index.js loaded"),void 0!==$.fn.DataTable?(console.log("Initializing Select2..."),void 0!==$.fn.select2?$("#dealer_filter").select2({placeholder:"Pilih...",allowClear:!0,width:"100%"}):console.warn("Select2 not available, using regular select"),function(){if(console.log("Initializing datepickers..."),void 0===$.fn.datepicker)return void console.error("Bootstrap Datepicker not available!");$("#date_from").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom left",templates:{leftArrow:'',rightArrow:''},endDate:new Date,clearBtn:!0}).on("changeDate",(function(e){var a;console.log("Start date selected:",e.format()),a=e.format(),console.log("Enabling end date picker with min date:",a),$("#date_to").prop("disabled",!1),$("#date_to").datepicker("remove"),$("#date_to").datepicker({format:"yyyy-mm-dd",autoclose:!0,todayHighlight:!0,orientation:"bottom left",templates:{leftArrow:'',rightArrow:''},startDate:a,endDate:new Date,clearBtn:!0}).on("changeDate",(function(e){console.log("End date selected:",e.format())})).on("clearDate",(function(e){console.log("End date cleared")})),console.log("End date picker enabled with startDate:",a)})).on("clearDate",(function(e){console.log("Start date cleared"),a()})),e(),$("#date_to").prop("disabled",!0)}(),setTimeout((function(){!function(){console.log("Initializing DataTable..."),$.fn.DataTable.isDataTable("#opnames-table")&&$("#opnames-table").DataTable().destroy();var e=$("#opnames-table").DataTable({processing:!0,serverSide:!0,destroy:!0,ajax:{url:$("#opnames-table").data("url"),type:"GET",data:function(e){return e.dealer_filter=$("#dealer_filter").val(),e.date_from=$("#date_from").val(),e.date_to=$("#date_to").val(),console.log("AJAX data being sent:",{dealer_filter:e.dealer_filter,date_from:e.date_from,date_to:e.date_to}),e},error:function(e,a,t){console.error("DataTables AJAX error:",a,t),console.error("Response:",e.responseText)}},columnDefs:[{targets:0,width:"15%"},{targets:5,width:"15%",className:"text-center"}],columns:[{data:"created_at",name:"created_at",orderable:!0},{data:"opname_date",name:"opname_date",orderable:!0},{data:"dealer_name",name:"dealer.name",orderable:!0},{data:"user_name",name:"user.name",orderable:!0},{data:"status",name:"status",orderable:!0},{data:"action",name:"action",orderable:!1,searchable:!1}],order:[[4,"desc"]],pageLength:10,responsive:!0,ordering:!0,orderMulti:!1});(function(e){$("#kt_search").on("click",(function(){console.log("Filter button clicked");var a=$("#dealer_filter").val(),t=$("#date_from").val(),o=$("#date_to").val();console.log("Filtering with:",{dealer:a,dateFrom:t,dateTo:o}),e.ajax.reload()})),$("#kt_reset").on("click",(function(){console.log("Reset button clicked"),$("#dealer_filter").val(null).trigger("change.select2"),$("#date_from").datepicker("clearDates"),$("#date_to").datepicker("clearDates"),a(),e.ajax.reload()})),$("#date_from, #date_to").on("keypress",(function(e){13===e.which&&$("#kt_search").click()})),$("#dealer_filter").on("change",(function(){console.log("Dealer filter changed:",$(this).val())}))})(e),function(e){e.on("order.dt",(function(){console.log("Order changed:",e.order())})),e.on("processing.dt",(function(e,a,t){t?console.log("DataTable processing started"):console.log("DataTable processing finished")}))}(e)}()}),100)):console.error("DataTables not available!")}))})();
//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/public/js/warehouse_management/opnames/index.js.map b/public/js/warehouse_management/opnames/index.js.map
index dd3d02e..ec30f05 100755
--- a/public/js/warehouse_management/opnames/index.js.map
+++ b/public/js/warehouse_management/opnames/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"/js/warehouse_management/opnames/index.js","mappings":"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","sources":["webpack:///./resources/js/warehouse_management/opnames/index.js"],"sourcesContent":["$(document).ready(function () {\n console.log(\"Opnames index.js loaded\");\n\n // Check if required libraries are available\n if (typeof $.fn.DataTable === \"undefined\") {\n console.error(\"DataTables not available!\");\n return;\n }\n\n // Initialize components\n initializeSelect2();\n initializeDatepickers();\n\n // Wait for DOM to be fully ready before initializing DataTable\n setTimeout(function () {\n initializeDataTable();\n }, 100);\n});\n\n/**\n * Initialize Select2 for dealer filter - same as stock audit\n */\nfunction initializeSelect2() {\n console.log(\"Initializing Select2...\");\n\n if (typeof $.fn.select2 !== \"undefined\") {\n $(\"#dealer_filter\").select2({\n placeholder: \"Pilih...\",\n allowClear: true,\n width: \"100%\",\n });\n } else {\n console.warn(\"Select2 not available, using regular select\");\n }\n}\n\n/**\n * Initialize date pickers with bootstrap datepicker - same as stock audit\n */\nfunction initializeDatepickers() {\n console.log(\"Initializing datepickers...\");\n\n // Initialize start date picker with bootstrap datepicker\n $(\"#date_from\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom auto\",\n language: \"id\",\n clearBtn: true,\n container: \"body\",\n endDate: new Date(), // Don't allow future dates\n })\n .on(\"changeDate\", function (e) {\n console.log(\"Start date selected:\", e.format());\n enableEndDatePicker(e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"Start date cleared\");\n resetEndDatePicker();\n });\n\n // Initialize end date picker with bootstrap datepicker\n initializeEndDatePicker();\n\n // Initially disable end date input\n $(\"#date_to\").prop(\"disabled\", true);\n\n // Setup change event handlers as backup\n setupChangeEventHandlers();\n}\n\n/**\n * Enable end date picker with minimum date constraint using bootstrap datepicker\n */\nfunction enableEndDatePicker(startDate) {\n console.log(\"Enabling end date picker with min date:\", startDate);\n\n // Enable the input\n $(\"#date_to\").prop(\"disabled\", false);\n\n // Remove existing datepicker\n $(\"#date_to\").datepicker(\"remove\");\n\n // Re-initialize with new startDate constraint using bootstrap datepicker\n $(\"#date_to\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom auto\",\n language: \"id\",\n clearBtn: true,\n container: \"body\",\n startDate: startDate, // Set minimum date to selected start date\n endDate: new Date(), // Don't allow future dates\n })\n .on(\"changeDate\", function (e) {\n console.log(\"End date selected:\", e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"End date cleared\");\n });\n\n console.log(\"End date picker enabled with startDate:\", startDate);\n}\n\n/**\n * Initialize end date picker without constraints using bootstrap datepicker\n */\nfunction initializeEndDatePicker() {\n $(\"#date_to\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom auto\",\n language: \"id\",\n clearBtn: true,\n container: \"body\",\n endDate: new Date(), // Don't allow future dates\n })\n .on(\"changeDate\", function (e) {\n console.log(\"End date selected:\", e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"End date cleared\");\n });\n}\n\n// Calendar icons and click handlers removed since bootstrap datepicker handles these automatically\n\n/**\n * Setup change event handlers for date inputs\n */\nfunction setupChangeEventHandlers() {\n // For bootstrap datepicker, we already handle events in the datepicker initialization\n // But we can add additional handling if needed\n $(\"#date_from\").on(\"change\", function () {\n const selectedDate = $(this).val();\n if (selectedDate) {\n console.log(\"Start date change event:\", selectedDate);\n enableEndDatePicker(selectedDate);\n } else {\n console.log(\"Start date cleared via change event\");\n resetEndDatePicker();\n }\n });\n}\n\n/**\n * Initialize DataTable with server-side processing and filtering\n */\nfunction initializeDataTable() {\n console.log(\"Initializing DataTable...\");\n\n // Destroy existing table if any\n if ($.fn.DataTable.isDataTable(\"#opnames-table\")) {\n $(\"#opnames-table\").DataTable().destroy();\n }\n\n // Initialize DataTable\n const table = $(\"#opnames-table\").DataTable({\n processing: true,\n serverSide: true,\n destroy: true,\n ajax: {\n url: $(\"#opnames-table\").data(\"url\"),\n type: \"GET\",\n data: function (d) {\n // Add filter parameters\n d.dealer_filter = $(\"#dealer_filter\").val();\n d.date_from = $(\"#date_from\").val();\n d.date_to = $(\"#date_to\").val();\n\n console.log(\"AJAX data being sent:\", {\n dealer_filter: d.dealer_filter,\n date_from: d.date_from,\n date_to: d.date_to,\n });\n\n return d;\n },\n error: function (xhr, error, code) {\n console.error(\"DataTables AJAX error:\", error, code);\n console.error(\"Response:\", xhr.responseText);\n },\n },\n columnDefs: [\n { targets: 0, width: \"15%\" }, // Opname Date column\n { targets: 5, width: \"15%\", className: \"text-center\" }, // Action column\n ],\n columns: [\n {\n data: \"created_at\",\n name: \"created_at\",\n orderable: true,\n },\n {\n data: \"opname_date\",\n name: \"opname_date\",\n orderable: true,\n },\n {\n data: \"dealer_name\",\n name: \"dealer.name\",\n orderable: true,\n },\n {\n data: \"user_name\",\n name: \"user.name\",\n orderable: true,\n },\n {\n data: \"status\",\n name: \"status\",\n orderable: true,\n },\n {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false,\n },\n ],\n order: [[4, \"desc\"]], // Order by created_at desc\n pageLength: 10,\n responsive: true,\n ordering: true,\n orderMulti: false,\n });\n\n // Setup filter button handlers\n setupFilterHandlers(table);\n\n // Setup other event handlers\n setupTableEventHandlers(table);\n}\n\n/**\n * Setup filter and reset button handlers\n */\nfunction setupFilterHandlers(table) {\n // Handle Filter Search Button\n $(\"#kt_search\").on(\"click\", function () {\n console.log(\"Filter button clicked\");\n\n const dealerFilter = $(\"#dealer_filter\").val();\n const dateFrom = $(\"#date_from\").val();\n const dateTo = $(\"#date_to\").val();\n\n console.log(\"Filtering with:\", {\n dealer: dealerFilter,\n dateFrom: dateFrom,\n dateTo: dateTo,\n });\n\n table.ajax.reload();\n });\n\n // Handle Filter Reset Button\n $(\"#kt_reset\").on(\"click\", function () {\n console.log(\"Reset button clicked\");\n\n // Reset select2 elements properly - same as stock audit\n $(\"#dealer_filter\").val(null).trigger(\"change.select2\");\n\n // Clear datepicker values using bootstrap datepicker method\n $(\"#date_from\").datepicker(\"clearDates\");\n $(\"#date_to\").datepicker(\"clearDates\");\n\n // Reset end date picker and disable it\n resetEndDatePicker();\n\n // Reload table\n table.ajax.reload();\n });\n\n // Handle Enter key on date inputs\n $(\"#date_from, #date_to\").on(\"keypress\", function (e) {\n if (e.which === 13) {\n // Enter key\n $(\"#kt_search\").click();\n }\n });\n\n // Optional: Auto-filter when dealer selection changes\n $(\"#dealer_filter\").on(\"change\", function () {\n console.log(\"Dealer filter changed:\", $(this).val());\n // Uncomment the line below if you want auto-filter on dealer change\n // table.ajax.reload();\n });\n}\n\n/**\n * Reset end date picker to initial state using bootstrap datepicker\n */\nfunction resetEndDatePicker() {\n // Remove existing datepicker\n $(\"#date_to\").datepicker(\"remove\");\n\n // Clear the input value\n $(\"#date_to\").val(\"\");\n\n // Re-initialize without startDate constraint\n initializeEndDatePicker();\n\n // Disable the input\n $(\"#date_to\").prop(\"disabled\", true);\n\n console.log(\"End date picker reset and disabled\");\n}\n\n/**\n * Setup additional table event handlers\n */\nfunction setupTableEventHandlers(table) {\n // Debug ordering events\n table.on(\"order.dt\", function () {\n console.log(\"Order changed:\", table.order());\n });\n\n // Add loading indicator for processing\n table.on(\"processing.dt\", function (e, settings, processing) {\n if (processing) {\n console.log(\"DataTable processing started\");\n } else {\n console.log(\"DataTable processing finished\");\n }\n });\n\n // Handle any custom button clicks here if needed\n // Example: $(document).on('click', '.custom-btn', function() { ... });\n}\n"],"names":["enableEndDatePicker","startDate","console","log","$","prop","datepicker","format","autoclose","todayHighlight","orientation","language","clearBtn","container","endDate","Date","on","e","initializeEndDatePicker","resetEndDatePicker","val","document","ready","fn","DataTable","select2","placeholder","allowClear","width","warn","selectedDate","this","setTimeout","isDataTable","destroy","table","processing","serverSide","ajax","url","data","type","d","dealer_filter","date_from","date_to","error","xhr","code","responseText","columnDefs","targets","className","columns","name","orderable","searchable","order","pageLength","responsive","ordering","orderMulti","dealerFilter","dateFrom","dateTo","dealer","reload","trigger","which","click","setupFilterHandlers","settings","setupTableEventHandlers","initializeDataTable"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"/js/warehouse_management/opnames/index.js","mappings":"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","sources":["webpack:///./resources/js/warehouse_management/opnames/index.js"],"sourcesContent":["$(document).ready(function () {\n console.log(\"Opnames index.js loaded\");\n\n // Check if required libraries are available\n if (typeof $.fn.DataTable === \"undefined\") {\n console.error(\"DataTables not available!\");\n return;\n }\n\n // Initialize components\n initializeSelect2();\n initializeDatepickers();\n\n // Wait for DOM to be fully ready before initializing DataTable\n setTimeout(function () {\n initializeDataTable();\n }, 100);\n});\n\n/**\n * Initialize Select2 for dealer filter - same as stock audit\n */\nfunction initializeSelect2() {\n console.log(\"Initializing Select2...\");\n\n if (typeof $.fn.select2 !== \"undefined\") {\n $(\"#dealer_filter\").select2({\n placeholder: \"Pilih...\",\n allowClear: true,\n width: \"100%\",\n });\n } else {\n console.warn(\"Select2 not available, using regular select\");\n }\n}\n\n/**\n * Initialize date pickers with bootstrap datepicker - same as transaction view\n */\nfunction initializeDatepickers() {\n console.log(\"Initializing datepickers...\");\n\n // Check if bootstrap datepicker is available\n if (typeof $.fn.datepicker === \"undefined\") {\n console.error(\"Bootstrap Datepicker not available!\");\n return;\n }\n\n // Initialize start date picker\n $(\"#date_from\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom left\",\n templates: {\n leftArrow: '',\n rightArrow: '',\n },\n endDate: new Date(), // Don't allow future dates\n clearBtn: true,\n })\n .on(\"changeDate\", function (e) {\n console.log(\"Start date selected:\", e.format());\n enableEndDatePicker(e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"Start date cleared\");\n resetEndDatePicker();\n });\n\n // Initialize end date picker\n initializeEndDatePicker();\n\n // Initially disable end date input\n $(\"#date_to\").prop(\"disabled\", true);\n}\n\n/**\n * Enable end date picker with minimum date constraint\n */\nfunction enableEndDatePicker(startDate) {\n console.log(\"Enabling end date picker with min date:\", startDate);\n\n // Enable the input\n $(\"#date_to\").prop(\"disabled\", false);\n\n // Remove existing datepicker\n $(\"#date_to\").datepicker(\"remove\");\n\n // Re-initialize with new startDate constraint\n $(\"#date_to\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom left\",\n templates: {\n leftArrow: '',\n rightArrow: '',\n },\n startDate: startDate, // Set minimum date to selected start date\n endDate: new Date(), // Don't allow future dates\n clearBtn: true,\n })\n .on(\"changeDate\", function (e) {\n console.log(\"End date selected:\", e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"End date cleared\");\n });\n\n console.log(\"End date picker enabled with startDate:\", startDate);\n}\n\n/**\n * Initialize end date picker without constraints\n */\nfunction initializeEndDatePicker() {\n $(\"#date_to\")\n .datepicker({\n format: \"yyyy-mm-dd\",\n autoclose: true,\n todayHighlight: true,\n orientation: \"bottom left\",\n templates: {\n leftArrow: '',\n rightArrow: '',\n },\n endDate: new Date(), // Don't allow future dates\n clearBtn: true,\n })\n .on(\"changeDate\", function (e) {\n console.log(\"End date selected:\", e.format());\n })\n .on(\"clearDate\", function (e) {\n console.log(\"End date cleared\");\n });\n}\n\n/**\n * Reset end date picker to initial state\n */\nfunction resetEndDatePicker() {\n // Remove existing datepicker\n $(\"#date_to\").datepicker(\"remove\");\n\n // Clear the input value\n $(\"#date_to\").val(\"\");\n\n // Re-initialize without startDate constraint\n initializeEndDatePicker();\n\n // Disable the input\n $(\"#date_to\").prop(\"disabled\", true);\n\n console.log(\"End date picker reset and disabled\");\n}\n\n/**\n * Initialize DataTable with server-side processing and filtering\n */\nfunction initializeDataTable() {\n console.log(\"Initializing DataTable...\");\n\n // Destroy existing table if any\n if ($.fn.DataTable.isDataTable(\"#opnames-table\")) {\n $(\"#opnames-table\").DataTable().destroy();\n }\n\n // Initialize DataTable\n const table = $(\"#opnames-table\").DataTable({\n processing: true,\n serverSide: true,\n destroy: true,\n ajax: {\n url: $(\"#opnames-table\").data(\"url\"),\n type: \"GET\",\n data: function (d) {\n // Add filter parameters\n d.dealer_filter = $(\"#dealer_filter\").val();\n d.date_from = $(\"#date_from\").val();\n d.date_to = $(\"#date_to\").val();\n\n console.log(\"AJAX data being sent:\", {\n dealer_filter: d.dealer_filter,\n date_from: d.date_from,\n date_to: d.date_to,\n });\n\n return d;\n },\n error: function (xhr, error, code) {\n console.error(\"DataTables AJAX error:\", error, code);\n console.error(\"Response:\", xhr.responseText);\n },\n },\n columnDefs: [\n { targets: 0, width: \"15%\" }, // Opname Date column\n { targets: 5, width: \"15%\", className: \"text-center\" }, // Action column\n ],\n columns: [\n {\n data: \"created_at\",\n name: \"created_at\",\n orderable: true,\n },\n {\n data: \"opname_date\",\n name: \"opname_date\",\n orderable: true,\n },\n {\n data: \"dealer_name\",\n name: \"dealer.name\",\n orderable: true,\n },\n {\n data: \"user_name\",\n name: \"user.name\",\n orderable: true,\n },\n {\n data: \"status\",\n name: \"status\",\n orderable: true,\n },\n {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false,\n },\n ],\n order: [[4, \"desc\"]], // Order by created_at desc\n pageLength: 10,\n responsive: true,\n ordering: true,\n orderMulti: false,\n });\n\n // Setup filter button handlers\n setupFilterHandlers(table);\n\n // Setup other event handlers\n setupTableEventHandlers(table);\n}\n\n/**\n * Setup filter and reset button handlers\n */\nfunction setupFilterHandlers(table) {\n // Handle Filter Search Button\n $(\"#kt_search\").on(\"click\", function () {\n console.log(\"Filter button clicked\");\n\n const dealerFilter = $(\"#dealer_filter\").val();\n const dateFrom = $(\"#date_from\").val();\n const dateTo = $(\"#date_to\").val();\n\n console.log(\"Filtering with:\", {\n dealer: dealerFilter,\n dateFrom: dateFrom,\n dateTo: dateTo,\n });\n\n table.ajax.reload();\n });\n\n // Handle Filter Reset Button\n $(\"#kt_reset\").on(\"click\", function () {\n console.log(\"Reset button clicked\");\n\n // Reset select2 elements properly - same as stock audit\n $(\"#dealer_filter\").val(null).trigger(\"change.select2\");\n\n // Clear datepicker values using bootstrap datepicker method\n $(\"#date_from\").datepicker(\"clearDates\");\n $(\"#date_to\").datepicker(\"clearDates\");\n\n // Reset end date picker and disable it\n resetEndDatePicker();\n\n // Reload table\n table.ajax.reload();\n });\n\n // Handle Enter key on date inputs\n $(\"#date_from, #date_to\").on(\"keypress\", function (e) {\n if (e.which === 13) {\n // Enter key\n $(\"#kt_search\").click();\n }\n });\n\n // Optional: Auto-filter when dealer selection changes\n $(\"#dealer_filter\").on(\"change\", function () {\n console.log(\"Dealer filter changed:\", $(this).val());\n // Uncomment the line below if you want auto-filter on dealer change\n // table.ajax.reload();\n });\n}\n\n/**\n * Setup additional table event handlers\n */\nfunction setupTableEventHandlers(table) {\n // Debug ordering events\n table.on(\"order.dt\", function () {\n console.log(\"Order changed:\", table.order());\n });\n\n // Add loading indicator for processing\n table.on(\"processing.dt\", function (e, settings, processing) {\n if (processing) {\n console.log(\"DataTable processing started\");\n } else {\n console.log(\"DataTable processing finished\");\n }\n });\n\n // Handle any custom button clicks here if needed\n // Example: $(document).on('click', '.custom-btn', function() { ... });\n}\n"],"names":["initializeEndDatePicker","$","datepicker","format","autoclose","todayHighlight","orientation","templates","leftArrow","rightArrow","endDate","Date","clearBtn","on","e","console","log","resetEndDatePicker","val","prop","document","ready","fn","DataTable","select2","placeholder","allowClear","width","warn","error","startDate","initializeDatepickers","setTimeout","isDataTable","destroy","table","processing","serverSide","ajax","url","data","type","d","dealer_filter","date_from","date_to","xhr","code","responseText","columnDefs","targets","className","columns","name","orderable","searchable","order","pageLength","responsive","ordering","orderMulti","dealerFilter","dateFrom","dateTo","dealer","reload","trigger","which","click","this","setupFilterHandlers","settings","setupTableEventHandlers","initializeDataTable"],"sourceRoot":""}
\ No newline at end of file
diff --git a/resources/js/warehouse_management/mutations/index.js b/resources/js/warehouse_management/mutations/index.js
index bf5f630..6b2b435 100755
--- a/resources/js/warehouse_management/mutations/index.js
+++ b/resources/js/warehouse_management/mutations/index.js
@@ -35,17 +35,25 @@ function initializeSelect2() {
function initializeDatepickers() {
console.log("Initializing datepickers...");
- // Initialize start date picker with bootstrap datepicker
+ // Check if bootstrap datepicker is available
+ if (typeof $.fn.datepicker === "undefined") {
+ console.error("Bootstrap Datepicker not available!");
+ return;
+ }
+
+ // Initialize start date picker
$("#date_from")
.datepicker({
format: "yyyy-mm-dd",
autoclose: true,
todayHighlight: true,
- orientation: "bottom auto",
- language: "id",
- clearBtn: true,
- container: "body",
+ orientation: "bottom left",
+ templates: {
+ leftArrow: '',
+ rightArrow: '',
+ },
endDate: new Date(), // Don't allow future dates
+ clearBtn: true,
})
.on("changeDate", function (e) {
console.log("Start date selected:", e.format());
@@ -56,14 +64,11 @@ function initializeDatepickers() {
resetEndDatePicker();
});
- // Initialize end date picker with bootstrap datepicker
+ // Initialize end date picker
initializeEndDatePicker();
// Initially disable end date input
$("#date_to").prop("disabled", true);
-
- // Setup change event handlers
- setupChangeEventHandlers();
}
function enableEndDatePicker(startDate) {
@@ -72,21 +77,23 @@ function enableEndDatePicker(startDate) {
// Enable the input
$("#date_to").prop("disabled", false);
- // Destroy existing datepicker
+ // Remove existing datepicker
$("#date_to").datepicker("remove");
- // Re-initialize with new startDate constraint using bootstrap datepicker
+ // Re-initialize with new startDate constraint
$("#date_to")
.datepicker({
format: "yyyy-mm-dd",
autoclose: true,
todayHighlight: true,
- orientation: "bottom auto",
- language: "id",
- clearBtn: true,
- container: "body",
+ orientation: "bottom left",
+ templates: {
+ leftArrow: '',
+ rightArrow: '',
+ },
startDate: startDate, // Set minimum date to selected start date
endDate: new Date(), // Don't allow future dates
+ clearBtn: true,
})
.on("changeDate", function (e) {
console.log("End date selected:", e.format());
@@ -104,11 +111,13 @@ function initializeEndDatePicker() {
format: "yyyy-mm-dd",
autoclose: true,
todayHighlight: true,
- orientation: "bottom auto",
- language: "id",
- clearBtn: true,
- container: "body",
+ orientation: "bottom left",
+ templates: {
+ leftArrow: '',
+ rightArrow: '',
+ },
endDate: new Date(), // Don't allow future dates
+ clearBtn: true,
})
.on("changeDate", function (e) {
console.log("End date selected:", e.format());
@@ -120,21 +129,6 @@ function initializeEndDatePicker() {
// Calendar icons and click handlers removed since bootstrap datepicker handles these automatically
-function setupChangeEventHandlers() {
- // For bootstrap datepicker, we already handle events in the datepicker initialization
- // But we can add additional handling if needed
- $("#date_from").on("change", function () {
- const selectedDate = $(this).val();
- if (selectedDate) {
- console.log("Start date change event:", selectedDate);
- enableEndDatePicker(selectedDate);
- } else {
- console.log("Start date cleared via change event");
- resetEndDatePicker();
- }
- });
-}
-
function initializeDataTable() {
console.log("Initializing DataTable...");
diff --git a/resources/js/warehouse_management/opnames/index.js b/resources/js/warehouse_management/opnames/index.js
index 69152bd..2cf7cff 100755
--- a/resources/js/warehouse_management/opnames/index.js
+++ b/resources/js/warehouse_management/opnames/index.js
@@ -35,22 +35,30 @@ function initializeSelect2() {
}
/**
- * Initialize date pickers with bootstrap datepicker - same as stock audit
+ * Initialize date pickers with bootstrap datepicker - same as transaction view
*/
function initializeDatepickers() {
console.log("Initializing datepickers...");
- // Initialize start date picker with bootstrap datepicker
+ // Check if bootstrap datepicker is available
+ if (typeof $.fn.datepicker === "undefined") {
+ console.error("Bootstrap Datepicker not available!");
+ return;
+ }
+
+ // Initialize start date picker
$("#date_from")
.datepicker({
format: "yyyy-mm-dd",
autoclose: true,
todayHighlight: true,
- orientation: "bottom auto",
- language: "id",
- clearBtn: true,
- container: "body",
+ orientation: "bottom left",
+ templates: {
+ leftArrow: '',
+ rightArrow: '',
+ },
endDate: new Date(), // Don't allow future dates
+ clearBtn: true,
})
.on("changeDate", function (e) {
console.log("Start date selected:", e.format());
@@ -61,18 +69,15 @@ function initializeDatepickers() {
resetEndDatePicker();
});
- // Initialize end date picker with bootstrap datepicker
+ // Initialize end date picker
initializeEndDatePicker();
// Initially disable end date input
$("#date_to").prop("disabled", true);
-
- // Setup change event handlers as backup
- setupChangeEventHandlers();
}
/**
- * Enable end date picker with minimum date constraint using bootstrap datepicker
+ * Enable end date picker with minimum date constraint
*/
function enableEndDatePicker(startDate) {
console.log("Enabling end date picker with min date:", startDate);
@@ -83,18 +88,20 @@ function enableEndDatePicker(startDate) {
// Remove existing datepicker
$("#date_to").datepicker("remove");
- // Re-initialize with new startDate constraint using bootstrap datepicker
+ // Re-initialize with new startDate constraint
$("#date_to")
.datepicker({
format: "yyyy-mm-dd",
autoclose: true,
todayHighlight: true,
- orientation: "bottom auto",
- language: "id",
- clearBtn: true,
- container: "body",
+ orientation: "bottom left",
+ templates: {
+ leftArrow: '',
+ rightArrow: '',
+ },
startDate: startDate, // Set minimum date to selected start date
endDate: new Date(), // Don't allow future dates
+ clearBtn: true,
})
.on("changeDate", function (e) {
console.log("End date selected:", e.format());
@@ -107,7 +114,7 @@ function enableEndDatePicker(startDate) {
}
/**
- * Initialize end date picker without constraints using bootstrap datepicker
+ * Initialize end date picker without constraints
*/
function initializeEndDatePicker() {
$("#date_to")
@@ -115,11 +122,13 @@ function initializeEndDatePicker() {
format: "yyyy-mm-dd",
autoclose: true,
todayHighlight: true,
- orientation: "bottom auto",
- language: "id",
- clearBtn: true,
- container: "body",
+ orientation: "bottom left",
+ templates: {
+ leftArrow: '',
+ rightArrow: '',
+ },
endDate: new Date(), // Don't allow future dates
+ clearBtn: true,
})
.on("changeDate", function (e) {
console.log("End date selected:", e.format());
@@ -129,24 +138,23 @@ function initializeEndDatePicker() {
});
}
-// Calendar icons and click handlers removed since bootstrap datepicker handles these automatically
-
/**
- * Setup change event handlers for date inputs
+ * Reset end date picker to initial state
*/
-function setupChangeEventHandlers() {
- // For bootstrap datepicker, we already handle events in the datepicker initialization
- // But we can add additional handling if needed
- $("#date_from").on("change", function () {
- const selectedDate = $(this).val();
- if (selectedDate) {
- console.log("Start date change event:", selectedDate);
- enableEndDatePicker(selectedDate);
- } else {
- console.log("Start date cleared via change event");
- resetEndDatePicker();
- }
- });
+function resetEndDatePicker() {
+ // Remove existing datepicker
+ $("#date_to").datepicker("remove");
+
+ // Clear the input value
+ $("#date_to").val("");
+
+ // Re-initialize without startDate constraint
+ initializeEndDatePicker();
+
+ // Disable the input
+ $("#date_to").prop("disabled", true);
+
+ console.log("End date picker reset and disabled");
}
/**
@@ -293,25 +301,6 @@ function setupFilterHandlers(table) {
});
}
-/**
- * Reset end date picker to initial state using bootstrap datepicker
- */
-function resetEndDatePicker() {
- // Remove existing datepicker
- $("#date_to").datepicker("remove");
-
- // Clear the input value
- $("#date_to").val("");
-
- // Re-initialize without startDate constraint
- initializeEndDatePicker();
-
- // Disable the input
- $("#date_to").prop("disabled", true);
-
- console.log("End date picker reset and disabled");
-}
-
/**
* Setup additional table event handlers
*/
diff --git a/resources/views/transaction/index.blade.php b/resources/views/transaction/index.blade.php
index e42f189..21aa96d 100755
--- a/resources/views/transaction/index.blade.php
+++ b/resources/views/transaction/index.blade.php
@@ -824,7 +824,7 @@ use Illuminate\Support\Facades\Auth;