jQuery(document).ready(function($) {
// آرایه رنگهای متمایز
var colors = [
'#FF0000', '#00FF00', '#0000FF', '#FF00FF', '#FFFF00',
'#00FFFF', '#FFA500', '#800080', '#008000', '#FFC0CB'
];
// نمایش پیام
function showMessage(message, type) {
var messageClass = 'notice-' + type;
var $notice = $('
');
$('.wrap').prepend($notice);
setTimeout(function() { $notice.fadeOut().remove(); }, 5000);
}
// بررسی وجود Leaflet
if (typeof L === 'undefined') {
console.error('Leaflet is not loaded.');
$('#map').html('خطا: نقشه لود نشد. لطفاً اتصال اینترنت را بررسی کنید.
');
return;
}
// ایجاد نقشه
var map = L.map('map').setView([35.6892, 51.3890], 11);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap'
}).addTo(map);
var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);
var drawControl = new L.Control.Draw({
edit: {
featureGroup: drawnItems
},
draw: {
polygon: true,
polyline: false,
rectangle: false,
circle: false,
marker: false,
circlemarker: false
}
});
map.addControl(drawControl);
var currentZoneId = null;
var currentLayer = null;
map.on('draw:created', function(e) {
if (currentLayer) {
drawnItems.removeLayer(currentLayer);
}
currentLayer = e.layer;
drawnItems.addLayer(currentLayer);
});
map.on('draw:edited', function(e) {
if (currentLayer) {
// بهروزرسانی مختصات هنگام ویرایش
console.log('Polygon edited:', currentLayer.toGeoJSON());
}
});
// دریافت محدودهها
function loadZones() {
$.ajax({
url: alaOrData.ajax_url,
method: 'POST',
data: {
action: 'ala_or_get_zones',
nonce: alaOrData.nonce
},
success: function(response) {
console.log('Zones Response:', response);
if (response.success && response.data) {
$('#zone-list').empty();
response.data.forEach(function(zone, index) {
if (zone.coordinates && Array.isArray(zone.coordinates[0])) {
var leafletCoords = zone.coordinates[0].map(coord => [coord.lat, coord.lng]);
var zoneColor = colors[index % colors.length];
var polygon = L.polygon(leafletCoords, { color: zoneColor }).addTo(map);
polygon.bindPopup('منطقه: ' + (zone.zone_name || 'بدون نام') + ' شعبه: ' + (zone.branch_name || 'بدون شعبه'));
drawnItems.addLayer(polygon);
var $li = $('' +
'منطقه: ' + (zone.zone_name || 'بدون نام') + ' | شعبه: ' + (zone.branch_name || 'بدون شعبه') +
'ویرایش ' +
'حذف ');
$('#zone-list').append($li);
}
});
} else {
console.error('Failed to load zones:', response);
showMessage('خطا در بارگذاری محدودهها.', 'error');
}
},
error: function(xhr, status, error) {
console.error('Zones AJAX Error:', status, error);
showMessage('خطا در ارتباط با سرور.', 'error');
}
});
}
// دریافت مسئولین شعبه
function loadManagers() {
$.ajax({
url: alaOrData.ajax_url,
method: 'POST',
data: {
action: 'ala_or_get_managers',
nonce: alaOrData.nonce
},
success: function(response) {
console.log('Managers Response:', response);
if (response.success && response.data) {
$('#manager-list').empty();
response.data.forEach(function(manager) {
var $li = $('' +
'شعبه: ' + (manager.branch_name || 'بدون نام') +
' | مسئول: ' + (manager.display_name || 'بدون نام') +
' (' + (manager.user_email || 'بدون ایمیل') + ')' +
'حذف ');
$('#manager-list').append($li);
});
} else {
console.error('Failed to load managers:', response);
showMessage('خطا در بارگذاری مسئولین شعبه.', 'error');
}
},
error: function(xhr, status, error) {
console.error('Managers AJAX Error:', status, error);
showMessage('خطا در ارتباط با سرور.', 'error');
}
});
}
// ارسال فرم محدوده
$('#zone-form').on('submit', function(e) {
e.preventDefault();
if (!currentLayer) {
showMessage('لطفاً یک محدوده روی نقشه رسم کنید.', 'error');
return;
}
var coordinates = currentLayer.getLatLngs();
var zoneName = $('#zone-name').val().trim();
var branchName = $('#branch-name').val().trim();
var data = {
action: currentZoneId ? 'ala_or_edit_zone' : 'ala_or_save_zone',
nonce: alaOrData.nonce,
zone_name: zoneName,
branch_name: branchName,
coordinates: JSON.stringify(coordinates)
};
if (currentZoneId) {
data.zone_id = currentZoneId;
}
$.ajax({
url: alaOrData.ajax_url,
method: 'POST',
data: data,
success: function(response) {
console.log('Zone Save/Edit Response:', response);
if (response.success) {
showMessage(currentZoneId ? 'محدوده با موفقیت ویرایش شد.' : 'محدوده با موفقیت ذخیره شد.', 'success');
loadZones();
$('#zone-form')[0].reset();
drawnItems.removeLayer(currentLayer);
currentLayer = null;
currentZoneId = null;
} else {
showMessage('خطا: ' + (response.data || 'عملیات ناموفق.'), 'error');
}
},
error: function(xhr, status, error) {
console.error('Zone Save/Edit AJAX Error:', status, error);
showMessage('خطا در ارتباط با سرور.', 'error');
}
});
});
// حذف محدوده
$('#zone-list').on('click', '.delete-zone', function() {
var zoneId = $(this).data('id');
if (!confirm('آیا مطمئن هستید که میخواهید این محدوده را حذف کنید؟')) {
return;
}
$.ajax({
url: alaOrData.ajax_url,
method: 'POST',
data: {
action: 'ala_or_delete_zone',
nonce: alaOrData.nonce,
zone_id: zoneId
},
success: function(response) {
console.log('Zone Delete Response:', response);
if (response.success) {
showMessage('محدوده با موفقیت حذف شد.', 'success');
loadZones();
} else {
showMessage('خطا: ' + (response.data || 'عملیات ناموفق.'), 'error');
}
},
error: function(xhr, status, error) {
console.error('Zone Delete AJAX Error:', status, error);
showMessage('خطا در ارتباط با سرور.', 'error');
}
});
});
// ویرایش محدوده
$('#zone-list').on('click', '.edit-zone', function() {
var zoneId = $(this).data('id');
$.ajax({
url: alaOrData.ajax_url,
method: 'POST',
data: {
action: 'ala_or_get_zones',
nonce: alaOrData.nonce
},
success: function(response) {
console.log('Zones Response for Edit:', response);
if (response.success && response.data) {
var zone = response.data.find(z => parseInt(z.id) === zoneId);
if (zone) {
$('#zone-name').val(zone.zone_name);
$('#branch-name').val(zone.branch_name);
if (currentLayer) {
drawnItems.removeLayer(currentLayer);
}
var leafletCoords = zone.coordinates[0].map(coord => [coord.lat, coord.lng]);
currentLayer = L.polygon(leafletCoords).addTo(map);
drawnItems.addLayer(currentLayer);
map.fitBounds(currentLayer.getBounds());
currentZoneId = zoneId;
showMessage('لطفاً محدوده را ویرایش کنید و ذخیره کنید.', 'info');
}
} else {
showMessage('خطا در بارگذاری محدوده.', 'error');
}
},
error: function(xhr, status, error) {
console.error('Zones AJAX Error:', status, error);
showMessage('خطا در ارتباط با سرور.', 'error');
}
});
});
// ارسال فرم تخصیص مسئول
$('#manager-form').on('submit', function(e) {
e.preventDefault();
var branchName = $('#branch-select').val();
var userId = $('#user-select').val();
$.ajax({
url: alaOrData.ajax_url,
method: 'POST',
data: {
action: 'ala_or_assign_manager',
nonce: alaOrData.nonce,
branch_name: branchName,
user_id: userId
},
success: function(response) {
console.log('Manager Assign Response:', response);
if (response.success) {
showMessage('مسئول با موفقیت تخصیص یافت.', 'success');
loadManagers();
$('#manager-form')[0].reset();
} else {
showMessage('خطا: ' + (response.data || 'عملیات ناموفق.'), 'error');
}
},
error: function(xhr, status, error) {
console.error('Manager Assign AJAX Error:', status, error);
showMessage('خطا در ارتباط با سرور.', 'error');
}
});
});
// حذف مسئول
$('#manager-list').on('click', '.delete-manager', function() {
var managerId = $(this).data('id');
if (!confirm('آیا مطمئن هستید که میخواهید این مسئول را حذف کنید؟')) {
return;
}
$.ajax({
url: alaOrData.ajax_url,
method: 'POST',
data: {
action: 'ala_or_delete_manager',
nonce: alaOrData.nonce,
manager_id: managerId
},
success: function(response) {
console.log('Manager Delete Response:', response);
if (response.success) {
showMessage('مسئول با موفقیت حذف شد.', 'success');
loadManagers();
} else {
showMessage('خطا: ' + (response.data || 'عملیات ناموفق.'), 'error');
}
},
error: function(xhr, status, error) {
console.error('Manager Delete AJAX Error:', status, error);
showMessage('خطا در ارتباط با سرور.', 'error');
}
});
});
// لود اولیه
loadZones();
loadManagers();
});