var list_item_api = "/v2/items";
var list_sub_item_api = "/v2/sub_items/";
var add_road_patrol_api = "/v2/road_patrols/operator/store";
var report_api = "/v2/road_patrols/operator/report/";
var mapZoom = getWidth() < 508 ? 5 : 6;
var mapUrl = `https://rmsmap.rmto.ir/141map/`;
var map;
var mapStartMarker = null;
var isSetMapStartMarker = false;
var mapEndMarker = null;
var isSetMapEndMarker = false;
// var routeControls = [];
// var routeControlsAddMap=[];
// var routeControlstest=[];
var popupArrays = [];
var popupArraysAddMap = [];
var sourceLat, sourceLng, destLat, destLng = "";
var addMap = null;
var startMarkerAdd = null;
var endMarkerAdd = null;
var isSetStartMarkerAdd = false;
var isSetEndMarkerAdd = false;
var observed_items = [];
var item_unique_id = 0;
var item_counter = 0;
var patrol_date;
var start_timer;
var end_timer;
var mapShow;
var showMapMarker;
// user info modal data (ui)
var date_ui;
var start_time_ui;
var end_time_ui;
var officer_name_ui;
var officer_plaque_ui;
var officer_phone_number_ui;
var distance_ui;
// end user info modal data (ui)
var marker_list = [];
var bounds = [
[42.9130026312, 75.6166317076],
[20.5782370061, 35.5092252948],
];
var item_icon = L.icon({
iconUrl: "/dist/images/icons/item_location.png",
iconSize: [30, 30],
iconAnchor: [9, 19],
});
var mapStartIcon = L.divIcon({
html: `
موضوع مشاهده شده:
${data.sub_item_text}
نام محلی:
${data.local_name}
| عرض جغرافیایی |
طول جغرافیایی |
| ${latLon[0]} |
${latLon[1]} |
${data.instant_action == 1 ? `
شرح اقدام اولیه انجام شده:
${data.description}
مقدار فعالیت:
${data.amount}
${data.image_before != undefined && data.image_after != undefined ? `
عکس قبل از اقدام
عکس بعد از اقدام
` : ``}
` : `
میزان فوریت رسیدگی:
${data.priority_text}
` }
`;
$(".complete-data-item").append(complete_data_item);
}
// end show complete item data
// delete item from list
$(document).on("click", "#delete_item", function () {
const id = $(this).data("id");
Swal.fire({
icon: "warning",
title: "آیا برای حذف مطمئن هستید؟",
showCancelButton: true,
confirmButtonColor: "#971b1b",
cancelButtonColor: "#2d7c23",
confirmButtonText: "بله، حذف میشود",
cancelButtonText: "منصرف شدم!",
showLoaderOnConfirm: true,
preConfirm: () => {
let new_marker_list = marker_list.filter(item => item.item_unique_id === id);
map.removeLayer(new_marker_list[0].marker);
new_marker_list.pop();
observed_items = observed_items.filter(item => item.item_unique_id !== id);
$(".show-all-items").empty();
if (observed_items.length == 0) {
$("#listItem_modal").modal("hide");
--item_counter
$(".item-counter").find("p").text(0);
$("#item_list").prop("disabled", true);
} else
$(".item-counter").find("p").text(--item_counter);
$(this).parents(".modal").modal("hide");
for (let i = 0; i < observed_items.length; i++) {
list_item_maker({
item_unique_id: observed_items[i].item_unique_id,
item_text: observed_items[i].item_text,
amount: observed_items[i].amount,
instant_action: observed_items[i].instant_action,
priority_text: observed_items[i].priority_text
});
}
$("#add_item").prop("disabled", false);
},
});
});
// end delete item from list
$(document).on("click", "#add_patrol", function () {
if (isSetMapStartMarker && isSetMapEndMarker) {
const userInfoModal = $("#userInfo_modal");
userInfoModal.find("input.value-important").each(function () {
$(this).val() == "" ? $(this).removeClass("valid").addClass("invalid") : $(this).removeClass("invalid").addClass("valid");
});
userInfoModal.find(".text-plaque").each(function () {
$(this).val() == "" ? $(this).removeClass("valid").addClass("invalid") : $(this).removeClass("invalid").addClass("valid");
});
if (isEmpty(userInfoModal.find(".div-plaque"))) {
userInfoModal.find(".div-plaque").addClass("invalid").removeClass("valid");
} else {
userInfoModal.find(".div-plaque").addClass("valid").removeClass("invalid");
}
if (userInfoModal.find(".invalid").length != 0) {
userInfoModal.modal("show");
} else {
if (observed_items.length == 0) {
$("#description_modal").modal("show");
} else {
addPatrol(1);
}
}
} else {
Swal.fire({
icon: "warning",
title: "خطا",
text: "ابتدا نقطه شروع و پایان گشت را انتخاب کنید",
cancelButtonText: "بستن",
showConfirmButton: false,
showCancelButton: true,
});
}
});
// add road patrol cta
$(document).on("click", "#userInfo_cta", function () {
const modal = $(this).parents(".modal");
modal.find("input.value-important").each(function () {
$(this).val() == "" ? $(this).removeClass("valid").addClass("invalid") : $(this).removeClass("invalid").addClass("valid");
});
modal.find(".text-plaque").each(function () {
$(this).val() == "" ? $(this).removeClass("valid").addClass("invalid") : $(this).removeClass("invalid").addClass("valid");
});
if (isEmpty(modal.find(".div-plaque"))) {
modal.find(".div-plaque").addClass("invalid").removeClass("valid");
} else {
modal.find(".div-plaque").addClass("valid").removeClass("invalid");
}
if (start_timer.getState().selected.unixDate >= end_timer.getState().selected.unixDate) {
Swal.fire({
icon: "warning",
title: "خطا",
text: "ساعت پایان نباید از شروع کمتر باشد",
cancelButtonText: "بستن",
showConfirmButton: false,
showCancelButton: true,
});
return
}
if (parseInt(modal.find("#distance").val()) > 500) {
Swal.fire({
icon: "warning",
title: "خطا",
text: "مسافت گشت نمیتواند بیشتر از پانصد کیلومتر باشد.",
cancelButtonText: "بستن",
showConfirmButton: false,
showCancelButton: true,
});
return
}
if (modal.find(".invalid").length != 0 || isEmpty($(".div-plaque"))) { return } else {
date_ui = moment(patrol_date.getState().selected.unixDate).format("YYYY-MM-DD")
start_time_ui = moment(start_timer.getState().selected.unixDate).format("HH:mm");
end_time_ui = moment(end_timer.getState().selected.unixDate).format("HH:mm");
officer_name_ui = modal.find("#user_full_name").val();
plaque_number_add1 = modal.find("#plaque_number_add1").val();
plaque_word_add1 = modal.find("#plaque_word_add1").data("value");
plaque_number_add2 = modal.find("#plaque_number_add2").val();
plaque_number_add3 = modal.find("#plaque_number_add3").val();
officer_plaque_ui = plaque_number_add1 + "-" + plaque_word_add1 + "-" + plaque_number_add2 + "-" + plaque_number_add3;
officer_phone_number_ui = $("#user_phone").val();
distance_ui = modal.find("#distance").val();
modal.modal("hide");
}
});
// end add road patrol cta
// build show map
function buildMapShowAndMarker(position) {
return new Promise(function (resolve) {
setTimeout(() => {
mapShow = L.map("map_show", {
maxBounds: bounds,
minZoom: 6,
zoomControl: false,
attributionControl: false
}).setView(position, 15);
L.tileLayer(`${mapUrl}/{z}/{x}/{y}.png`, {}).addTo(mapShow);
showMapMarker = L.marker(position, { icon: item_icon }).addTo(mapShow);
resolve();
}, 200)
});
}
$(document).on('input', '.phone-is-correct', function () {
const modal = $(this).parents(".modal");
let value = $(this).val()
if (value.length > 11) {
$(this).val(value.slice(0, 11))
value = value.slice(0, 11)
}
if (value.slice(0, 2) != '09') {
$(this).val('09')
value = value.slice('09')
}
if (value.length == 11) {
$(this).removeClass("invalid").addClass("valid");
modal.find(".attent-num").fadeOut("100");
} else {
$(this).addClass("invalid").removeClass("valid");
modal.find(".attent-num").fadeIn("100");
}
})
$(document).on('input', '.code-is-correct', function () {
const value = $(this).val()
if (value.length > 6) {
$(this).val(value.slice(0, 6))
}
})
// edit profile
$(document).on("click", "#edit_profile", function () {
$("#userInfo_modal").modal({ backdrop: 'static', keyboard: false }, "show");
});
// end edit profile
// send otp
$(document).on("click", "#send_otp", function () {
const modal = $(this).parents(".modal");
if (modal.find("#send_otp").data("count") == 0) {
modal.find('#accept_number').each(function (index) { if ($(this).val().length != 11) { $(this).removeClass("valid").addClass("invalid") } else $(this).removeClass("invalid").addClass("valid") });
if (modal.find(".invalid").length != 0) {
Swal.fire({
icon: "error",
title: "خطا",
text: "شماره تلفن باید 11 رقم باشد.",
cancelButtonText: "بستن",
showConfirmButton: false,
showCancelButton: true,
});
} else {
$.ajax({
url: `/v2/get_otp_token?phone_number=${modal.find("#accept_number").val()}`,
type: "GET",
headers: {
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
},
cache: false,
contentType: false,
processData: false,
success: function (result) {
hideLoaderScreen();
modal.find(".otp-code-box").slideDown("300");
modal.find("#send_otp").prop("disabled", true);
modal.find("#send_otp").text("");
modal.find("#send_otp").data("count", 1);
modal.find("#check_otp_cta").removeClass("d-none");
modal.find("#check_otp_cta").prop("disabled", false);
startTimer(60 * 2, modal.find("#send_otp"));
},
error: function (request) {
hideLoaderScreen();
ajax_error(request.responseJSON, request.status);
},
});
}
} else {
Swal.fire({
icon: "error",
title: "خطا",
text: "منتظر اتمام تایمر باشید",
cancelButtonText: "بستن",
showConfirmButton: false,
showCancelButton: true,
});
}
});
// end send otp token
// check otp token
$(document).on("click", "#check_otp_cta", function () {
const modal = $(this).parents(".modal");
if (modal.find('#otp_code').val().length != 6) { modal.find('#otp_code').removeClass("valid").addClass("invalid") } else modal.find('#otp_code').removeClass("invalid").addClass("valid")
if (modal.find(".invalid").length != 0) { return } else {
const phone_number = modal.find("#accept_number").val();
const verification_code = modal.find("#otp_code").val();
let formData = new FormData();
formData.append(`phone_number`, phone_number);
formData.append(`verification_code`, verification_code);
$.ajax({
url: `/v2/verify_otp`,
type: "POST",
headers: {
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
},
data: formData,
cache: false,
contentType: false,
processData: false,
success: function (result) {
hideLoaderScreen();
modal.modal("hide");
$("#plaque_text_modal").find(".select-text").removeClass("last-time-select");
$("#userInfo_modal").find(".clean-input").val("");
$("#userInfo_modal").find(".div-plaque").text("");
$("#userInfo_modal").find(".value-important").removeClass("invalid").removeClass("valid");
$("#userInfo_modal").find(".div-plaque").removeClass("invalid").removeClass("valid");
$("#userInfo_modal").find(".text-plaque").removeClass("invalid").removeClass("valid");
$("#userInfo_modal").find(".phone-is-correct").removeClass("invalid").removeClass("valid");
$("#userInfo_modal").find("#user_phone").val(phone_number);
},
error: function (request) {
hideLoaderScreen();
ajax_error(request.responseJSON, request.status);
},
});
}
});
// end check otp token
$('#otpToken_modal').on('hidden.bs.modal', function (e) {
$("#userInfo_modal").modal({ backdrop: 'static', keyboard: false }, "show");
})
// add patrol func
function addPatrol(checkItem, description) {
Swal.fire({
icon: "warning",
title: "آیا از ثبت اطلاعات وارده اطمینان دارید؟",
showCancelButton: false,
confirmButtonColor: "#2d7c23",
confirmButtonText: "ثبت گشت",
showLoaderOnConfirm: true,
preConfirm: () => {
const start_point_patrol = `${mapStartMarker.getLatLng().lat.toFixed(6)},${mapStartMarker.getLatLng().lng.toFixed(6)}`;
const end_point_patrol = `${mapEndMarker.getLatLng().lat.toFixed(6)},${mapEndMarker.getLatLng().lng.toFixed(6)}`;
let formData = new FormData();
formData.append("start_point", start_point_patrol);
formData.append("end_point", end_point_patrol);
formData.append("start_time", date_ui + " " + start_time_ui);
formData.append("end_time", date_ui + " " + end_time_ui);
formData.append("officer_plaque", officer_plaque_ui);
formData.append("officer_phone_number", officer_phone_number_ui);
formData.append("officer_name", officer_name_ui);
formData.append("distance", distance_ui);
if (checkItem == 0)
formData.append("description", description);
else if (checkItem == 1) {
for (let i = 0; i < observed_items.length; i++) {
formData.append(`observed_items[${i}][item_id]`, observed_items[i].item_id);
formData.append(`observed_items[${i}][sub_item_id]`, observed_items[i].sub_item_id);
formData.append(`observed_items[${i}][local_name]`, observed_items[i].local_name);
formData.append(`observed_items[${i}][instant_action]`, observed_items[i].instant_action);
formData.append(`observed_items[${i}][start_point]`, observed_items[i].start_point);
if (observed_items[i].instant_action == 0) {
formData.append(`observed_items[${i}][priority]`, observed_items[i].priority);
formData.append(`observed_items[${i}][priority_fa]`, observed_items[i].priority_text);
} else {
formData.append(`observed_items[${i}][amount]`, observed_items[i].amount);
console.log(observed_items[i].image_before);
if (observed_items[i].image_before != undefined) {
formData.append(`observed_items[${i}][before_image]`, observed_items[i].image_before);
formData.append(`observed_items[${i}][after_image]`, observed_items[i].image_after);
}
if (observed_items[i].end_point != undefined) {
formData.append(`observed_items[${i}][end_point]`, observed_items[i].end_point);
}
formData.append(`observed_items[${i}][description]`, observed_items[i].description);
}
}
}
showLoaderScreen();
$.ajax({
url: add_road_patrol_api,
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: "اتمام عملیات",
showDenyButton: true,
denyButtonColor: '#20aaad',
denyButtonText: 'چاپ گزارش',
preConfirm: () => {
location.reload(true);
},
preDeny: () => {
window.open(report_api + result.road_patrol_id, '_blank')
setTimeout(() => {
location.reload(true);
}, 500)
}
});
},
error: function (request) {
hideLoaderScreen();
ajax_error(request.responseJSON, request.status);
},
});
},
});
}
// end add patrol func
// add patrol without item
$(document).on("click", "#add_patrol_noItem", function () {
const modal = $(this).parents(".modal");
const description = modal.find("#description").val();
modal.find("textarea.value-important").each(function () {
$(this).val() == "" ? $(this).removeClass("valid").addClass("invalid") : $(this).removeClass("invalid").addClass("valid");
});
if (modal.find(".invalid").length != 0) { return } else {
addPatrol(0, description)
modal.modal("hide")
}
});
// end add patrol without item