fix login auto detect menu link, and partial update tchnician role dealer
This commit is contained in:
@@ -153,7 +153,7 @@
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-12">
|
||||
<small class="form-text text-muted" id="default-dealer-info">Pilih dealer untuk memfilter data atau biarkan "Semua Dealer" untuk melihat data lengkap.</small>
|
||||
<small class="form-text text-muted" id="default-dealer-info">Filter diset ke "Semua Dealer" untuk melihat data lengkap. Pilih dealer untuk memfilter data.</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -283,14 +283,45 @@ $(document).ready(function() {
|
||||
// Initialize Select2 after populating options
|
||||
initializeSelect2();
|
||||
|
||||
// Default ke "Semua Dealer" (tidak ada dealer yang terselect)
|
||||
console.log('Default set to "Semua Dealer"');
|
||||
$('#default-dealer-info').text('Pilih dealer untuk memfilter data atau biarkan "Semua Dealer" untuk melihat data lengkap.');
|
||||
// Set default dealer if provided
|
||||
if (response.default_dealer && response.data.length > 0) {
|
||||
// Don't set default dealer - always show "Semua Dealer" on initial load
|
||||
$('#default-dealer-info').text('Filter diset ke "Semua Dealer" untuk melihat data lengkap. Pilih dealer untuk memfilter data.');
|
||||
|
||||
// Load initial data without dealer filter (show all dealers)
|
||||
if (!isInitialized) {
|
||||
console.log('Default dealer available but loading with "Semua Dealer" filter');
|
||||
loadInitialMechanics();
|
||||
}
|
||||
} else if (response.default_dealer === null && response.data.length > 0) {
|
||||
// Admin without default dealer - show all dealers without selection
|
||||
$('#default-dealer-info').text('Filter diset ke "Semua Dealer" untuk melihat data lengkap. Pilih dealer untuk memfilter data.');
|
||||
|
||||
// Load initial data without dealer filter
|
||||
if (!isInitialized) {
|
||||
console.log('Admin without default dealer, loading initial data');
|
||||
loadInitialMechanics();
|
||||
}
|
||||
} else if (response.data.length > 0) {
|
||||
$('#default-dealer-info').text('Filter diset ke "Semua Dealer" untuk melihat data lengkap. Pilih dealer untuk memfilter data.');
|
||||
|
||||
// Load initial data without dealer filter
|
||||
if (!isInitialized) {
|
||||
console.log('No default dealer, loading initial data');
|
||||
loadInitialMechanics();
|
||||
}
|
||||
} else {
|
||||
// No dealers available
|
||||
$('#default-dealer-info').text('Tidak ada dealer yang tersedia untuk Anda.');
|
||||
hideLoadingOverlay();
|
||||
}
|
||||
|
||||
// Load initial mechanics and then initialize DataTable
|
||||
if (!isInitialized) {
|
||||
console.log('Dealers loaded, loading initial mechanics...');
|
||||
loadInitialMechanics();
|
||||
// Check if user has access to any dealers
|
||||
if (response.data.length === 0) {
|
||||
toastr.warning('Anda tidak memiliki akses ke dealer manapun. Silakan hubungi administrator.');
|
||||
$('#default-dealer-info').text('Anda tidak memiliki akses ke dealer manapun.');
|
||||
hideLoadingOverlay();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
toastr.error('Gagal memuat data dealer');
|
||||
@@ -304,14 +335,14 @@ $(document).ready(function() {
|
||||
});
|
||||
}
|
||||
|
||||
function loadInitialMechanics() {
|
||||
// Get initial filter values (empty dealer, default dates)
|
||||
let dealerId = '';
|
||||
function loadDataWithDealer(dealerId) {
|
||||
// Show loading overlay
|
||||
showLoadingOverlay("Memuat data laporan teknisi...");
|
||||
|
||||
const startDate = $('#filter-start-date').val();
|
||||
const endDate = $('#filter-end-date').val();
|
||||
|
||||
// Show loading overlay
|
||||
showLoadingOverlay("Memuat data laporan teknisi...");
|
||||
console.log('Loading data with dealer:', dealerId, 'date range:', { startDate, endDate });
|
||||
|
||||
// Get mechanics first, then initialize DataTable
|
||||
$.ajax({
|
||||
@@ -319,9 +350,21 @@ $(document).ready(function() {
|
||||
type: 'GET',
|
||||
data: { dealer_id: dealerId, start_date: startDate, end_date: endDate },
|
||||
success: function(response) {
|
||||
console.log('Data response:', response);
|
||||
|
||||
if (response.status === 'success' && Array.isArray(response.mechanics)) {
|
||||
mechanics = response.mechanics;
|
||||
console.log('Initial mechanics loaded:', mechanics.length);
|
||||
console.log('Data loaded with dealer:', dealerId, 'mechanics:', mechanics.length);
|
||||
|
||||
// Check if user has access to any data
|
||||
if (response.data.length === 0 && response.mechanics.length === 0) {
|
||||
console.log('No data available for dealer:', dealerId);
|
||||
toastr.info('Tidak ada data yang tersedia untuk dealer yang dipilih. Silakan pilih dealer lain.');
|
||||
$('#default-dealer-info').text('Tidak ada data yang tersedia untuk dealer yang dipilih.');
|
||||
hideLoadingOverlay();
|
||||
return;
|
||||
}
|
||||
|
||||
// Now initialize DataTable with mechanics ready
|
||||
updateTableStructureWithMechanics();
|
||||
isInitialized = true;
|
||||
@@ -332,7 +375,70 @@ $(document).ready(function() {
|
||||
isInitialized = true;
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
error: function(xhr, status, error) {
|
||||
console.error('Error loading data with dealer:', error);
|
||||
console.error('Response:', xhr.responseText);
|
||||
|
||||
toastr.error('Gagal memuat data untuk dealer yang dipilih. Silakan coba lagi.');
|
||||
hideLoadingOverlay();
|
||||
|
||||
// Don't try fallback to avoid multiple notifications
|
||||
mechanics = [];
|
||||
updateTableStructureWithMechanics();
|
||||
isInitialized = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function loadInitialMechanics() {
|
||||
// Get initial filter values (empty dealer, default dates)
|
||||
let dealerId = '';
|
||||
const startDate = $('#filter-start-date').val();
|
||||
const endDate = $('#filter-end-date').val();
|
||||
|
||||
console.log('Loading initial mechanics without dealer filter, date range:', { startDate, endDate });
|
||||
|
||||
// Show loading overlay
|
||||
showLoadingOverlay("Memuat data laporan teknisi...");
|
||||
|
||||
// Get mechanics first, then initialize DataTable
|
||||
$.ajax({
|
||||
url: '{{ route("reports.technician.data") }}',
|
||||
type: 'GET',
|
||||
data: { dealer_id: dealerId, start_date: startDate, end_date: endDate },
|
||||
success: function(response) {
|
||||
console.log('Initial data response:', response);
|
||||
|
||||
if (response.status === 'success' && Array.isArray(response.mechanics)) {
|
||||
mechanics = response.mechanics;
|
||||
console.log('Initial mechanics loaded:', mechanics.length);
|
||||
|
||||
// Check if user has access to any data
|
||||
if (response.data.length === 0 && response.mechanics.length === 0) {
|
||||
console.log('No data available without dealer filter');
|
||||
// Don't show notification for initial load without dealer filter
|
||||
$('#default-dealer-info').text('Tidak ada data yang tersedia. Silakan pilih dealer untuk memfilter data.');
|
||||
hideLoadingOverlay();
|
||||
return;
|
||||
}
|
||||
|
||||
// Now initialize DataTable with mechanics ready
|
||||
updateTableStructureWithMechanics();
|
||||
isInitialized = true;
|
||||
} else {
|
||||
console.warn('Invalid mechanics data, using fallback');
|
||||
mechanics = [];
|
||||
updateTableStructureWithMechanics();
|
||||
isInitialized = true;
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('Error loading initial mechanics:', error);
|
||||
console.error('Response:', xhr.responseText);
|
||||
|
||||
toastr.error('Gagal memuat data laporan teknisi. Silakan coba lagi.');
|
||||
hideLoadingOverlay();
|
||||
|
||||
console.warn('Error loading initial mechanics, using fallback');
|
||||
mechanics = [];
|
||||
updateTableStructureWithMechanics();
|
||||
@@ -382,6 +488,12 @@ $(document).ready(function() {
|
||||
mechanics = [];
|
||||
}
|
||||
|
||||
// Check if user has access to any data
|
||||
if (response.data.length === 0 && response.mechanics.length === 0) {
|
||||
toastr.info('Tidak ada data yang tersedia untuk filter yang dipilih atau Anda tidak memiliki akses ke data tersebut.');
|
||||
$('#default-dealer-info').text('Tidak ada data yang tersedia untuk filter yang dipilih.');
|
||||
}
|
||||
|
||||
} else {
|
||||
console.error('Server returned error status:', response);
|
||||
toastr.error('Gagal memuat data laporan teknisi');
|
||||
@@ -401,7 +513,7 @@ $(document).ready(function() {
|
||||
} else if (xhr.status === 404) {
|
||||
errorMessage = 'Endpoint tidak ditemukan';
|
||||
} else if (xhr.status === 403) {
|
||||
errorMessage = 'Akses ditolak';
|
||||
errorMessage = 'Akses ditolak - Anda tidak memiliki izin untuk mengakses data ini';
|
||||
}
|
||||
|
||||
toastr.error(errorMessage);
|
||||
@@ -500,6 +612,13 @@ $(document).ready(function() {
|
||||
dataSrc: function(json) {
|
||||
console.log('DataTable response:', json);
|
||||
|
||||
// Check for error response
|
||||
if (json.error) {
|
||||
console.error('DataTable error:', json.error);
|
||||
toastr.error('Error loading data: ' + json.error);
|
||||
return [];
|
||||
}
|
||||
|
||||
// Update mechanics from response
|
||||
if (json.mechanics && Array.isArray(json.mechanics)) {
|
||||
mechanics = json.mechanics;
|
||||
@@ -512,6 +631,27 @@ $(document).ready(function() {
|
||||
}
|
||||
|
||||
return json.data || [];
|
||||
},
|
||||
error: function(xhr, error, thrown) {
|
||||
console.error('DataTable AJAX error:', {
|
||||
xhr: xhr,
|
||||
error: error,
|
||||
thrown: thrown
|
||||
});
|
||||
|
||||
let errorMessage = 'Gagal memuat data';
|
||||
if (xhr.responseJSON && xhr.responseJSON.error) {
|
||||
errorMessage = xhr.responseJSON.error;
|
||||
} else if (xhr.status === 500) {
|
||||
errorMessage = 'Server error: ' + (xhr.responseText || 'Unknown error');
|
||||
} else if (xhr.status === 404) {
|
||||
errorMessage = 'Endpoint tidak ditemukan';
|
||||
} else if (xhr.status === 403) {
|
||||
errorMessage = 'Akses ditolak';
|
||||
}
|
||||
|
||||
toastr.error(errorMessage);
|
||||
hideLoadingOverlay();
|
||||
}
|
||||
},
|
||||
columns: [
|
||||
@@ -754,12 +894,40 @@ $(document).ready(function() {
|
||||
dataSrc: function(json) {
|
||||
console.log('DataTable response:', json);
|
||||
|
||||
// Check for error response
|
||||
if (json.error) {
|
||||
console.error('DataTable error:', json.error);
|
||||
toastr.error('Error loading data: ' + json.error);
|
||||
return [];
|
||||
}
|
||||
|
||||
// Don't update mechanics from datatable response - use existing mechanics
|
||||
// if (json.mechanics && Array.isArray(json.mechanics)) {
|
||||
// mechanics = json.mechanics;
|
||||
// }
|
||||
|
||||
return json.data || [];
|
||||
},
|
||||
error: function(xhr, error, thrown) {
|
||||
console.error('DataTable AJAX error:', {
|
||||
xhr: xhr,
|
||||
error: error,
|
||||
thrown: thrown
|
||||
});
|
||||
|
||||
let errorMessage = 'Gagal memuat data';
|
||||
if (xhr.responseJSON && xhr.responseJSON.error) {
|
||||
errorMessage = xhr.responseJSON.error;
|
||||
} else if (xhr.status === 500) {
|
||||
errorMessage = 'Server error: ' + (xhr.responseText || 'Unknown error');
|
||||
} else if (xhr.status === 404) {
|
||||
errorMessage = 'Endpoint tidak ditemukan';
|
||||
} else if (xhr.status === 403) {
|
||||
errorMessage = 'Akses ditolak';
|
||||
}
|
||||
|
||||
toastr.error(errorMessage);
|
||||
hideLoadingOverlay();
|
||||
}
|
||||
},
|
||||
columns: columns,
|
||||
@@ -1105,7 +1273,7 @@ $(document).ready(function() {
|
||||
$('#btn-reset').on('click', function() {
|
||||
console.log('Reset button clicked');
|
||||
|
||||
// Reset dealer selection
|
||||
// Reset dealer selection to "Semua Dealer"
|
||||
if (typeof $.fn.select2 !== 'undefined' && $('#filter-dealer').data('select2')) {
|
||||
$('#filter-dealer').val('').trigger('change');
|
||||
} else {
|
||||
@@ -1116,7 +1284,7 @@ $(document).ready(function() {
|
||||
$('#filter-start-date').val('{{ date('Y-m-d', strtotime('-30 days')) }}');
|
||||
$('#filter-end-date').val('{{ date('Y-m-d') }}');
|
||||
|
||||
console.log('Filters reset, reloading DataTable...');
|
||||
console.log('Filters reset to "Semua Dealer", reloading DataTable...');
|
||||
|
||||
// Reset initialization flag
|
||||
isInitialized = false;
|
||||
|
||||
Reference in New Issue
Block a user