/home/edulekha/crm.edulekha.com/assets/themes/perfex/js/clients.js
$.fn.dataTable.ext.type.order["task-status-pre"] = function (d) {
switch (d) {
case "2":
return 1;
case "4":
return 2;
case "3":
return 3;
case "1":
return 4;
case "5":
return 6;
}
return 5;
};
var project_id = $('input[name="project_id"]').val();
var discussion_user_profile_image_url = $(
'input[name="discussion_user_profile_image_url"]'
).val();
var discussion_id = $('input[name="discussion_id"]').val();
Dropzone.options.projectFilesUpload = false;
Dropzone.options.taskFileUpload = false;
Dropzone.options.filesUpload = false;
if (app.options.enable_google_picker == "1") {
$.fn.googleDrivePicker.defaults.clientId = app.options.google_client_id;
$.fn.googleDrivePicker.defaults.developerKey = app.options.google_api;
}
var salesChart;
$(function () {
// Set moment locale
moment.locale(app.locale);
// Set timezone locale
moment().tz(app.options.timezone).format();
fix_phases_height();
initDataTable();
client_home_chart();
init_tabs_scrollable();
$('select[name="currency"],select[name="payments_years"]').on(
"change",
function () {
client_home_chart();
}
);
$("#open-new-ticket-form").appFormValidator();
$("#ticket-reply").appFormValidator();
$("#task-form").appFormValidator();
$("#discussion_form").appFormValidator({
rules: {
subject: "required",
},
});
var file_id = get_url_param("file_id");
if (file_id) {
view_project_file(file_id, project_id);
}
if (typeof (discussion_id != "undefined")) {
discussion_comments("#discussion-comments", discussion_id, "regular");
}
$("body").on("show.bs.modal", "._project_file", function () {
discussion_comments("#project-file-discussion", discussion_id, "file");
});
if (typeof Dropbox != "undefined") {
if ($("#dropbox-chooser-task").length > 0) {
document.getElementById("dropbox-chooser-task").appendChild(
Dropbox.createChooseButton({
success: function (files) {
taskExternalFileUpload(files, "dropbox");
},
linkType: "preview",
extensions: app.options.allowed_files.split(","),
})
);
}
if ($("#files-upload").length > 0) {
document.getElementById("dropbox-chooser-files").appendChild(
Dropbox.createChooseButton({
success: function (files) {
customerExternalFileUpload(files, "dropbox");
},
linkType: "preview",
extensions: app.options.allowed_files.split(","),
})
);
}
if (
typeof Dropbox != "undefined" &&
$("#dropbox-chooser-project-files").length > 0
) {
document.getElementById("dropbox-chooser-project-files").appendChild(
Dropbox.createChooseButton({
success: function (files) {
projectExternalFileUpload(files, "dropbox");
},
linkType: "preview",
extensions: app.options.allowed_files.split(","),
})
);
}
}
if ($("#calendar").length) {
var settings = {
locale: app.locale,
headerToolbar: {
left: "prev,next today",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay",
},
editable: false,
dayMaxEventRows: parseInt(app.options.calendar_events_limit) + 1,
views: {
day: {
dayMaxEventRows: false,
},
},
initialView: app.options.default_view_calendar,
moreLinkClick: function (info) {
calendar.gotoDate(info.date);
calendar.changeView("dayGridDay");
setTimeout(function () {
$(".fc-popover-close").click();
}, 250);
},
loading: function (isLoading, view) {
!isLoading
? $(".dt-loader").addClass("hide")
: $(".dt-loader").removeClass("hide");
},
direction: isRTL == "true" ? "rtl" : "ltr",
eventStartEditable: false,
firstDay: parseInt(app.options.calendar_first_day),
events: function (info, successCallback, failureCallback) {
return $.getJSON(site_url + "clients/get_calendar_data", {
start: info.startStr,
end: info.endStr,
}).then(function (data) {
successCallback(
data.map(function (e) {
return $.extend({}, e, {
start: e.start || e.date,
end: e.end || e.date,
});
})
);
});
},
eventDidMount: function (data) {
var $el = $(data.el);
$el.attr("title", data.event.extendedProps._tooltip);
$el.attr("onclick", data.event.extendedProps.onclick);
$el.attr("data-toggle", "tooltip");
},
};
var calendar = new FullCalendar.Calendar(
document.getElementById("calendar"),
settings
);
calendar.render();
}
var tab_group = get_url_param("group");
if (tab_group) {
$("body").find(".nav-tabs li").removeClass("active");
$("body")
.find('.nav-tabs [data-group="' + tab_group + '"]')
.parents("li")
.addClass("active");
}
for (
var i = -10;
i < $(".task-phase").not(".color-not-auto-adjusted").length / 2;
i++
) {
var r = 120;
var g = 169;
var b = 56;
$(".task-phase:eq(" + (i + 10) + ")")
.not(".color-not-auto-adjusted")
.css("background", color(r - i * 13, g - i * 13, b - i * 13))
.css("border", "1px solid " + color(r - i * 13, g - i * 13, b - i * 13));
}
var circle = $(".project-progress")
.circleProgress({
fill: {
gradient: ["#84c529", "#84c529"],
},
})
.on("circle-animation-progress", function (event, progress, stepValue) {
$(this)
.find("strong.project-percent")
.html(parseInt(100 * stepValue) + "<i>%</i>");
});
$(".toggle-change-ticket-status").on("click", function () {
$(".ticket-status,.ticket-status-inline").toggleClass("hide");
});
$("#ticket_status_single").on("change", function () {
data = {};
data.status_id = $(this).val();
data.ticket_id = $('input[name="ticket_id"]').val();
$.post(site_url + "clients/change_ticket_status/", data).done(function () {
window.location.reload();
});
});
if (typeof contracts_by_type != "undefined") {
new Chart($("#contracts-by-type-chart"), {
type: "bar",
data: JSON.parse(contracts_by_type),
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
yAxes: [
{
display: true,
ticks: {
beginAtZero: true,
},
},
],
},
},
});
}
if ($("#files-upload").length > 0) {
createDropzone("#files-upload");
}
if ($("#task-file-upload").length > 0) {
createDropzone("#task-file-upload", {
sending: function (file, xhr, formData) {
formData.append("action", "upload_task_file");
formData.append("task_id", $('input[name="task_id"]').val());
},
});
}
if ($("#project-files-upload").length > 0) {
createDropzone("#project-files-upload", {
sending: function (file, xhr, formData) {
formData.append("action", "upload_file");
},
});
}
// User cant add more money then the invoice total remaining
$('body.viewinvoice input[name="amount"]').on("keyup", function () {
var original_total = $(this).data("total");
var val = $(this).val();
var form_group = $(this).parents(".form-group");
if (val > original_total) {
form_group.addClass("has-error");
if (form_group.find("p.text-danger").length == 0) {
form_group.append(
'<p class="text-danger">Maximum pay value passed</p>'
);
$(this)
.parents("form")
.find('input[name="make_payment"]')
.attr("disabled", true);
}
} else {
form_group.removeClass("has-error");
form_group.find("p.text-danger").remove();
$(this)
.parents("form")
.find('input[name="make_payment"]')
.attr("disabled", false);
}
});
$("#discussion").on("hidden.bs.modal", function (event) {
$('#discussion input[name="subject"]').val("");
$('#discussion textarea[name="description"]').val("");
$("#discussion .add-title").removeClass("hide");
$("#discussion .edit-title").removeClass("hide");
});
});
function new_discussion() {
$("#discussion").modal("show");
$("#discussion .edit-title").addClass("hide");
}
function manage_discussion(form) {
var data = $(form).serialize();
var url = form.action;
$.post(url, data).done(function (response) {
response = JSON.parse(response);
if (response.success == true) {
alert_float("success", response.message);
}
$(".table-project-discussions").DataTable().ajax.reload(null, false);
$("#discussion").modal("hide");
});
return false;
}
function remove_task_comment(commentid) {
$.get(
site_url + "clients/remove_task_comment/" + commentid,
function (response) {
if (response.success == true) {
window.location.reload();
}
},
"json"
);
}
function edit_task_comment(id) {
var edit_wrapper = $('[data-edit-comment="' + id + '"]');
edit_wrapper.removeClass("hide");
$('[data-comment-content="' + id + '"]').addClass("hide");
}
function cancel_edit_comment(id) {
var edit_wrapper = $('[data-edit-comment="' + id + '"]');
edit_wrapper.addClass("hide");
$('[data-comment-content="' + id + '"]').removeClass("hide");
}
function save_edited_comment(id) {
var data = {};
data.id = id;
data.content = $('[data-edit-comment="' + id + '"]')
.find("textarea")
.val();
$.post(site_url + "clients/edit_comment", data).done(function (response) {
response = JSON.parse(response);
if (response.success == true) {
window.location.reload();
} else {
cancel_edit_comment(id);
}
});
}
function initDataTable() {
appDataTableInline();
}
function dt_custom_view(table, column, val) {
var tableApi = $(table).DataTable();
if (Array.isArray(val)) {
tableApi.column(column).search(val.join("|"), true, false).draw();
} else {
tableApi.column(column).search(val).draw();
}
}
function fix_phases_height() {
if (is_mobile()) {
return;
}
var maxPhaseHeight = Math.max.apply(
null,
$("div.tasks-phases .panel-body")
.map(function () {
return $(this).outerHeight();
})
.get()
);
$("div.tasks-phases .panel-body").css("min-height", maxPhaseHeight + "px");
}
function taskTable() {
$(".tasks-table").toggleClass("hide");
$(".tasks-phases").toggleClass("hide");
}
function discussion_comments(selector, discussion_id, discussion_type) {
var defaults = _get_jquery_comments_default_config(app.lang.discussions_lang);
var options = {
getComments: function (success, error) {
$.post(site_url + "clients/project/" + project_id, {
action: "discussion_comments",
discussion_id: discussion_id,
discussion_type: discussion_type,
}).done(function (response) {
response = JSON.parse(response);
success(response);
});
},
postComment: function (commentJSON, success, error) {
commentJSON.action = "new_discussion_comment";
commentJSON.discussion_id = discussion_id;
commentJSON.discussion_type = discussion_type;
$.ajax({
type: "post",
url: site_url + "clients/project/" + project_id,
data: commentJSON,
success: function (comment) {
comment = JSON.parse(comment);
success(comment);
},
error: error,
});
},
putComment: function (commentJSON, success, error) {
commentJSON.action = "update_discussion_comment";
$.ajax({
type: "post",
url: site_url + "clients/project/" + project_id,
data: commentJSON,
success: function (comment) {
comment = JSON.parse(comment);
success(comment);
},
error: error,
});
},
deleteComment: function (commentJSON, success, error) {
$.ajax({
type: "post",
url: site_url + "clients/project/" + project_id,
success: success,
error: error,
data: {
id: commentJSON.id,
action: "delete_discussion_comment",
},
});
},
uploadAttachments: function (commentArray, success, error) {
var responses = 0;
var successfulUploads = [];
var serverResponded = function () {
responses++;
// Check if all requests have finished
if (responses == commentArray.length) {
// Case: all failed
if (successfulUploads.length == 0) {
error();
// Case: some succeeded
} else {
successfulUploads = JSON.parse(successfulUploads);
success(successfulUploads);
}
}
};
$(commentArray).each(function (index, commentJSON) {
if (
commentJSON.file.size &&
commentJSON.file.size > app.max_php_ini_upload_size_bytes
) {
alert_float("danger", app.lang.file_exceeds_max_filesize);
serverResponded();
} else {
// Create form data
var formData = new FormData();
$(Object.keys(commentJSON)).each(function (index, key) {
var value = commentJSON[key];
if (value) formData.append(key, value);
});
formData.append("action", "new_discussion_comment");
formData.append("discussion_id", discussion_id);
formData.append("discussion_type", discussion_type);
if (typeof csrfData !== "undefined") {
formData.append(csrfData["token_name"], csrfData["hash"]);
}
$.ajax({
url: site_url + "clients/project/" + project_id,
type: "POST",
data: formData,
cache: false,
contentType: false,
processData: false,
success: function (commentJSON) {
successfulUploads.push(commentJSON);
serverResponded();
},
error: function (data) {
var error = JSON.parse(data.responseText);
alert_float("danger", error.message);
serverResponded();
},
});
}
});
},
};
var settings = $.extend({}, defaults, options);
$(selector).comments(settings);
}
function view_project_file(id, project_id) {
$.post(site_url + "clients/project/" + project_id, {
action: "get_file",
id: id,
project_id: project_id,
})
.done(function (response) {
$("#project_file_data").html(response);
})
.fail(function (error) {
alert_float("danger", error.statusText);
});
}
function update_file_data(id) {
var data = {};
data.id = id;
data.subject = $('body input[name="file_subject"]').val();
data.description = $('body textarea[name="file_description"]').val();
data.action = "update_file_data";
$.post(site_url + "clients/project/" + project_id, data);
}
function render_customer_statement() {
var $statementPeriod = $("#range");
var value = $statementPeriod.selectpicker("val");
var period = new Array();
var isPeriod = false;
if (value != "period") {
period = JSON.parse(value);
} else {
period[0] = $('input[name="period-from"]').val();
period[1] = $('input[name="period-to"]').val();
if (period[0] == "" || period[1] == "") {
return false;
}
isPeriod = true;
}
var statementUrl = site_url + "clients/statement";
var statementUrlParams = new Array();
statementUrlParams["from"] = period[0];
statementUrlParams["to"] = period[1];
if (isPeriod) {
statementUrlParams["custom_period"] = true;
}
window.location.href = buildUrl(statementUrl, statementUrlParams);
}
function client_home_chart() {
// Check if chart canvas exists.
var chart = $("#client-home-chart");
if (chart.length == 0) {
return;
}
if (typeof salesChart !== "undefined") {
salesChart.destroy();
}
var data = {};
var currency = $("#currency");
var year = $("#payments_year");
if (currency.length > 0) {
data.report_currency = $('select[name="currency"]').val();
}
if (year.length > 0) {
data.year = $("#payments_year").val();
}
$.post(site_url + "clients/client_home_chart", data).done(function (
response
) {
response = JSON.parse(response);
salesChart = new Chart(chart, {
type: "bar",
data: response,
options: { responsive: true, maintainAspectRatio: false },
});
});
}
function projectFileGoogleDriveSave(pickData) {
projectExternalFileUpload(pickData, "gdrive");
}
function customerFileGoogleDriveSave(pickData) {
customerExternalFileUpload(pickData, "gdrive");
}
function taskFileGoogleDriveSave(pickData) {
taskExternalFileUpload(pickData, "gdrive");
}
function projectExternalFileUpload(files, externalType) {
$.post(site_url + "clients/project/" + project_id, {
files: files,
external: externalType,
action: "project_external_file",
}).done(function () {
var location = window.location.href;
window.location.href = location.split("?")[0] + "?group=project_files";
});
}
function taskExternalFileUpload(files, externalType) {
$.post(site_url + "clients/project/" + project_id, {
files: files,
task_id: $('input[name="task_id"]').val(),
external: externalType,
action: "add_task_external_file",
}).done(function () {
window.location.reload();
});
}
function customerExternalFileUpload(files, externalType) {
$.post(site_url + "clients/upload_files", {
files: files,
external: externalType,
}).done(function () {
window.location.reload();
});
}
function task_attachments_toggle() {
var $taskWrapper = $("#task");
var $attachmentsWrapper = $taskWrapper.find(".task_attachments_wrapper");
$attachmentsWrapper.find(".task-attachments-more").toggleClass("hide");
$attachmentsWrapper.find(".task-attachments-less").toggleClass("hide");
}
function init_tabs_scrollable() {
// Not working fine on RTL
if (isRTL != "true") {
if ($(window).width() <= 768) {
$("body").find(".toggle_view").remove();
}
// Horinzontal tabs
$(".horizontal-scrollable-tabs").horizontalTabs();
} else {
$(".arrow-left, .arrow-right").css("display", "none");
$(".horizontal-scrollable-tabs").removeClass("horizontal-scrollable-tabs");
$(".nav-tabs-horizontal").removeClass("nav-tabs-horizontal");
}
}