ultimatepos/Modules/Project/Resources/assets/js/project.js

1360 lines
42 KiB
JavaScript
Vendored

/**
* PROJECT MODULE
* project related code
*/
// project - add form model
$(document).on('click', 'button.add_new_project', function() {
var url = $(this).data('href');
$.ajax({
method: "GET",
dataType: "html",
url: url,
success: function(result){
$('#project_model').html(result).modal("show");
}
});
});
// project - edit form model
$(document).on('click', '.edit_a_project', function() {
var url = $(this).data('href');
$.ajax({
method: "GET",
dataType: "html",
url: url,
success: function(result){
$('#project_model').html(result).modal("show");
}
});
});
//initialize ck editor, date picker and form validation when model is opened
$('#project_model').on('shown.bs.modal', function (e) {
$('form#project_form .datepicker').datepicker({
autoclose: true,
format:datepicker_date_format
});
//initialize editor
tinymce.init({
selector: 'textarea#description',
});
$(".select2").select2();
//form validation
$("form#project_form").validate();
});
$('#project_model').on('hidden.bs.modal', function(){
tinymce.remove("textarea#description");
});
//project form submit
$(document).on('submit', 'form#project_form', function(e){
e.preventDefault();
var url = $('form#project_form').attr('action');
var method = $('form#project_form').attr('method');
var data = $('form#project_form').serialize();
var ladda = Ladda.create(document.querySelector('.ladda-button'));
ladda.start();
$.ajax({
method: method,
dataType: "json",
url: url,
data:data,
success: function(result){
ladda.stop();
if (result.success) {
$('#project_model').modal("hide");
toastr.success(result.msg);
var project_view = urlSearchParam('project_view');
if (project_view == 'kanban') {
initializeProjectKanbanBoard();
} else if(project_view == 'list_view') {
location.reload();
}
} else {
toastr.error(result.msg);
}
}
});
});
//project delete
$(document).on('click', '.delete_a_project', function(e) {
e.preventDefault();
var url = $(this).data('href');
swal({
title: LANG.sure,
icon: "warning",
buttons: true,
dangerMode: true,
}).then((confirmed) => {
if (confirmed) {
$.ajax({
method:'DELETE',
dataType: 'json',
url: url,
success: function(result){
if (result.success) {
toastr.success(result.msg);
var project_view = urlSearchParam('project_view');
if (project_view == 'kanban') {
initializeProjectKanbanBoard();
} else if(project_view == 'list_view') {
location.reload();
}
} else {
toastr.error(result.msg);
}
}
});
}
});
});
/**
* PROJECT MODULE
* project task related code
*/
// project task - add form model
$(document).on('click', '.task_btn', function(){
var url = $(this).data('href');
$.ajax({
methods: "GET",
dataType: 'html',
url: url,
success: function(result) {
$('.project_task_model').html(result).modal("show");
}
});
});
// project task - edit form model
$(document).on('click', '.edit_a_project_task', function() {
var url = $(this).data('href');
$.ajax({
method: "GET",
dataType: "html",
url: url,
success: function(result){
$('.project_task_model').html(result).modal("show");
}
});
});
$(document).on('click', '.edit_a_task_from_view_task', function() {
var url = $(this).data('href');
$('.project_task_model').html("");
if ($('.view_project_task_model').hasClass('in')) {
$('.view_project_task_model').modal("hide");
}
$.ajax({
method: "GET",
dataType: "html",
url: url,
async: false,
success: function(result){
$('.project_task_model').html(result).modal("show");
}
});
});
//initialize ck editor, date picker and form validation when model is opened
$('.project_task_model').on('shown.bs.modal', function (e) {
tinymce.init({
selector: 'textarea#description',
});
$('form#project_task_form .datepicker').datepicker({
autoclose: true,
format:datepicker_date_format
});
$(".select2").select2();
//form validation
$("form#project_task_form").validate();
//check if modal opened then make it scrollable
if($('.modal.in').length > 0)
{
$('body').addClass('modal-open');
}
});
$('.project_task_model').on('hidden.bs.modal', function(){
tinymce.remove("textarea#description");
});
//project task form submit
$(document).on('submit', 'form#project_task_form', function(e){
e.preventDefault();
var url = $('form#project_task_form').attr('action');
var method = $('form#project_task_form').attr('method');
var data = $('form#project_task_form').serialize();
var ladda = Ladda.create(document.querySelector('.ladda-button'));
ladda.start();
$.ajax({
method: method,
dataType: "json",
url: url,
data:data,
success: function(result){
ladda.stop();
if (result.success) {
$('.project_task_model').modal("hide");
toastr.success(result.msg);
if (typeof(project_task_datatable) != 'undefined') {
project_task_datatable.ajax.reload();
}
if (typeof(my_task_datatable) != 'undefined') {
my_task_datatable.ajax.reload();
}
if (!$('.custom-kanban-board').hasClass('hide')) {
initializeTaskKanbanBoard();
}
} else {
toastr.error(result.msg);
}
}
});
});
//data table in project view related codes
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr('href');
if ( target == '#project_task') {
initializeProjectTaskDatatable();
} else if(target == '#time_log') {
initializeTimeLogDatatable();
} else if(target == '#documents_and_notes') {
initializeNotesDataTable();
} else if (target == '#activities') {
initializeActivities();
} else if(target == '#project_overview') {
window.location.href = $(this).data('url');
} else if (target == '#project_invoices') {
initializeInvoiceDatatable();
}
});
//project task delete
$(document).on('click', '.delete_a_project_task', function(e) {
e.preventDefault();
var url = $(this).data('href');
swal({
title: LANG.sure,
icon: "warning",
buttons: true,
dangerMode: true,
}).then((confirmed) => {
if (confirmed) {
$.ajax({
method:'DELETE',
dataType: 'json',
url: url,
success: function(result){
if (result.success) {
toastr.success(result.msg);
if (typeof(project_task_datatable) != 'undefined') {
project_task_datatable.ajax.reload();
}
if (typeof(my_task_datatable) != 'undefined') {
my_task_datatable.ajax.reload();
}
if (!$('.custom-kanban-board').hasClass('hide')) {
initializeTaskKanbanBoard();
}
} else {
toastr.error(result.msg);
}
}
});
}
});
});
// update project task status
$(document).on('click', '.change_status_of_project_task', function() {
var url = $(this).data('href');
$.ajax({
method: "GET",
dataType: "html",
url: url,
success: function(result){
$('.view_modal').html(result).modal("show");
}
});
});
//update task status form submission
$(document).on('submit', 'form#change_status', function(e){
e.preventDefault();
var url = $('form#change_status').attr('action');
var method = $('form#change_status').attr('method');
var data = $('form#change_status').serialize();
$.ajax({
method: method,
dataType: "json",
url: url,
data:data,
success: function(result){
if (result.success) {
$('.view_modal').modal("hide");
toastr.success(result.msg);
if (typeof(project_task_datatable) != 'undefined') {
project_task_datatable.ajax.reload();
}
if (typeof(my_task_datatable) != 'undefined') {
my_task_datatable.ajax.reload();
}
} else {
toastr.error(result.msg);
}
}
});
});
// view a task
$(document).on('click', '.view_a_project_task', function() {
var url = $(this).data('href');
$.ajax({
method: "GET",
dataType: "html",
url: url,
success: function(result){
$('.view_project_task_model').html(result).modal("show");
}
});
});
// codes for editing project task description
$('.view_project_task_model').on('shown.bs.modal', function (e) {
$('form#update_task_description').hide();
$('.toggleMedia').hide();
$("form#add_comment_form").validate();
});
//toggle description edit btn
$(document).on('click', '.edit_task_description', function() {
tinymce.init({
selector: 'textarea#edit_description_of_task',
});
$('.toggle_description_fields').hide();
$('form#update_task_description').show();
});
$(document).on('click', '.close_update_task_description_form', function() {
toggleTaskForm();
tinymce.remove("textarea#edit_description_of_task");
});
//project task description form submit
$(document).on('submit', 'form#update_task_description', function(e){
e.preventDefault();
var url = $('form#update_task_description').attr('action');
var method = $('form#update_task_description').attr('method');
var data = $('form#update_task_description').serialize();
var ladda = Ladda.create(document.querySelector('.save-description-btn'));
ladda.start();
$.ajax({
method: method,
dataType: "json",
url: url,
data:data,
success: function(result){
ladda.stop();
if (result.success) {
$("div.form_n_description").html(result.task_description_html);
toastr.success(result.msg);
toggleTaskForm();
} else {
toastr.error(result.msg);
}
}
});
});
//toggling task description form
function toggleTaskForm() {
tinymce.remove("textarea#edit_description_of_task");
$('.toggle_description_fields').show();
$('form#update_task_description').hide();
}
//dropzone related code
var dropzoneInstance = {};
$(document).on('click', '.upload_doc', function() {
$('.upload_doc').hide();
$('.toggleMedia').show();
initialize_dropzone();
});
//toggle dropzone
$(document).on('click', '.hide_upload_btn', function() {
$('.toggleMedia').hide();
$('.upload_doc').show();
});
//on close model destroy dropzone
$('.view_project_task_model').on('hide.bs.modal', function(){
if (dropzoneInstance.length > 0) {
Dropzone.forElement("div#fileupload").destroy();
dropzoneInstance = {};
}
});
//initialize dropzone
function initialize_dropzone() {
var file_names = [];
if (dropzoneInstance.length > 0) {
Dropzone.forElement("div#fileupload").destroy();
}
dropzoneInstance = $("div#fileupload").dropzone({
url: base_path+'/project/post-media-dropzone-upload',
paramName: 'file',
uploadMultiple: true,
autoProcessQueue: true,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(file, response) {
if (response.success) {
toastr.success(response.msg);
file_names.push(response.file_name);
$('input#comment_media').val(file_names);
} else {
toastr.error(response.msg);
}
},
});
}
//project task comment form submit
$(document).on('submit', 'form#add_comment_form', function(e){
e.preventDefault();
var url = $('form#add_comment_form').attr('action');
var method = $('form#add_comment_form').attr('method');
var data = $('form#add_comment_form').serialize();
var ladda = Ladda.create(document.querySelector('.comment_btn'));
ladda.start();
$.ajax({
method: method,
dataType: "json",
url: url,
data:data,
success: function(result){
ladda.stop();
if (result.success) {
$('input#comment_media').val('');
initialize_dropzone();
$('form#add_comment_form')[0].reset();
$('.direct-chat-messages').prepend(result.comment_html);
toastr.success(result.msg);
} else {
toastr.error(result.msg);
}
}
});
});
/**
* PROJECT MODULE
* project time log related code
*/
// open a model for form
$(document).on('click', '.time_log_btn', function() {
var url = $(this).data('href');
var data = {added_from : 'timelog'};
$('.view_modal').html("");
$.ajax({
method: 'GET',
dataType: 'html',
url: url,
data: data,
success: function(result) {
$('#time_log_model').html(result).modal('show');
}
});
});
//initialize datetime picker for timelog form on model open
$('#time_log_model').on('shown.bs.modal', function(e) {
__init_datetime_field('form#time_log_form .datetimepicker');
$(".select2").select2();
$('form#time_log_form').validate();
});
//project task time log form submit
$(document).on('submit', 'form#time_log_form', function(e){
e.preventDefault();
var url = $('form#time_log_form').attr('action');
var method = $('form#time_log_form').attr('method');
var data = $('form#time_log_form').serialize();
$.ajax({
method: method,
dataType: "json",
url: url,
data:data,
success: function(result){
if (result.success) {
toastr.success(result.msg);
if (result.added_from !== 'task') {
time_logs_data_table.ajax.reload();
$('#time_log_model').modal('hide');
} else {
$('#task-timelog').html(result.task_timelog_html);
$('.view_modal').modal('hide');
}
} else {
toastr.error(result.msg);
}
}
});
});
// delete a time log
$(document).on('click', '#delete_a_time_log', function(e) {
e.preventDefault();
var url = $(this).data('href');
swal({
title: LANG.sure,
icon: "warning",
buttons: true,
dangerMode: true,
}).then((confirmed) => {
if (confirmed) {
$.ajax({
method:'DELETE',
dataType: 'json',
url: url,
success: function(result){
if (result.success) {
toastr.success(result.msg);
time_logs_data_table.ajax.reload();
} else {
toastr.error(result.msg);
}
}
});
}
});
});
// project task filter related code
$(document).on('change', "#assigned_to_filter, #status_filter, #due_date_filter, #priority_filter", function(){
if ($('.custom-kanban-board').hasClass('hide')) {
if (typeof project_task_datatable !== 'undefined') {
project_task_datatable.ajax.reload();
}
}
});
// project activities related code
$(document).on('click', '.load_more_activities', function() {
var url = $(this).data('href');
var data = {'project_id' : $('#project_id').val()};
$.ajax({
method:'GET',
dataType: 'json',
url: url,
data: data,
success: function(result){
if (result.success) {
$('.load_more_activities').hide();
$(".timeline").append(result.activities);
} else {
toastr.error(result.msg);
}
}
});
});
// my task data table related code
function initializeMyTaskDataTable() {
var task_view = $("[name='task_view']:checked").val();
if ((typeof my_task_datatable == 'undefined') && task_view == 'list_view') {
my_task_datatable = $("#my_task_table").DataTable({
processing: true,
serverSide: true,
ajax:{
url: '/project/project-task',
data: function(d) {
d.project_id = $('#project_id').val();
d.user_id = $('#assigned_to_filter').val();
d.status = $('#status_filter').val();
d.due_date = $('#due_date_filter').val();
d.priority = $('#priority_filter').val();
d.task_view = $("[name='task_view']:checked").val();
}
},
columnDefs: [
{
targets: [0, 1, 3, 7, 8],
orderable: false,
searchable: false,
},
],
aaSorting: [[7, 'asc']],
columns: [
{ data: 'action', name: 'action' },
{data: 'project'},
{ data: 'subject', name: 'subject' },
{ data: 'members'},
{ data: 'priority', name: 'priority' },
{ data: 'start_date', name: 'start_date' },
{ data: 'due_date', name: 'due_date' },
{ data: 'status', name: 'status' },
{ data: 'createdBy'},
{ data: 'custom_field_1', name: 'custom_field_1' },
{ data: 'custom_field_2', name: 'custom_field_2' },
{ data: 'custom_field_3', name: 'custom_field_3' },
{ data: 'custom_field_4', name: 'custom_field_4' },
]
});
} else if ((typeof my_task_datatable != 'undefined') && task_view == 'list_view') {
my_task_datatable.ajax.reload();
} else if (task_view == 'kanban') {
initializeTaskKanbanBoard();
}
}
//reload my task data table on change of filter
$(document).on('change', "#project_id, #assigned_to_filter, #status_filter, #due_date_filter, #priority_filter", function(){
initializeMyTaskDataTable();
});
$(document).on('change', '.my_task_view', function() {
if (($(this).val() == 'kanban') && $('.custom-kanban-board').hasClass('hide')) {
$('.table-responsive, .status_filter').addClass('hide');
$('.custom-kanban-board').removeClass('hide');
initializeTaskKanbanBoard();
} else if ($(this).val() == 'list_view') {
$('.custom-kanban-board').addClass('hide');
$('.table-responsive, .status_filter').removeClass('hide');
initializeMyTaskDataTable();
}
});
// on change project filter get project
$(document).on('change', "#project_status_filter, #project_end_date_filter, #project_categories_filter", function(){
var project_view = urlSearchParam('project_view');
if (project_view == 'kanban') {
initializeProjectKanbanBoard();
} else if(project_view == 'list_view') {
$(".project_html").html('');
getProjectList();
}
});
function getProjectList(url = '') {
var project_view = urlSearchParam('project_view');
var data = {
'status' : $('#project_status_filter').val(),
'end_date' : $('#project_end_date_filter').val(),
'category_id' : $('#project_categories_filter').val(),
'project_view' : project_view
};
if (url.length == 0) {
url = '/project/project';
}
$.ajax({
method:'GET',
dataType: 'json',
url: url,
data: data,
success: function(result){
if (result.success) {
$('.load_more_project').hide();
$(".project_html").append(result.projects_html);
} else {
toastr.error(result.msg);
}
}
});
}
// load more project if any
$(document).on('click', '.load_more_project', function() {
var url = $(this).data('href');
getProjectList(url);
});
/**
* PROJECT MODULE
* project invoice related code
*/
// add a new row
$(document).on('click', '.add_invoice_line', function() {
$("div.invoice_lines").append($("div.invoice_line_row").html());
});
// remove a row
$(document).on('click', '.remove_this_row', function() {
$(this).closest("div.invoice_line").remove();
calculateSubtotal();
});
// toggle invoice task description
$(document).on('click', '.toggle_description', function () {
$(this).closest('div.invoice_line').find('div.description').toggle();
});
//initialize date picker for invoice form
$('form#invoice_form .date-picker').datepicker({
autoclose: true,
format:datepicker_date_format
});
// initialize select2 for invoice form
$("form#invoice_form .select2").select2();
//form validation for invoice form
$("form#invoice_form").validate();
//calculate row total price
$(document).on('change', 'form#invoice_form .rate,form#invoice_form .quantity, form#invoice_form .tax', function() {
var row = $(this).closest('.invoice_line');
var price = __read_number(row.find('input.rate'));
var qty = __read_number(row.find('input.quantity'));
var tax = row.find('select.tax').find(':selected').data('rate');
// add tax to price
var price_inc_tax = __add_percent(price, tax);
// calculate total inc. tax
var total = price_inc_tax * qty;
__write_number(row.find('input.total'), total, false);
// on change of rate/qty/total recalculate subtotal/totaltax
calculateSubtotal();
});
// on change of discount type/amount recalculate invoice total
$(document).on('change', 'form#invoice_form #discount_type, form#invoice_form #discount_amount', function() {
calculateInvoiceTotal();
});
function calculateSubtotal() {
var rows = $('.invoice_lines');
var lines_total = 0;
rows.find('.invoice_line').each(function(row) {
lines_total += __read_number($(this).find('input.total'));
});
$('span.subtotal').text(__currency_trans_from_en(lines_total));
__write_number($('input#subtotal'), lines_total, false);
calculateInvoiceTotal();
}
function calculateInvoiceTotal() {
var discount_type = $('select#discount_type').val();
var discount_amount = __read_number($('input#discount_amount'));
var subtotal = __read_number($('input#subtotal'));
var discounted_amount = __calculate_amount(discount_type, discount_amount, subtotal);
var invoice_total = subtotal - discounted_amount;
$('span.invoice_total').text(__currency_trans_from_en(invoice_total));
__write_number($('input#invoice_total'), invoice_total, false);
}
// delete a invoice
$(document).on('click', '.delete_a_invoice', function() {
var url = $(this).data('href');
swal({
title: LANG.sure,
icon: "warning",
buttons: true,
dangerMode: true,
}).then((confirmed) => {
if (confirmed) {
$.ajax({
method: 'DELETE',
dataType: 'json',
url: url,
success: function(result) {
if (result.success) {
toastr.success(result.msg);
project_invoice_datatable.ajax.reload();
} else {
toastr.error(result.msg);
}
}
});
}
});
});
// view invoice
$(document).on('click', '.view_a_project_invoice', function() {
var url = $(this).data('href');
$.ajax({
method: 'GET',
dataType: 'html',
url: url,
success: function(result) {
$('.view_modal').html(result).modal("show");
}
});
});
$(document).on('change', '.task_view', function() {
if (($(this).val() == 'kanban') && $('.custom-kanban-board').hasClass('hide')) {
$('.table-responsive, .status_filter').addClass('hide');
$('.custom-kanban-board').removeClass('hide');
initializeTaskKanbanBoard();
} else if ($(this).val() == 'list_view') {
$('.custom-kanban-board').addClass('hide');
$('.table-responsive, .status_filter').removeClass('hide');
initializeProjectTaskDatatable();
}
});
function getTaskListForKanban() {
var data = {
project_id : $('#project_id').val(),
user_id : $('#assigned_to_filter').val(),
due_date : $('#due_date_filter').val(),
priority : $('#priority_filter').val(),
task_view : $("[name='task_view']:checked").val()
};
var kanbanDataSet = [];
$.ajax({
method: 'GET',
dataType: 'json',
async: false,
url: '/project/project-task',
data: data,
success: function(result) {
if (result.success) {
kanbanDataSet = result.project_tasks;
} else {
toastr.error(result.msg);
}
}
});
return kanbanDataSet;
}
function updateProjectTaskStatusForKanban(data, el) {
$.ajax({
method: 'PUT',
dataType: 'json',
url: '/project/project-task/' + data.task_id + '/post-status',
data:data,
success: function(result){
if (result.success) {
$(el).attr('data-parentid', data.status);
toastr.success(result.msg);
} else {
toastr.error(result.msg);
}
}
});
}
function initializeProjectTaskDatatable() {
var task_view = $("[name='task_view']:checked").val();
if((typeof project_task_datatable == 'undefined') && task_view == 'list_view') {
project_task_datatable = $('#project_task_table').DataTable({
processing: true,
serverSide: true,
ajax:{
url: '/project/project-task',
data: function(d) {
d.project_id = $('#project_id').val();
d.user_id = $('#assigned_to_filter').val();
d.status = $('#status_filter').val();
d.due_date = $('#due_date_filter').val();
d.priority = $('#priority_filter').val();
d.task_view = $("[name='task_view']:checked").val();
}
},
columnDefs: [
{
targets: [0, 2, 6, 7],
orderable: false,
searchable: false,
},
],
aaSorting: [[6, 'asc']],
columns: [
{ data: 'action', name: 'action' },
{ data: 'subject', name: 'subject' },
{ data: 'members'},
{ data: 'priority', name: 'priority' },
{ data: 'start_date', name: 'start_date' },
{ data: 'due_date', name: 'due_date' },
{ data: 'status', name: 'status' },
{ data: 'createdBy'},
{ data: 'custom_field_1', name: 'custom_field_1' },
{ data: 'custom_field_2', name: 'custom_field_2' },
{ data: 'custom_field_3', name: 'custom_field_3' },
{ data: 'custom_field_4', name: 'custom_field_4' },
]
});
} else if (task_view == 'list_view') {
project_task_datatable.ajax.reload();
} else if (task_view == 'kanban') {
initializeTaskKanbanBoard();
}
}
function initializeTimeLogDatatable() {
if(typeof time_logs_data_table == 'undefined') {
time_logs_data_table = $('#time_logs_table').DataTable({
processing: true,
serverSide: true,
ajax:{
url: '/project/project-task-time-logs',
data: function(d) {
d.project_id = $('#project_id').val();
}
},
columnDefs: [
{
targets: [0, 1, 3, 4, 5, 6],
orderable: false,
searchable: false,
},
],
aaSorting: [[2, 'desc']],
columns: [
{ data: 'action', name: 'action' },
{ data: 'task'},
{ data: 'start_datetime', name: 'start_datetime' },
{ data: 'end_datetime', name: 'end_datetime' },
{ data: 'work_hour'},
{ data: 'user'},
{ data: 'note', name: 'note'},
]
});
}else {
time_logs_data_table.ajax.reload();
}
}
function initializeActivities() {
var data = {'project_id' : $('#project_id').val()};
$.ajax({
method:'GET',
dataType: 'json',
url: '/project/activities',
data: data,
success: function(result){
if (result.success) {
$(".timeline").html(result.activities);
} else {
toastr.error(result.msg);
}
}
});
}
function initializeInvoiceDatatable() {
if (typeof project_invoice_datatable == 'undefined') {
project_invoice_datatable = $('#project_invoice_table').DataTable({
processing: true,
serverSide: true,
ajax:{
url:'/project/invoice',
data: function(d) {
d.project_id = $('#project_id').val();
}
},
columnDefs: [
{
targets: [0, 2, 7],
orderable: false,
searchable: false,
},
],
aaSorting: [[2, 'asc']],
columns: [
{ data: 'action', name: 'action' },
{ data: 'invoice_no', name: 'invoice_no' },
{ data: 'transaction_date', name: 'transaction_date'},
{ data: 'contact_id', name: 'contact_id' },
{ data: 'pjt_title', name: 'pjt_title' },
{ data: 'payment_status', name: 'payment_status' },
{ data: 'final_total', name: 'final_total' },
{ data: 'status', name: 'status' },
],
fnDrawCallback: function(oSettings) {
__currency_convert_recursively($('#project_invoice_table'));
}
});
} else {
project_invoice_datatable.ajax.reload();
}
}
function initializeNotesDataTable() {
if(typeof documents_and_notes_data_table == 'undefined') {
getDocAndNoteIndexPage();
initializeDocumentAndNoteDataTable();
}else {
documents_and_notes_data_table.ajax.reload();
}
}
/*
kanban code for project
*/
$(document).on('change', '.project_view', function() {
window.location.href = $(this).data('href');
});
function getProjectListForKanban() {
var project_view = urlSearchParam('project_view');
var data = {
end_date : $('#project_end_date_filter').val(),
category_id : $('#project_categories_filter').val(),
project_view : project_view
};
var kanbanDataSet = [];
$.ajax({
method: 'GET',
dataType: 'json',
async: false,
url: '/project/project',
data: data,
success: function(result) {
if (result.success) {
kanbanDataSet = result.projects_html;
} else {
toastr.error(result.msg);
}
}
});
return kanbanDataSet;
}
function updateProjectStatusForKanban(data, el) {
$.ajax({
method: 'PUT',
dataType: 'json',
url: '/project/project/'+ data.project_id + '/post-status',
data:data,
success: function(result){
if (result.success) {
$(el).attr('data-parentid', data.status);
toastr.success(result.msg);
} else {
toastr.error(result.msg);
}
}
});
}
function initializeProjectKanbanBoard() {
//before creating kanban board, set div to empty.
$('div#myKanban').html('');
lists = getProjectListForKanban();
KanbanBoard.prototype.run = function () {
var _this = this;
_this.lists = lists;
var boards = lists.
map(function (l) {return _this.listToKanbanBoard(l);}).
map(function (b) {return _this.processBoard(b);});
var kanbanTest = _this.initProjectKanban(boards, '#myKanban');
$('.meta-tasks').each(function (i, el) {
return new PerfectScrollbar(el, { useBothWheelAxes: true });
});
// _this.setupUI(kanbanTest);
};
new KanbanBoard().run();
}
KanbanBoard.prototype.initProjectKanban = function (boards, jKanbanElemSelector) {
var _this = this;
var kanban = new jKanban({
element: jKanbanElemSelector,
gutter: '5px',
widthBoard: '320px',
dragBoards: false,
click: function (el) {
//TODO: implement card clickable
// _this.listApi.
// getCard(el.dataset.eid).
// then(_this.openCardModal.bind(_this));
},
dragEl: function (el, source) {
$(el).addClass('dragging');
isDraggingCard = true;
},
dragendEl: function (el) {
$(el).removeClass('dragging');
isDraggingCard = false;
},
dropEl: function (el, target, source, sibling) {
var $el = $(el);
$el.closest('.kanban-drag')[0]._ps.update();
var $newParentStatus = $(target).parent('div.kanban-board').data('id');
var $status = $(el).attr('data-parentid');
//PROJECT MODULE:update status of project in db
if (!$('div.project-kanban-board').hasClass('hide')) {
if ($newParentStatus !== $status) {
var data = {
status : $newParentStatus,
project_id: $(el).data('eid')
};
updateProjectStatusForKanban(data, $el);
}
}
},
addItemButton: false,
boards: boards
});
initializeAutoScrollOnKanbanWhileCardDragging(kanban);
return kanban;
};
function initializeTaskKanbanBoard(argument) {
//before creating kanban board, set div to empty.
$('div#myKanban').html('');
lists = getTaskListForKanban();
KanbanBoard.prototype.run = function () {
var _this = this;
_this.lists = lists;
var boards = lists.
map(function (l) {return _this.listToKanbanBoard(l);}).
map(function (b) {return _this.processBoard(b);});
var kanbanTest = _this.initTaskKanban(boards, '#myKanban');
$('.meta-tasks').each(function (i, el) {
return new PerfectScrollbar(el, { useBothWheelAxes: true });
});
// _this.setupUI(kanbanTest);
};
new KanbanBoard().run();
}
KanbanBoard.prototype.initTaskKanban = function (boards, jKanbanElemSelector) {
var _this = this;
var kanban = new jKanban({
element: jKanbanElemSelector,
gutter: '5px',
widthBoard: '320px',
dragBoards: false,
click: function (el) {
//TODO: implement card clickable
// _this.listApi.
// getCard(el.dataset.eid).
// then(_this.openCardModal.bind(_this));
},
dragEl: function (el, source) {
$(el).addClass('dragging');
isDraggingCard = true;
},
dragendEl: function (el) {
$(el).removeClass('dragging');
isDraggingCard = false;
},
dropEl: function (el, target, source, sibling) {
var $el = $(el);
$el.closest('.kanban-drag')[0]._ps.update();
var $newParentStatus = $(target).parent('div.kanban-board').data('id');
var $status = $(el).attr('data-parentid');
//PROJECT MODULE:update status of task in db
if (!$('.custom-kanban-board').hasClass('hide')) {
if ($newParentStatus !== $status) {
var data = {
project_id : $(el).data('project_id'),
status : $newParentStatus,
task_id: $(el).data('eid')
};
updateProjectTaskStatusForKanban(data, $el);
}
}
},
addItemButton: false,
boards: boards
});
initializeAutoScrollOnKanbanWhileCardDragging(kanban);
return kanban;
};
/**
* PROJECT MODULE
* project report
*/
//Employee time log report
$('#employee_timelog_report_daterange').daterangepicker(
dateRangeSettings,
function(start, end) {
$('#employee_timelog_report_daterange').val(
start.format(moment_date_format) + ' ~ ' + end.format(moment_date_format)
);
}
);
$('#employee_timelog_report_daterange').on('cancel.daterangepicker', function(ev, picker) {
$('#employee_timelog_report_daterange').val('');
});
$(document).on('change', '#employee_timelog_report_user_id, #employee_timelog_report_project_id, #employee_timelog_report_daterange', function() {
getEmployeeTimeLogReport();
});
function getEmployeeTimeLogReport() {
var data = {
start_date: $('input#employee_timelog_report_daterange').data('daterangepicker').startDate.format('YYYY-MM-DD'),
end_date: $('input#employee_timelog_report_daterange').data('daterangepicker').endDate.format('YYYY-MM-DD'),
project_id: $('#employee_timelog_report_project_id').val(),
user_id: $('#employee_timelog_report_user_id').val()
};
$.ajax({
method: 'GET',
dataType: 'json',
url: '/project/project-employee-timelog-reports',
data: data,
success: function(result) {
if (result.success) {
$('div.employee_time_logs_report').html(result.timelog_report);
} else {
toastr.error(result.msg);
}
}
});
}
//project time log report
$('#project_timelog_report_daterange').daterangepicker(
dateRangeSettings,
function(start, end) {
$('#project_timelog_report_daterange').val(
start.format(moment_date_format) + ' ~ ' + end.format(moment_date_format)
);
}
);
$('#project_timelog_report_daterange').on('cancel.daterangepicker', function(ev, picker) {
$('#project_timelog_report_daterange').val('');
});
$(document).on('change', '#project_timelog_report_project_id, #project_timelog_report_daterange', function() {
getProjectTimeLogReport();
});
function getProjectTimeLogReport() {
var data = {
start_date: $('input#project_timelog_report_daterange').data('daterangepicker').startDate.format('YYYY-MM-DD'),
end_date: $('input#project_timelog_report_daterange').data('daterangepicker').endDate.format('YYYY-MM-DD'),
project_id: $('#project_timelog_report_project_id').val()
};
$.ajax({
method: 'GET',
dataType: 'json',
url: '/project/project-timelog-reports',
data:data,
success:function(result) {
if (result.success) {
$('div.project_timelog_report').html(result.timelog_report);
} else {
toastr.error(result.msg);
}
}
});
}
//delete a comment on task
$(document).on('click', '.delete-task-comment', function(e) {
e.preventDefault();
var element = $(this);
var comment_id = $(this).data('comment_id');
var task_id = $(this).data('task_id');
swal({
title: LANG.sure,
icon: "warning",
buttons: true,
dangerMode: true,
}).then((confirmed) => {
if (confirmed) {
$.ajax({
method:'DELETE',
dataType: 'json',
url: '/project/project-task-comment/'+comment_id+'?task_id='+task_id,
success: function(result){
if (result.success) {
toastr.success(result.msg);
element.closest('.direct-chat-msg').remove();
} else {
toastr.error(result.msg);
}
}
});
}
});
});
//add time log from task view
$(document).on('click', '.add_time_log', function() {
var url = $(this).data('href');
var data = {added_from : 'task'};
$('#time_log_model').html("");
$.ajax({
method: 'GET',
dataType: 'html',
url: url,
data:data,
success: function(result) {
$('.view_modal').html(result).modal('show');
__init_datetime_field('form#time_log_form .datetimepicker');
$(".select2").select2();
$('form#time_log_form').validate();
}
});
});