// variables part var operationCartable; var operationCartable_url = "/v2/road_observations/operator/cartable/show"; const MAP_ENDPOINT = "https://rmsmap.rmto.ir"; var provinces_api = "/webapi/getuser/province-perm"; var permission_api = "/webapi/user/get-permission"; var update_api = "/v2/road_observations/handle/" var items_api = "/v2/items"; var excel_api = '/v2/road_observations/operator/cartable/report'; var markers = []; var markersLayer; var editMap = null; var startMarkerEdit = null; var endMarkerEdit = null; var isSetStartMarkerEdit = false; var isSetEndMarkerEdit = false; var mapZoom = getWidth() < 508 ? 5 : 6; var filterDatepicker = {}; var PERMISSIONS = []; // end variables part // resize func function getWidth() { return Math.max( document.body.scrollWidth, document.documentElement.scrollWidth, document.body.offsetWidth, document.documentElement.offsetWidth, document.documentElement.clientWidth ); } // end resize func // map // map start and end icon var startDivIcon = L.divIcon({ html: `
مکان
`, iconSize: [55, 75], iconAnchor: [33, 64], }); // end map start and end icon // icon var mapIcon = L.icon({ iconUrl: '/dist/images/dashboard/pinmarker_dashboard.png', iconSize: [32, 32], }); var activeMapIcon = L.icon({ iconUrl: '/dist/images/dashboard/pinmarker_dashboard_active.png', iconSize: [40, 40], }); // icon var bounds = [ [42.9130026312, 75.6166317076], [20.5782370061, 30.5092252948], ]; var map = L.map("map", { maxBounds: bounds, minZoom: mapZoom, zoomControl: false, attributionControl: false }).setView([35.5468992, 51.7300532], mapZoom); L.tileLayer(MAP_ENDPOINT + "/141map/{z}/{x}/{y}.png", { attributionControl: false, }).addTo(map); // end map (() => { $("[data-mask]").inputmask(); //get permission showLoaderScreen() $.ajax({ url: permission_api, type: "GET", cache: false, async: false, contentType: false, processData: false, success: function (result) { PERMISSIONS = result.data; }, error: function () { Swal.fire({ icon: "error", title: "خطا", text: "مشکل در دریافت سطح دسترسی", confirmButtonText: "بروزرسانی صفحه", showLoaderOnConfirm: true, preConfirm: () => { location.reload(true); }, }); }, }); //end get permission })() $(document).bind("click", function (e) { const clicked = $(e.target); if (clicked.parents(".toolbox").length != 0) return false; if (clicked.parents(".datepicker-grid-view").length != 0) return false; if (clicked.parents(".datepicker-navigator").length != 0) return false; if (clicked.parents(".datepicker-container").length != 0) return false; if (clicked.parents(".select2-selection__choice").length != 0) return false; if ( clicked.closest(".filtering-btn").length == 0 && clicked.closest("#filter_box").length == 0 && $("filter_box").css("display") != "none" ) { $("#filter_box").css("display", "none"); } }); const FilterBoxInit = () => { const top = $('.dt-button')[0].offsetHeight + 5 return `

` } const fillFilterBox = () => { //fill datepicker filterDatepicker.from = $( "#filter_from_activity_date_time" ).persianDatepicker({ format: "YYYY/MM/DD", autoClose: true, initialValue: false, onSelect: function (unix) { filterDatepicker.from.touched = true; if ( filterDatepicker.from.getState().selected.unixDate >= filterDatepicker.to.getState().selected.unixDate ) { filterDatepicker.to.setDate( filterDatepicker.from.getState().selected.unixDate ); } if ( filterDatepicker.to && filterDatepicker.to.options && filterDatepicker.to.options.minDate != unix ) { let cachedValue = filterDatepicker.to.getState().selected.unixDate; filterDatepicker.to.options = { minDate: unix }; if (filterDatepicker.from.touched) { filterDatepicker.to.setDate(cachedValue); } } }, }); filterDatepicker.to = $( "#filter_to_activity_date_time" ).persianDatepicker({ format: "YYYY/MM/DD", autoClose: true, initialValue: false, onSelect: function (unix) { filterDatepicker.to.touched = true; }, }); $(document).on('input', '#filter_from_activity_date_time', function (e) { if (e.target.value == '') { filterDatepicker.from.setDate(moment().valueOf()) filterDatepicker.to.setDate(moment().valueOf()) $("#filter_to_activity_date_time").val('') $("#filter_from_activity_date_time").val('') } }) $(document).on('input', '#filter_to_activity_date_time', function (e) { if (e.target.value == '') { filterDatepicker.from.setDate(moment().valueOf()) filterDatepicker.to.setDate(moment().valueOf()) $("#filter_from_activity_date_time").val('') $("#filter_to_activity_date_time").val('') } }) //fill status $('.fill-status').empty() $('.fill-status').append(` `) } const filterBox = (show) => { $('#filter_box').css('display', show ? 'flex' : 'none') } // uploading file input $(document).on("change", ".img-input", function () { var input = this; var parent = $(input).parents(".img-box"); if (input.files && input.files[0]) { var reader = new FileReader(); reader.onload = function (e) { parent.find(".img-title").css("display", "none"); parent.find(".btn-delete-img").removeAttr("disabled"); parent.find(".img-preview").attr("src", e.target.result); }; reader.readAsDataURL(input.files[0]); } }); $(".btn-delete-img").on("click", function () { var parent = $(this).parents(".img-box"); parent.find(".img-input").val(""); parent.find(".img-preview").removeAttr("src"); parent.find(".img-title").css("display", ""); $(this).attr("disabled", "disabled"); }); // end uploading file input $(function () { // operation cartable table showLoaderScreen(); operationCartable = $("#operation_cartable").DataTable({ serverSide: true, dom: "<<'d-flex justify-content-between align-items-center'lB>p>", pagingType: "simple_numbers", scrollX: true, filter: true, language: { sEmptyTable: "هیچ داده‌ای در جدول وجود ندارد", sInfo: "نمایش _START_ تا _END_ از _TOTAL_ ردیف", sInfoEmpty: "نمایش 0 تا 0 از 0 ردیف", sInfoFiltered: "(فیلتر شده از _MAX_ ردیف)", sInfoPostFix: "", sInfoThousands: ",", sLengthMenu: "نمایش _MENU_ ردیف", sLoadingRecords: "در حال بارگزاری...", sProcessing: "در حال پردازش...", sSearch: "جستجو: ", sZeroRecords: "رکوردی با این مشخصات پیدا نشد", oPaginate: { sFirst: "برگه‌ی نخست", sLast: "برگه‌ی آخر", sNext: "بعدی", sPrevious: "قبلی", }, oAria: { sSortAscending: ": فعال سازی نمایش به صورت صعودی", sSortDescending: ": فعال سازی نمایش به صورت نزولی", }, }, order: [[9, "desc"], [0, "desc"]], processing: true, select: true, ajax: { url: operationCartable_url, type: "GET", beforeSend: function () { showLoaderScreen(); if (markers.length != 0) { map.removeLayer(markersLayer); markers = []; markersLayer.clearLayers(); } $("#operation_cartable").find("tbody tr").removeClass("activate-row"); }, dataSrc: function (json) { let data = json.data; hideLoaderScreen(); if (data.length == 0) { return data } const latlonArr = [] for (let i = 0; i < data.length; i++) { let marker = new L.Marker([data[i].lat, data[i].lng], { icon: mapIcon, id: data[i].AutoID }).on('click', function (e) { const id = e.target.options.id operationCartable.rows().eq(0).map(index => { if (operationCartable.row(index).data().AutoID == id) { const node = operationCartable.row(index).node() $("html, body").animate({ scrollTop: $(node).offset().top, }, 100 ); $("#operation_cartable").find("tbody tr").removeClass("activate-row"); $(node).addClass("activate-row"); setTimeout(() => { markersLayer.eachLayer(layer => { if (layer.options.id == id) { layer.setIcon(activeMapIcon) layer.setZIndexOffset(100) return } layer.setZIndexOffset(0) layer.setIcon(mapIcon) }) map.flyTo([operationCartable.row(index).data().lat, operationCartable.row(index).data().lng], 16, { duration: .5 }); }, 500) } }) }) markers.push(marker); latlonArr.push([data[i].lat, data[i].lng]) } markersLayer = new L.LayerGroup(markers); map.addLayer(markersLayer); $("html, body").animate({ scrollTop: $('#map').offset().top - 50, }, 100 ); setTimeout(() => { map.flyToBounds(latlonArr, { padding: [60, 60], duration: .5 }) }, 250); hideLoaderScreen(); return json.data; }, error: function (request) { ajax_error(request.responseJSON, request.status); hideLoaderScreen(); }, }, columns: [ // 1 { className: "text-center align-middle", data: null, name: { name: 'road_observeds.id', type: 'text' }, render: function (data, type, row) { return `
${data.status == 2 ? '' : ''}${data.road_observeds_id}
` }, searchable: true, orderable: true, }, // 2 { className: "text-center align-middle", data: "fk_RegisteredEventMessage", name: { name: 'fk_RegisteredEventMessage', type: 'text' }, searchable: true, orderable: true, }, // 3 { className: "text-center align-middle", data: "province_fa", name: { name: 'road_observeds.province_id', type: 'select' }, searchable: true, orderable: true, }, // 4 // { // className: "text-center align-middle", // data: "city_fa", // name: { // name: 'city_fa', // type: 'text' // }, // searchable: true, // orderable: true, // }, // 5 { className: "text-center align-middle", data: "edarate_shahri_name_fa", name: { name: 'edarate_shahri.name_fa', type: 'text' }, searchable: true, orderable: true, }, // 6 { className: "text-center align-middle", data: "Title", name: { name: 'Title', type: 'text' }, searchable: true, orderable: true, }, // 7 { className: "text-center align-middle", data: "FeatureTypeTitle", name: { name: 'FeatureTypeTitle', type: 'text' }, searchable: true, orderable: true, }, // 8 { className: "text-center align-middle", data: "MobileForSendEventSms", name: { name: 'MobileForSendEventSms', type: 'text' }, searchable: true, orderable: true, }, // 9 { className: "text-center text-nowrap align-middle", data: "rms_last_activity_fa", name: { name: 'rms_last_activity', type: 'between' }, searchable: true, orderable: true, }, // 10 { className: "text-center align-middle", data: null, name: { name: 'option', type: 'option' }, render: function (data, type, row) { if (data.image_after || data.image_before) return `` return '-' }, searchable: true, orderable: false, }, // 11 { className: "text-center align-middle", data: "status_fa", name: { name: 'status', type: 'select' }, searchable: true, orderable: true, }, // 12 { className: "text-center align-middle", data: null, name: { name: 'rms_description', type: 'text' }, render: function (data, type, row) { if (data.rms_status == 0) { return `-` } else if (data.rms_status == 1 || data.rms_status == 2) { if (data.rms_description == null) { return `اطلاعاتی موجود نیست!!!` } else { return `` } } }, searchable: true, orderable: false, }, // 13 { className: "text-center align-middle", data: null, name: { name: 'supervisor_description', type: 'text' }, render: function (data, type, row) { if (data.status == 0) { return `-` } else if (data.status == 1 || data.status == 2) { if (data.supervisor_description == null) { return `اطلاعاتی موجود نیست!!!` } else { return `` } } }, searchable: true, orderable: false, }, // 14 { className: "text-center sorting align-middle", data: null, name: { name: 'option', type: 'option' }, render: function (data, type, row) { if (data.status == 0) { return `-`; } else if (data.status == 1) { return `-`; } else if (data.status == 2) { return `` } }, searchable: false, orderable: false, }, ], buttons: [ { text: 'فیلتر پیشرفته', className: 'filtering-btn', action: function (e, dt, node, config) { filterBox(true) } }, { text: 'گزارش اکسل', className: 'table-btns', action: function (e, dt, node, config) { let queryParems = []; const id = $("#filter_id").val(); const status = $("#filter_status").val(); let activityDate = {} if ($("#filter_from_activity_date_time").val() != "" && $("#filter_to_activity_date_time").val() != "") { activityDate.from = moment( filterDatepicker.from.getState().selected.year + "/" + filterDatepicker.from.getState().selected.month + "/" + filterDatepicker.from.getState().selected.date, "jYYYY/jM/jD" ).format("YYYY-MM-DD"); activityDate.to = moment( filterDatepicker.to.getState().selected.year + "/" + filterDatepicker.to.getState().selected.month + "/" + filterDatepicker.to.getState().selected.date, "jYYYY/jM/jD" ).format("YYYY-MM-DD"); queryParems.push(`fromDate=${activityDate.from}`); queryParems.push(`toDate=${activityDate.to}`); } if (id != '') queryParems.push(`id=${id}`); if (status != '-1') queryParems.push(`status=${status}`); const url = `${excel_api}${queryParems.length != 0 ? `?${queryParems.join("&")}` : ""}`; window.open(url); } } ], initComplete: function () { $(".dt-buttons").append(FilterBoxInit) fillFilterBox() }, fnDrawCallback: function () { $('[data-toggle="tooltip"]').tooltip(); }, columnDefs: [{ targets: '_all', defaultContent: "" }] }); // end operation cartable table }); // end on load $("#operation_cartable").on("click", "tbody tr", function (e) { e.preventDefault() let tr = $(this).closest("tr"); let row = operationCartable.row(tr); let data = row.data(); dataOnMap(data); $("#operation_cartable").find("tbody tr").removeClass("activate-row"); $(this).addClass("activate-row"); }); // show active data on map function dataOnMap(data) { $("html, body").animate({ scrollTop: $("#map").offset().top - 50, }, 100 ); setTimeout(() => { markersLayer.eachLayer(layer => { if (layer.options.id == data.AutoID) { layer.setIcon(activeMapIcon) layer.setZIndexOffset(100) return } layer.setZIndexOffset(0) layer.setIcon(mapIcon) }) map.flyTo([data.lat, data.lng], 16, { duration: .5 }); }, 500) } // end show active data on map // filtering $(document).on('click', '#btn_filter', function () { filterBox(false) let _table = operationCartable const id = $("#filter_id").val(); const status = $("#filter_status").val(); let activityDate = {} if ( $("#filter_from_activity_date_time").val() != "" && $("#filter_to_activity_date_time").val() != "" ) { activityDate.from = moment( filterDatepicker.from.getState().selected.year + "/" + filterDatepicker.from.getState().selected.month + "/" + filterDatepicker.from.getState().selected.date, "jYYYY/jM/jD" ).format("YYYY-MM-DD"); activityDate.to = moment( filterDatepicker.to.getState().selected.year + "/" + filterDatepicker.to.getState().selected.month + "/" + filterDatepicker.to.getState().selected.date, "jYYYY/jM/jD" ).format("YYYY-MM-DD"); } if (id != '') { _table = _table.column(0).search(id); } else { _table = _table.column(0).search(''); } if (status != '-1') { _table = _table.column(9).search(status); } else { _table = _table.column(9).search(''); } if (Object.keys(activityDate).length !== 0) { _table = _table.column(7).search(`${activityDate.from}&${activityDate.to}`); } else { _table = _table.column(7).search(''); } _table.draw(); }) // end filtering // show supervisor description $("#operation_cartable").on("click", ".show-supervisor-description-btn", function (e) { e.stopPropagation() const modal = $("#show_supervisor_description_modal"); let tr = $(this).closest("tr"); let row = operationCartable.row(tr); let data = row.data(); modal.find(".clean-textarea").val(""); modal.find(".value-important").removeClass("invalid").removeClass("valid"); modal.find("#description").val(data.supervisor_description); modal.modal("show"); $("#operation_cartable").find("tbody tr").removeClass("activate-row"); $(tr).addClass("activate-row"); }); // end show supervisor description // show rms description $("#operation_cartable").on("click", ".show-rms-description-btn", function (e) { e.stopPropagation() const modal = $("#show_rms_description_modal"); let tr = $(this).closest("tr"); let row = operationCartable.row(tr); let data = row.data(); modal.find(".clean-textarea").val(""); modal.find(".value-important").removeClass("invalid").removeClass("valid"); modal.find("#rms_description").val(data.rms_description); modal.modal("show"); $("#operation_cartable").find("tbody tr").removeClass("activate-row"); $(tr).addClass("activate-row"); }); // end show rms description // show images $("#operation_cartable").on("click", ".show-images-btn", function (e) { e.stopPropagation() const modal = $("#show_images_modal"); let tr = $(this).closest("tr"); let row = operationCartable.row(tr); let data = row.data(); modal.find('#image_before a').attr('href', '') modal.find('#image_before img').attr('src', '') if (data.image_before) { modal.find('#image_before a').attr('href', data.image_before) modal.find('#image_before img').attr('src', data.image_before) } modal.find('#image_after a').attr('href', '') modal.find('#image_after img').attr('src', '') if (data.image_after) { modal.find('#image_after a').attr('href', data.image_after) modal.find('#image_after img').attr('src', data.image_after) } modal.modal("show"); $("#operation_cartable").find("tbody tr").removeClass("activate-row"); $(tr).addClass("activate-row"); }); // end show images // all about map [edit] // clear edit map function clearEditMap(data) { isSetStartMarkerEdit = false; isSetEndMarkerEdit = false; editMap.removeLayer(startMarkerEdit); $("#edit_coordinates_start").val("(عرض جغرافیایی) - (طول جغرافیایی)"); $("#edit_modal").find("#edit_coordinates_start").val(parseFloat(data.lat).toFixed(6) + parseFloat(data.lng).toFixed(6)); editMap.setView([35.7065, 51.3477], mapZoom); setMarkerDefaultEdit(data); } // end clear edit map // edit map functions function createEditMap(data) { var bounds = [ [42.9130026312, 75.6166317076], [20.5782370061, 35.5092252948], ]; editMap = L.map("edit_map", { maxBounds: bounds, minZoom: mapZoom, zoomControl: false, }).setView([35.7065, 51.3477], mapZoom); editMap.addLayer(L.tileLayer(MAP_ENDPOINT + "/141map/{z}/{x}/{y}.png", { attributionControl: false, })); setMarkerDefaultEdit(data); } function setMarkerDefaultEdit(data) { isSetStartMarkerEdit = true; isSetEndMarkerEdit = false; startMarkerEdit = new L.marker(L.latLng([data.lat, data.lng]), { icon: startDivIcon, draggable: true, }).addTo(editMap); editMap.flyTo(startMarkerEdit.getLatLng(), 13, { duration: 0.5 }); editMap.on("move", function () { if (!isSetStartMarkerEdit) { startMarkerEdit.setLatLng(L.latLng(editMap.getCenter())); $("#edit-pin-marker-start").removeClass("pin-set").addClass("pin-move"); } }); editMap.on("moveend", function () { if (!isSetStartMarkerEdit) { startMarkerEdit.setLatLng(L.latLng(editMap.getCenter())); $("#edit-pin-marker-start").removeClass("pin-move pin-set"); } }); startMarkerEdit.on("click", function () { if (editMap.getZoom() >= 14) { if (!isSetStartMarkerEdit) { startMarkerEdit.setLatLng(L.latLng(editMap.getCenter())); isSetStartMarkerEdit = true; $("#edit-pin-marker-start").removeClass("pin-move pin-warn").addClass("pin-set"); } $("#edit_coordinates_start").val(startMarkerEdit.getLatLng().lat.toFixed(6) + startMarkerEdit.getLatLng().lng.toFixed(6)); $("#edit_coordinates_start").addClass("valid").removeClass("invalid"); $(this).hide(); $("#edit-pin-marker-start").removeClass("pin-move pin-warn").addClass("pin-set"); } else { Swal.fire({ icon: "warning", title: "خطا", text: "لطفا زوم نقشه خود را بیشتر کنید", cancelButtonText: "بستن", showConfirmButton: false, showCancelButton: true, }); } }); startMarkerEdit.on("drag", function () { $("#edit-pin-marker-start").addClass("pin-move"); }); startMarkerEdit.on("dragend", function () { $("#edit-pin-marker-start").removeClass("pin-move"); $("#edit_coordinates_start").val(startMarkerEdit.getLatLng().lat.toFixed(6) + startMarkerEdit.getLatLng().lng.toFixed(6)); if ($("#edit-pin-marker-start").hasClass("pin-set") || isSetStartMarkerEdit) { $("#edit-pin-marker-start").addClass("pin-set"); } else { editMap.setView(startMarkerEdit.getLatLng()); } }); } // end all about map // edit item $("#operation_cartable").on("click", ".edit-item", function (e) { e.stopPropagation() const modal = $("#edit_modal"); const image_box_parent = modal.find(".upload-box"); image_box_parent.find(".img-input").val(""); image_box_parent.find(".img-preview").removeAttr("src"); image_box_parent.find(".img-title").css("display", ""); image_box_parent.find(".btn-delete-img").attr("disabled", "disabled"); modal.find(".clean-input").val(""); modal.find(".clean-textarea").val(""); modal.find('input[name="doneEditModal"]').prop('checked', false) modal.find(".value-important").removeClass("invalid").removeClass("valid"); modal.find('.doing-box').hide() let tr = $(this).closest("tr"); let row = operationCartable.row(tr); let data = row.data(); modal.find("#edit_coordinates_start").val(parseFloat(data.lat).toFixed(6) + parseFloat(data.lng).toFixed(6)); modal.find("#edit_item").data("id", data.road_observeds_id); modal.find("#edit_item").data("index", row.index()); modal.modal("show"); }); // end edit item $(document).on('change', 'input[name="doneEditModal"]', function () { const modal = $("#edit_modal"); const value = $('input[name="doneEditModal"]:checked').val() const index = modal.find("#edit_item").data("index") const data = operationCartable.row(index).data() if (value == '2') { modal.find('.doing-box').slideUp() } else { modal.find('.doing-box').slideDown(400, 'swing', function () { if (editMap == null) { createEditMap(data); } else { clearEditMap(data); } }) } }) // edit item $(document).on("click", "#edit_item", function () { const modal = $(this).parents(".modal"); const dataId = $(this).data("id"); let formData = new FormData(); const done = modal.find('input[name="doneEditModal"]:checked').val(); if (done == "1") { modal.find("input.value-important").each(function () { $(this).val() == "" ? $(this).removeClass("valid").addClass("invalid") : $(this).removeClass("invalid").addClass("valid"); }); modal.find(".upload-box").each(function () { $(this).find(".img-preview").prop("src") == "" ? $(this).find(".imgbox").removeClass("valid").addClass("invalid") : $(this).find(".imgbox").removeClass("invalid").addClass("valid") }); if (modal.find(".upload-box").hasClass("d-none")) { modal.find(".upload-box").find(".imgbox").removeClass("invalid").addClass("valid") } } else if(done == "2"){ $(this).removeClass("invalid").addClass("valid"); $(this).find(".imgbox").removeClass("invalid").addClass("valid") } else { return; } if (modal.find(".invalid").length != 0 || modal.find(".pin-warn").length != 0) { return } else { const description = modal.find("#description").val(); if (done == 1) { if (modal.find("#edit_deviceImg1").get(0).files[0] != undefined) { const before_image = modal.find("#edit_deviceImg1").get(0).files[0]; formData.append("image-before-1", before_image); } if (modal.find("#edit_deviceImg2").get(0).files[0] != undefined) { const after_image = modal.find("#edit_deviceImg2").get(0).files[0]; formData.append("image-after-1", after_image); } const start_point = `${startMarkerEdit.getLatLng().lat.toFixed(6)},${startMarkerEdit.getLatLng().lng.toFixed(6)}`; formData.append("start_point", start_point); } formData.append("description", description); formData.append("rms-status", done); $.ajax({ url: update_api + dataId, type: "POST", headers: { "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"), }, data: formData, cache: false, contentType: false, processData: false, success: function (result) { hideLoaderScreen(); Swal.fire({ icon: "success", title: "فعالیت با موفقیت ثبت شد", showCancelButton: false, confirmButtonColor: "#2d7c23", confirmButtonText: "اتمام عملیات", showLoaderOnConfirm: true, preConfirm: () => { modal.modal("hide"); operationCartable.ajax.reload(null, false); getSideBarActivity() }, }); }, error: function (request) { hideLoaderScreen(); ajax_error(request.responseJSON, request.status); }, }); } }); // end edit item