You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2181 lines
116 KiB
2181 lines
116 KiB
var pseat_feature_counter = 0;
|
|
var init_form_bo_status = false;
|
|
var init_form_ev_status = false;
|
|
var activate_cancel_confirmation = false;
|
|
var prev_eventbo_status;
|
|
var prev_event_status;
|
|
var cancel_it = false;
|
|
var current_mod_settings;
|
|
var cur_evsched_mod_sett;
|
|
var old_total_available_seat = 0;
|
|
var start_date_time_ev_listener = false;
|
|
var covered_cat_list = [], in_covered_cat_list = false;
|
|
covered_loc_list = [], in_covered_loc_list = false;
|
|
var evsched_checker = '';
|
|
const event_schedule = (function ($, window, jQuery) {
|
|
return {
|
|
"getForm" : function(){
|
|
var form = $("form#eventForm");
|
|
return { obj : form, dates : form.data("event_schedule"), event_category: $("form#event_schedule_form").data('event_category') };
|
|
},
|
|
"get_pickers" : function(){
|
|
/*
|
|
0 = reservation_start_date, 1 = reservation_end_date
|
|
2 = start_date_time, 3 = end_date_time
|
|
*/
|
|
return [$("#reservation_start_date"), $("#reservation_end_date"),
|
|
$("#start_date_time"), $("#end_date_time")];
|
|
},
|
|
"model" : {
|
|
|
|
"indexs" : function(){
|
|
return {
|
|
event_schedule_id : null,
|
|
reservation_start_date : null,
|
|
reservation_end_date : null,
|
|
start_date_time : null,
|
|
end_date_time : null,
|
|
event_status : null,
|
|
back_office_status : null,
|
|
total_available_seat : 0,
|
|
total_quota_waiting_list_seat : 0,
|
|
seats_per_subscriber : 0,
|
|
city_location : null,
|
|
location : null,
|
|
city_name : null,
|
|
address : null,
|
|
code_postal : null,
|
|
noshow : null,
|
|
event_url: null,
|
|
item_code: null
|
|
};
|
|
},
|
|
|
|
"init" : function(){
|
|
var eventForm = event_schedule.getForm();
|
|
(eventForm.obj).data("event_schedule", []);
|
|
(eventForm.obj).data("event_dates", {});
|
|
//initialize grid
|
|
event_schedule.grid.init("addEvent");
|
|
},
|
|
|
|
"action" : {
|
|
"client" : { //means local storage
|
|
"reset" : function() {
|
|
(event_schedule.getForm().obj).removeData("event_schedule");
|
|
events.set_vars({"event_schedule_list": []});
|
|
},
|
|
|
|
"change_seat_feature" : function(seat_feature){
|
|
var eventForm = event_schedule.getForm();
|
|
//update specific event schedule from the datastore
|
|
$.map(eventForm.dates, function(value, key){
|
|
eventForm.dates[key]["total_available_seat"] = 0;
|
|
});
|
|
//now, update datastore
|
|
(eventForm.obj).data("event_schedule", eventForm.dates);
|
|
//then, reload grid
|
|
event_schedule.grid.reload("addEvent");
|
|
},
|
|
|
|
"add" : function(form){
|
|
const addEvent = () => {
|
|
var eventForm = event_schedule.getForm(),
|
|
indexs = event_schedule.model.indexs();
|
|
|
|
//get inputs from from schedule using the datastore template
|
|
$.map(form.serializeArray(), function(key, value){
|
|
indexs[key.name] = key.value;
|
|
});
|
|
|
|
//push new dates from temp. datastore
|
|
(eventForm.dates).push(indexs);
|
|
|
|
//now, update datastore
|
|
(eventForm.obj).data("event_schedule", eventForm.dates);
|
|
//then, reload grid
|
|
event_schedule.grid.reload("addEvent");
|
|
// hide modal dialog after adding new event date
|
|
$(".event_schedule_form").modal("hide");
|
|
}
|
|
|
|
const dataInputs = event_schedule.model.action.client.extractInputs(form);
|
|
|
|
/**
|
|
* Server-side check for duplicate code selection
|
|
* Applies only when event has item_code || Paid event
|
|
*/
|
|
if(!dataInputs.item_code) {
|
|
addEvent();
|
|
} else {
|
|
event_schedule.model.action.client.validate_code_selection.from_server(dataInputs.item_code)
|
|
.then(function(result) {
|
|
if (result && result.mtype == "success") {
|
|
addEvent();
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
"delete" : function(row){
|
|
var eventForm = event_schedule.getForm();
|
|
// delete a row or an element from the datastore
|
|
$.map(eventForm.dates, function(value, key){
|
|
if(key == row){
|
|
eventForm.dates.splice(key, 1);
|
|
return false;
|
|
}
|
|
});
|
|
//now, update datastore
|
|
(eventForm.obj).data("event_schedule", eventForm.dates);
|
|
//then, reload grid
|
|
event_schedule.grid.reload("addEvent");
|
|
},
|
|
|
|
"update" : {
|
|
"schedule" : function(row){
|
|
const updateEvent = () => {
|
|
var eventForm = event_schedule.getForm(),
|
|
indexs = eventForm.dates[row];
|
|
if (!($("#event_schedule_form").find('input#moderationSwitchBtn').prop("checked"))) {
|
|
eventForm.dates[row]['moderationSwitchBtn'] = "off";
|
|
$("#event_schedule_form").find('input#moderationSwitchBtn').prop("aria-expanded", false)
|
|
}
|
|
if (!($("#event_schedule_form").find('input#moderationSwitchFlexibleBtn').prop("checked"))) {
|
|
eventForm.dates[row]['moderationSwitchFlexibleBtn'] = "off";
|
|
$("#event_schedule_form").find('input#moderationSwitchFlexibleBtn').prop("aria-expanded", false)
|
|
}
|
|
// $('input#moderationSwitchBtn').val('off');
|
|
//update specific event schedule from the datastore
|
|
$.map($("#event_schedule_form").serializeArray(), function(key, value){
|
|
indexs[key.name] = key.value;
|
|
});
|
|
|
|
//now, update datastore
|
|
(eventForm.obj).data("event_schedule", eventForm.dates);
|
|
//then, reload grid
|
|
event_schedule.grid.reload("addEvent");
|
|
// hide modal dialog after adding new event date
|
|
$(".event_schedule_form").modal("hide");
|
|
}
|
|
|
|
const dataInputs = event_schedule.model.action.client.extractInputs($("#event_schedule_form"));
|
|
/**
|
|
* Server-side check for duplicate code selection
|
|
* Applies only when event has item_code || Paid event
|
|
*/
|
|
if(!dataInputs.item_code) {
|
|
updateEvent();
|
|
} else {
|
|
event_schedule.model.action.client.validate_code_selection.from_server(dataInputs.item_code)
|
|
.then(function(result) {
|
|
if (result && result.mtype == "success") {
|
|
updateEvent();
|
|
}
|
|
});
|
|
}
|
|
|
|
},
|
|
|
|
"render_data" : function(row){
|
|
var rowData = (events.get_vars().event_schedule_list)[0].row(row).data(),
|
|
form = $("#event_schedule_form"),
|
|
datetime = ["reservation_start_date","reservation_end_date","start_date_time", "end_date_time"];
|
|
|
|
if (!(rowData['moderationSwitchBtn'])) {
|
|
rowData['moderationSwitchBtn'] = "off";
|
|
// $("#event_schedule_form").find('input#moderationSwitchFlexibleBtn').prop("aria-expanded", false)
|
|
}
|
|
if (!(rowData['moderationSwitchFlexibleBtn'])) {
|
|
rowData['moderationSwitchFlexibleBtn'] = "off";
|
|
// $("#event_schedule_form").find('input#moderationSwitchFlexibleBtn').prop("aria-expanded", false)
|
|
}
|
|
|
|
/* this piece of code is for validation to check
|
|
whether to require the seats_per_subscriber field or not
|
|
*/
|
|
if( rowData.event_schedule_id !="" && rowData.event_schedule_id !=null) {
|
|
form.data("esid", rowData.event_schedule_id);
|
|
}
|
|
|
|
//update the specific event schedule from the datastore
|
|
$.map(rowData, function(value, key){
|
|
if (key == 'total_available_seat') {
|
|
old_total_available_seat = value;
|
|
}
|
|
if(key == "back_office_status" || key == "event_status") {
|
|
init_form_bo_status = true;
|
|
init_form_ev_status = true;
|
|
// add the cancel option to edit form if not yet added
|
|
form.find("#"+key).val(value).change();
|
|
if (key == 'event_status') {
|
|
form.find("#old_event_status").val(value).change();
|
|
}
|
|
if (value == 'CANCEL') {
|
|
$('select#'+key+'>option:not(option[value="'+value+'"])').prop( "disabled", true );
|
|
} else {
|
|
$('select#'+key+'>option').prop( "disabled", false );
|
|
}
|
|
} else if(datetime.indexOf(key) != -1 && value!=""){
|
|
form.find("#"+key).val(app._form.format_inputs("two_digits_datetime", value));
|
|
}else {
|
|
switch (key) {
|
|
case 'moderationSwitchBtn':
|
|
case 'moderationSwitchFlexibleBtn':
|
|
form.find("#"+key).prop('checked', value=='on'?true:false);
|
|
if (key == 'moderationSwitchBtn') {
|
|
form.find("#moderationFormCollapse").collapse(value=='on'?'show':'hide');
|
|
} else {
|
|
form.find("#moderationFlexibleCollapse").collapse(value=='on'?'show':'hide');
|
|
}
|
|
break;
|
|
default:
|
|
form.find("#"+key).val(value);
|
|
}
|
|
}
|
|
});
|
|
},
|
|
/*
|
|
definition is for editing event schedule directly from main event table
|
|
*/
|
|
"render_data_schedule" : function(row){
|
|
var explode = row.split("_");
|
|
var event = (events.get_vars()._events).row(explode[0]).data(),
|
|
datetime = ["reservation_start_date","reservation_end_date", "start_date_time", "end_date_time"];
|
|
|
|
if(typeof event.action.event_schedule[explode[1]] != "undefined"){
|
|
var form = $("#event_schedule_form"),
|
|
rowData = event.action.event_schedule[explode[1]];
|
|
|
|
/* this piece of code is for validation to check
|
|
whether to require the seats_per_subscriber field or not
|
|
*/
|
|
if( rowData.event_schedule_id !="" && rowData.event_schedule_id !=null) {
|
|
form.data("esid", rowData.event_schedule_id);
|
|
}
|
|
//update specific event schedule form with server data
|
|
$.map(rowData, function(value, key){
|
|
if (key == 'total_available_seat') {
|
|
old_total_available_seat = value;
|
|
}
|
|
|
|
if(key=='total_quota_waiting_list_seat'){
|
|
if (value==""){
|
|
value=0;
|
|
$('#'+key).val(value).change();
|
|
}
|
|
|
|
}
|
|
if(key == "back_office_status" || key == "event_status") {
|
|
init_form_bo_status = true;
|
|
init_form_ev_status = true;
|
|
form.find("#"+key).val(value).change();
|
|
if (key == 'event_status') {
|
|
form.find("#old_event_status").val(value).change();
|
|
}
|
|
if (value == 'CANCEL') {
|
|
$('select#'+key+'>option:not(option[value="'+value+'"])').prop( "disabled", true );
|
|
} else {
|
|
$('select#'+key+'>option').prop( "disabled", false );
|
|
}
|
|
} else if(datetime.indexOf(key) != -1 && value!=""){
|
|
form.find("#"+key).val(app._form.format_inputs("two_digits_datetime", value));
|
|
}else {
|
|
form.find("#"+key).val(value);
|
|
}
|
|
});
|
|
|
|
//disabled field dispondible when seat feature is combined
|
|
if(rowData.seat_feature != "" && parseInt(rowData.seat_feature) == 2){
|
|
$("#total_available_seat").val("").prop("disabled", true);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
/*clean up event dates before saving*/
|
|
"clean_event_dates" : function(){
|
|
var eventForm = event_schedule.getForm(),
|
|
indexs = eventForm.dates,
|
|
datetime = ["start_date_time", "end_date_time", "reservation_start_date","reservation_end_date"];
|
|
//clean datastore before submitting to server
|
|
$.map(eventForm.dates, function(value, key){
|
|
delete eventForm.dates[key]["event_schedule_id"];
|
|
$.map(value, function(val, i){
|
|
if(datetime.indexOf(i) != -1 && val.trim()!=""){
|
|
eventForm.dates[key][i] = app._form.format_inputs("datetime", val);
|
|
}
|
|
});
|
|
});
|
|
return eventForm.dates;
|
|
},
|
|
|
|
"extractInputs": function(form) {
|
|
let data = {};
|
|
$.map(form.serializeArray(), function(key, value){
|
|
data[key.name] = key.value;
|
|
});
|
|
return data;
|
|
},
|
|
|
|
"validate_code_selection": {
|
|
/**
|
|
* Check from local storage where event dates
|
|
* are temporarily saved before sending to server
|
|
*/
|
|
"from_data_store": (codeCollection = null, row = null) => {
|
|
const eventForm = event_schedule.getForm();
|
|
const eventDates = (eventForm.obj).data("event_schedule");
|
|
return eventDates.find((date, idx) => ((date.item_code).toLowerCase() == codeCollection.toLowerCase() && (row != idx) ));
|
|
},
|
|
"from_server": (codeCollection = null) => {
|
|
return $.ajax({
|
|
url: app.get_vars().baseurl+"has_duplicate_code_selection",
|
|
type: 'POST',
|
|
data: { item_code: codeCollection },
|
|
success: function(result) {
|
|
if(app.isalive(result)) {
|
|
if (result.mtype == "error" && result.mdetail) {
|
|
var x = 0;
|
|
$.map(result.mdetail, function (input, i) {
|
|
// Remove duplicate span message
|
|
$(`span[for='${input.field}']`).remove();
|
|
app._form._populate_field_error(input.field, input.message, x);
|
|
x++;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
},
|
|
|
|
"server" : {
|
|
|
|
"clean_dates" : function(formData) {
|
|
var datetime = ["start_date_time", "end_date_time", "reservation_start_date","reservation_end_date"];
|
|
//clean datastore before submitting to server
|
|
/*index 0 = key, index 1 = values */
|
|
for(var data of formData.entries()) {
|
|
if(datetime.indexOf(data[0]) != -1 && data[1].trim() != ""){
|
|
formData.set(data[0], app._form.format_inputs("datetime", data[1]));
|
|
}
|
|
}
|
|
return formData;
|
|
},
|
|
|
|
"change_seat_feature" : function(seat_feature){
|
|
var data = new FormData();
|
|
data.append('seat_feature', seat_feature);
|
|
var http_result = events.server.request("view", "change_seat_feature", data, events.get_vars().event_id);
|
|
http_result.success(function(result){
|
|
if(app.isalive(result)) {
|
|
events.server.reset("view", result);
|
|
//then, reload grid
|
|
event_schedule.grid.reload("editEvent");
|
|
}
|
|
}).error(function(xhr){
|
|
console.log(xhr);
|
|
});
|
|
},
|
|
|
|
"get_row_data" : function(row) {
|
|
var http_data = new FormData($("form#event_schedule_form")[0]);
|
|
http_data = event_schedule.model.action.server.clean_dates(http_data),
|
|
event_schedule_id = "";
|
|
|
|
if(row.toString().indexOf("_") != -1){
|
|
row = row.split("_");
|
|
var edited_row = $("#events_list").DataTable().row(parseInt(row[0])).data();
|
|
http_data.append("avl_seats", edited_row.action.event_schedule[parseInt(row[1])].avl_seats);
|
|
http_data.append("rem_seats", edited_row.action.event_schedule[parseInt(row[1])].rem_seats);
|
|
http_data.append("avl_wl_seats", edited_row.action.event_schedule[parseInt(row[1])].avl_wl_seats);
|
|
http_data.append("rem_wl_seats", edited_row.action.event_schedule[parseInt(row[1])].rem_wl_seats);
|
|
http_data.append("seat_feature", ((typeof edited_row.action.event_schedule[parseInt(row[1])].seat_feature != "undefined")?edited_row.action.event_schedule[parseInt(row[1])].seat_feature:0));
|
|
http_data.append("date_feature", ((typeof edited_row.action.event_schedule[parseInt(row[1])].date_feature !="undefined")?edited_row.action.event_schedule[parseInt(row[1])].date_feature:0));
|
|
event_schedule_id = edited_row.action.event_schedule[parseInt(row[1])].event_schedule_id;
|
|
} else {
|
|
var edited_row = (events.get_vars().event_schedule_list)[0].row(parseInt(row)).data(),
|
|
seat_feature = $('input.seat_feature:visible:checked').val(),
|
|
date_feature = $('input.date_feature:visible:checked').val();
|
|
http_data.append("avl_seats", edited_row.action.event_schedule.avl_seats);
|
|
http_data.append("rem_seats", edited_row.action.event_schedule.rem_seats);
|
|
http_data.append("avl_wl_seats", edited_row.action.event_schedule.avl_wl_seats);
|
|
http_data.append("rem_wl_seats", edited_row.action.event_schedule.rem_wl_seats);
|
|
http_data.append("seat_feature", ((typeof seat_feature !="undefined" && seat_feature!=null && seat_feature!="")?seat_feature:0));
|
|
http_data.append("date_feature", ((typeof date_feature !="undefined" && date_feature!=null && date_feature!="")?date_feature:0));
|
|
try {
|
|
event_schedule_id = edited_row.event_schedule_id;
|
|
} catch (e) {
|
|
event_schedule_id = null;
|
|
} finally {
|
|
event_schedule_id = edited_row.event_schedule_id;
|
|
}
|
|
}
|
|
return { "http_data" : http_data, "event_schedule_id" : event_schedule_id };
|
|
},
|
|
|
|
"add" : function() {
|
|
var eventForm = event_schedule.getForm();
|
|
var event_id = (eventForm.obj).data("event_id");
|
|
var http_data = new FormData($("form#event_schedule_form")[0]);
|
|
http_data = event_schedule.model.action.server.clean_dates(http_data);
|
|
// Lets append event_id: for Paid Event
|
|
http_data.append("event_id", event_id);
|
|
var http_result = events.server.request("add", "add_event_schedule", http_data, event_id);
|
|
http_result.success(function(result){
|
|
if(app.isalive(result)) {
|
|
if (result.mtype == "success") {
|
|
// hide modal dialog after editing event date
|
|
$(".event_schedule_form").modal("hide");
|
|
events.server.reset("add", result);
|
|
//then, reload grid
|
|
event_schedule.grid.reload("editEvent");
|
|
} else {
|
|
if (result.mdetail) {
|
|
var x = 0;
|
|
$.map(result.mdetail, function (input, i) {
|
|
app._form._populate_field_error(input.field, input.message, x);
|
|
x++;
|
|
});
|
|
events._progress_bar._action(".upload_progress","hide");
|
|
}
|
|
}
|
|
}
|
|
}).error(function(xhr){
|
|
console.log(xhr);
|
|
events._progress_bar._action(".upload_progress","hide");
|
|
});
|
|
},
|
|
|
|
"update" : function(row) {
|
|
var data = event_schedule.model.action.server.get_row_data(row);
|
|
// Lets append event_id: for Paid Event
|
|
var event_id = (event_schedule.getForm().obj).data("event_id");
|
|
event_id = event_id ? event_id : $("table#event_schedule_table tr#ev"+data.event_schedule_id).data('event-id');
|
|
data.http_data.append("event_id", event_id);
|
|
var http_result = events.server.request("edit", "update_event_schedule", data.http_data, data.event_schedule_id);
|
|
http_result.success(function(result) {
|
|
if (app.isalive(result)) {
|
|
if(result.mtype == "success") {
|
|
// initiate resend email if previous event_status is cancel then reopened
|
|
prev_status = $('input#old_event_status').val();
|
|
new_status = $('select#event_status').val();
|
|
if (prev_status !== 'CANCEL' && new_status === 'CANCEL') {
|
|
$.get(app.get_vars().baseurl+"send_event_cancellation_email/"+data.event_schedule_id,
|
|
function(message, status) {
|
|
console.log(message);
|
|
});
|
|
}
|
|
|
|
if (row.toString().indexOf("_") <= -1) {
|
|
//then, reload grid
|
|
event_schedule.grid.reload("editEvent");
|
|
} else {
|
|
$("#events_list").DataTable().ajax.reload(null, false);
|
|
}
|
|
|
|
events.server.reset("edit", result);
|
|
// hide modal dialog after editing event date
|
|
$(".event_schedule_form").modal("hide");
|
|
} else {
|
|
if (result.mdetail) {
|
|
var x = 0;
|
|
$.map(result.mdetail, function (input, i) {
|
|
app._form._populate_field_error(input.field, input.message, x);
|
|
x++;
|
|
});
|
|
events._progress_bar._action(".upload_progress","hide");
|
|
}
|
|
}
|
|
}
|
|
}).error(function(xhr) {
|
|
console.log(xhr);
|
|
events._progress_bar._action(".upload_progress","hide");
|
|
});
|
|
},
|
|
|
|
"delete" : function(row) {
|
|
var edited_row = (events.get_vars().event_schedule_list)[0].row(row).data();
|
|
var http_result = events.server.request("delete", "delete_event_schedule", new FormData(), edited_row.event_schedule_id);
|
|
http_result.success(function(result){
|
|
if(app.isalive(result)) {
|
|
events.server.reset("delete", result);
|
|
//then, reload grid
|
|
event_schedule.grid.reload("editEvent");
|
|
}
|
|
}).error(function(xhr){
|
|
console.log(xhr);
|
|
});
|
|
}
|
|
},
|
|
/*
|
|
initialize schedule form on edit event modal
|
|
populate field values and set corresponding restrictions
|
|
*/
|
|
"init_schedule_form" : function(event_data) {
|
|
//render date feature
|
|
event_category.set_date_feature(event_data['event_category']);
|
|
|
|
if(parseInt(event_data.use_different_address_per_date) > 0){
|
|
$(".event-address").val("").prop('disabled', true);
|
|
}
|
|
|
|
$('input.date_feature[value="'+event_data.date_feature+'"]').prop("checked", true).change();
|
|
if (event_data.date_feature ==2 ) {
|
|
//disable input.date_feature
|
|
$("#single-dated-event").attr("disabled", true);
|
|
|
|
//render seat feature
|
|
$('input.seat_feature[value="'+event_data.seat_feature+'"]').prop("checked", true).change();
|
|
if(event_data.seat_feature == 2) {
|
|
$("#total_combined_seat").val(event_data.remaining_combined_seat)
|
|
.data("avl_com_seats", event_data.total_combined_seat)
|
|
.data("rem_com_seats", event_data.remaining_combined_seat);
|
|
}
|
|
//render reservation settings
|
|
$('input[name="is_multiple_reservation"]').prop("checked", (parseInt(event_data.is_multiple_reservation) <=0)?false:true);
|
|
$('input[name="is_multiple_waitlist_reservation"]').prop("checked", (parseInt(event_data.is_multiple_waitlist_reservation) <= 0)?false:true);
|
|
$('input[name="use_different_address_per_date"]').prop("checked", (parseInt(event_data.use_different_address_per_date) <= 0)?false:true);
|
|
} else {
|
|
$("#multiple_date_form .help-block").hide();
|
|
event_schedule.reset.multidate_fields();
|
|
$("#multiple_date_form").hide('slow');
|
|
}
|
|
event_schedule.grid.init("editEvent");
|
|
}
|
|
}
|
|
},
|
|
|
|
"grid" : {
|
|
|
|
init : function(action){
|
|
try{
|
|
//check datatable is initialzed
|
|
var table;
|
|
if (action == "addEvent") {
|
|
table = $("#event_schedule_list").DataTable($.extend(event_schedule.grid.opt(action), event_schedule.grid.extra(action))).clear();
|
|
} else{
|
|
var result = localStorage.getItem("event_schedule");
|
|
if(result != null){
|
|
table = $("#event_schedule_list").DataTable().ajax.url(app.get_vars().baseurl + "list_event_schedule/" + ((events.get_vars().event_id !=null && typeof events.get_vars().event_id != "undefined" )?events.get_vars().event_id:0)).load();
|
|
}else{
|
|
localStorage.setItem("event_schedule", "initialzed");
|
|
table = $("#event_schedule_list").DataTable($.extend(event_schedule.grid.opt(action), event_schedule.grid.extra(action)));
|
|
}
|
|
}
|
|
event_schedule.grid.init_vars(table, action);
|
|
}catch(e){
|
|
console.log(e);
|
|
}
|
|
},
|
|
"init_vars" : function(table, action){
|
|
//set table instance in the global variable along with the action [addEvent/editEvent]
|
|
events.set_vars({"event_schedule_list": [(typeof table!="undefined")?table:{}, action]});
|
|
},
|
|
reload : function(action){
|
|
// this fills up the event_schedule_list table, the one in the modal
|
|
var table = $("#event_schedule_list").DataTable();
|
|
if (action == "addEvent") {
|
|
var eventForm = event_schedule.getForm();
|
|
if((eventForm.dates).length != 0) {
|
|
table.clear().draw();
|
|
$.map(eventForm.dates, function (value, idx) {
|
|
if(value.event_status) {
|
|
if (value.total_available_seat) {
|
|
value.total_available_remaining_seat = value.total_available_seat + " / "+ value.total_available_seat;
|
|
} else {
|
|
var seatt = $('#total_combined_seat').val();
|
|
seatt = (seatt)? seatt:0;
|
|
value.total_available_remaining_seat = seatt + " / "+ seatt;
|
|
}
|
|
table.row.add(value).columns.adjust().draw();
|
|
} else {
|
|
delete eventForm.dates[idx];
|
|
}
|
|
});
|
|
|
|
// Update store, this is one solution to duplicate entry after saving data in event date form
|
|
(eventForm.obj).data("event_schedule", eventForm.dates);
|
|
} else {;
|
|
table.clear().columns.adjust().draw();
|
|
}
|
|
} else{
|
|
table.ajax.reload(null, false);
|
|
}
|
|
|
|
Helper.dtable.console_alert("table#event_schedule_list", function(err){
|
|
console.log(err);
|
|
});
|
|
},
|
|
validate_date_feature : function(){
|
|
var tableCount = $("#event_schedule_list").DataTable().data().count();
|
|
if( tableCount > 0 ){
|
|
app._notify("warning", "You must delete all the date before editing this event to single date");
|
|
}
|
|
},
|
|
"opt" : function(action){
|
|
const eventCategory = $("form#eventForm").data('event_category');
|
|
return {
|
|
"autoWidth": false,
|
|
"dom": '<"toolbar">',
|
|
"destroy": true,
|
|
"responsive": true,
|
|
"orderable": false, //Initial no order.
|
|
"oLanguage": fr_onload_lang.oLanguage,
|
|
"columns": event_category.event_modal_sched_grid(eventCategory),
|
|
"columnDefs": event_category.event_modal_sched_grid_responsive_cols(eventCategory),
|
|
"drawCallback": function( settings ) {
|
|
var tableCount = $("#event_schedule_list").DataTable().data().count();
|
|
var date_feature = $('input[type=radio][name="date_feature"]:checked').val(),
|
|
btnDisabled="", btnClick="onclick='event_schedule.modal.init(\"add\", -1);'";
|
|
if(date_feature == "1" && tableCount > 0) {
|
|
btnDisabled="disabled='disabled'";
|
|
btnClick="";
|
|
}
|
|
|
|
// Check if user is allowed to add event schedule
|
|
if (authorize(PAGE_CODE['events'], PRIVS[PAGE_CODE['events']]['sched_add'])) {
|
|
$("#event_schedule_list_wrapper div.toolbar")
|
|
.html('<span class="btn btn-primary btn-sm" id="set_default_config" '+btnDisabled+' '+btnClick+'>'
|
|
+app.get_vars().events.btn.add_event_date+'</span>');
|
|
}
|
|
|
|
$("#event_schedule_list").DataTable().columns.adjust();
|
|
},
|
|
initComplete: function(){
|
|
//set table instance in the global variable along with the action [addEvent/editEvent]
|
|
event_schedule.grid.init_vars($("#event_schedule_list").DataTable(), action);
|
|
}
|
|
};
|
|
},
|
|
|
|
"extra" : function(action){
|
|
if(action == "editEvent"){
|
|
if (action != 'add') {
|
|
if ($('#cancel-option').length===0) {
|
|
$('select[name=event_status]').append('<option id="cancel-option" value="CANCEL">Annulé</option>');
|
|
}
|
|
} else {
|
|
$('#cancel-option').remove();
|
|
}
|
|
return {
|
|
"serverSide": true, //Feature control DataTables' server-side processing mode.
|
|
"ajax": { // Load data for the table's content from an Ajax source
|
|
"url": app.get_vars().baseurl + "list_event_schedule/" + ((events.get_vars().event_id !=null && typeof events.get_vars().event_id != "undefined" )?events.get_vars().event_id:0),
|
|
"type": "post"
|
|
}
|
|
};
|
|
} else {
|
|
return {data : event_schedule.getForm().data};
|
|
}
|
|
},
|
|
|
|
"action" : function(data, type, full, meta){
|
|
var disableBtn = (parseInt(full.back_office_status) != 4 && parseInt(full.back_office_status) >0 && moment() < moment(full.start_date_time, "DD/MM/YYYY HH[h]mm") )?false:true;
|
|
var table = (events.get_vars().event_schedule_list),
|
|
actions = {}, action_btns = "";
|
|
const event_category = $("form#eventForm").data('event_category');
|
|
|
|
switch(table[1]){
|
|
case "addEvent" :
|
|
actions.assign_tmpl = "";
|
|
actions.edit = "event_schedule.modal.init(\'edit\',"+meta.row+")";
|
|
actions.delete = "event_schedule.modal.delete_confirm(\'client\', "+meta.row+")";
|
|
break;
|
|
case "editEvent" :
|
|
actions.assign_tmpl = "assign_email_template.email_template_modal("+events.get_vars().event_id+","+full.event_schedule_id+",\'schedule\')";
|
|
actions.edit = "event_schedule.modal.init(\'edit\',"+meta.row+")";
|
|
actions.delete = "event_schedule.modal.delete_confirm(\'server\', "+meta.row+")";
|
|
break;
|
|
default : ""
|
|
break;
|
|
};
|
|
|
|
if (authorize(PAGE_CODE['events'], PRIVS[PAGE_CODE['events']]['sched_email_template_btn']) && (event_category && event_category != 'ONLINE_EVENT')) {
|
|
action_btns +=app.grid.create_action_btn(app.get_vars()._app.action._email, "envelope", "success", ((disableBtn)?"":actions.assign_tmpl), ((disableBtn)?"disabled":""));
|
|
}
|
|
if (authorize(PAGE_CODE['events'], PRIVS[PAGE_CODE['events']]['sched_edit'])) {
|
|
action_btns +=app.grid.create_action_btn(app.get_vars()._app.action._edit, "pencil", "success", actions.edit);
|
|
}
|
|
if (authorize(PAGE_CODE['events'], PRIVS[PAGE_CODE['events']]['sched_delete'])) {
|
|
action_btns +=app.grid.create_action_btn(app.get_vars()._app.action._delete, "trash", "danger", actions.delete);
|
|
}
|
|
return action_btns;
|
|
}
|
|
},
|
|
|
|
"modal" : {
|
|
/*this modal runs only when adding and editing event information
|
|
add event schedules and edit event schedules through event creation or edit event modal
|
|
*/
|
|
"init" : function(action, row = -1, use_address = 0){
|
|
// Event category to know which fields will be shown / hidden
|
|
event_category.check_event_category(row);
|
|
|
|
// Get current moderation SETTINGS
|
|
if (action == "add") {
|
|
$('select#event_status>option').prop( "disabled", false );
|
|
}
|
|
app.modal.focusout_solution("on");
|
|
var form = $("#event_schedule_form");
|
|
form.trigger("reset");
|
|
var dialog = bootbox.dialog({
|
|
"title": (action == "add")?app.get_vars().events.title.add_new_event_date:app.get_vars().events.title.edit_event_date,
|
|
"className" : "my-modal-with-xmedium event_schedule_form",
|
|
"message": form,
|
|
"backdrop": 'static',
|
|
"animate": true,
|
|
"show": false,
|
|
"buttons" : [
|
|
{
|
|
"label": app.get_vars()._app.btn._close,
|
|
"class": "btn btn-default",
|
|
"callback": function () {
|
|
}
|
|
}, {
|
|
"label": "Sauvegarder les modifications",
|
|
"class": "btn btn-success w-mb",
|
|
"callback": function () {
|
|
var new_total_available_seat = $('input#total_available_seat').val();
|
|
var event_statuss = $("select#event_status").val();
|
|
if (new_total_available_seat != old_total_available_seat && event_statuss == "FULL") {
|
|
event_schedule.validate.check_seats(action, event_schedule.modal.action(action, row,'validate'), row);
|
|
} else {
|
|
event_schedule.validate.init(action, event_schedule.modal.action(action, row,'validate'), row);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
]
|
|
}).on('shown.bs.modal', function(){
|
|
// always reset current event moderation settings
|
|
cur_evsched_mod_sett = [];
|
|
|
|
event_schedule.moderation.evsched_is_covered_by_moderation(action, form.data('esid'));
|
|
form.find(".form-control:visible:enabled:not([readonly]):first").focus();
|
|
if (action != 'add') {
|
|
if ($('#cancel-option').length===0) {
|
|
$('select[name=event_status]').append('<option id="cancel-option" value="CANCEL">Annulé</option>');
|
|
}
|
|
} else {
|
|
$('select#event_status, select#back_office_status').prop("selectedIndex", 0).change()
|
|
$('#cancel-option').remove();
|
|
}
|
|
activate_cancel_confirmation = true;
|
|
}).on('hide.bs.modal', function(e) {
|
|
activate_cancel_confirmation = false;
|
|
app._form._resetFormValidation("#event_schedule_form");
|
|
app._form._reset(this);
|
|
event_category.resetFields();
|
|
form.removeData('event_category');
|
|
form.removeData('current-editing-row');
|
|
$("#event_schedule_list").DataTable().columns.adjust();
|
|
try{
|
|
if(typeof $('.datetimepicker').data('DateTimePicker') != "undefined"){
|
|
event_schedule.datetimepicker.destroy()
|
|
}
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
$("#total_available_seat").prop("disabled", false);
|
|
$(this).data('bs.modal', null);
|
|
$(this).off('hidden.bs.modal');
|
|
})
|
|
.modal('show') // show before init
|
|
.init(function(){
|
|
event_schedule.datetimepicker.init();
|
|
form.removeData("esid");
|
|
event_schedule.modal.action(action, row,'');
|
|
event_schedule.validate.seat_feature();
|
|
event_schedule.validate.use_diffirent_address(parseInt(use_address));
|
|
});
|
|
},
|
|
|
|
"delete_confirm" : function(action, row){
|
|
app.modal.confirm_box({
|
|
"message" : app.get_vars().events.cma_msg.delete_event_schedule+" <b>[#"+(row+1)+"]</b> ?<br/><br><span class='label label-danger' style='font-size: 12px;'>"+app.get_vars()._app.cma_msg.note+"</span>",
|
|
"_continue" : function() {
|
|
(action=="server")
|
|
? event_schedule.model.action.server.delete(row)
|
|
: event_schedule.model.action.client.delete(row)
|
|
},
|
|
"className" : "delete_confirm_box"
|
|
});
|
|
},
|
|
|
|
"action" : function(action, row, validate){
|
|
/* this condition tells if the action to be made falls under :
|
|
- adding new event and adding new data in it
|
|
- or editing event data
|
|
*/
|
|
var table = events.get_vars().event_schedule_list,
|
|
check_table = function(table){
|
|
if(typeof table !="undefined" && table != null){
|
|
if(table.length > 0){
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
checker = ( check_table(table) )
|
|
? ((validate!="")
|
|
? table[1]+"_"+validate
|
|
: table[1]+"_"+action
|
|
)
|
|
: ((validate!="") //this explicit definition is for editing event schedule directly from main event table
|
|
? "editSchedule_"+validate
|
|
: "editSchedule_"+action
|
|
);
|
|
evsched_checker = checker;
|
|
switch(checker){
|
|
/*
|
|
This is when user is adding new event.
|
|
Event dates are stored in temporary repository
|
|
*/
|
|
case "addEvent_validate" : // when the action is adding new event
|
|
return {
|
|
"add" : event_schedule.model.action.client.add,
|
|
"edit" : event_schedule.model.action.client.update.schedule,
|
|
};
|
|
break;
|
|
case "addEvent_edit" : event_schedule.model.action.client.update.render_data(row);
|
|
break;
|
|
/*
|
|
This is when user is editing an event.
|
|
Event dates are stored directly on the server
|
|
*/
|
|
case "editEvent_validate" :
|
|
return {
|
|
"add" : event_schedule.model.action.server.add,
|
|
"edit" : event_schedule.model.action.server.update,
|
|
};
|
|
break;
|
|
case "editEvent_edit" :
|
|
event_schedule.model.action.client.update.render_data(row);
|
|
break;
|
|
/*
|
|
definition is for editing event schedule directly from main event table
|
|
*/
|
|
case "editSchedule_validate" :
|
|
return {
|
|
"edit" : event_schedule.model.action.server.update,
|
|
};
|
|
break;
|
|
case "editSchedule_editSchedule" :
|
|
event_schedule.model.action.client.update.render_data_schedule(row);
|
|
break;
|
|
|
|
default : ""
|
|
break;
|
|
}; //end of main switch
|
|
|
|
return false;
|
|
},
|
|
|
|
"pseat_feature" : function(seat_feature){
|
|
app.modal.confirm_box({
|
|
"message" : (seat_feature == 1)?"Available seat per date will be set to 0" : "Available seat set per date will be disregarded",
|
|
"_continue" : function() {
|
|
$("#total_combined_seat").val("").prop('disabled', ((seat_feature==2)?false:true));
|
|
var table = events.get_vars().event_schedule_list;
|
|
if(table[1] == "addEvent")
|
|
event_schedule.model.action.client.change_seat_feature(seat_feature);
|
|
else
|
|
event_schedule.model.action.server.change_seat_feature(seat_feature);
|
|
},
|
|
"_close" : function(){
|
|
if(seat_feature == 2) { //combine
|
|
$('input.seat_feature[value="1"]').prop("checked", true);
|
|
} else { //per date
|
|
$('input.seat_feature[value="2"]').prop("checked", true);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
"moderation" : {
|
|
"init_cur_mod_settings" : function(){
|
|
// get mod settings for validation
|
|
$.ajax({
|
|
url: app.get_vars().baseurl + 'getLatestModSettings/3/1',
|
|
async: false
|
|
})
|
|
.done(function(data) {
|
|
current_mod_settings = data;
|
|
})
|
|
.fail(function() {
|
|
})
|
|
.always(function() {
|
|
});
|
|
},
|
|
"init_evsched_mod_settings" : function(event_schedule_id){
|
|
// get mod settings for validation
|
|
$.ajax({
|
|
url: app.get_vars().baseurl + `getEvSchedModSettings/${event_schedule_id}`,
|
|
async: false
|
|
})
|
|
.done(function(data) {
|
|
cur_evsched_mod_sett = data.evsched_settings;
|
|
})
|
|
.fail(function() {
|
|
})
|
|
.always(function() {
|
|
});
|
|
},
|
|
"toggle_evsched_mod_btn_status" : function(category, status){
|
|
switch (category) {
|
|
case 'mod_stat':
|
|
switch (status) {
|
|
case 'on':
|
|
case 'off':
|
|
$('input#moderationSwitchBtn').prop('checked', status == 'on'? true:false);
|
|
// $('input#moderationSwitchBtn').trigger('change');
|
|
$('input#moderationSwitchBtn').trigger('change');
|
|
$('#moderationFormCollapse').collapse(status == 'on'? 'show':'hide');
|
|
$('input#moderationSwitchBtn').removeAttr('disabled');
|
|
break;
|
|
case 'deactivate':
|
|
$('input#moderationSwitchBtn').prop('checked', false);
|
|
// $('input#moderationSwitchBtn').trigger('change');
|
|
$('input#moderationSwitchBtn').trigger('change');
|
|
$('#moderationFormCollapse').collapse('hide');
|
|
$('input#moderationSwitchBtn').attr('disabled', 'disabled');
|
|
break;
|
|
default:
|
|
|
|
}
|
|
break;
|
|
case 'flex_mod_stat':
|
|
switch (status) {
|
|
case 'on':
|
|
case 'off':
|
|
$('input#moderationSwitchFlexibleBtn').prop('checked',
|
|
(status == 'on'? true: false)
|
|
);
|
|
$('input#moderationSwitchFlexibleBtn').trigger('change');
|
|
$('#moderationFlexibleCollapse').collapse(
|
|
(status == 'on'? 'show': 'hide')
|
|
);
|
|
break;
|
|
case 'deactivate':
|
|
$('input#moderationSwitchFlexibleBtn').prop('checked', false);
|
|
$('input#moderationSwitchFlexibleBtn').trigger('change');
|
|
$('input#moderationSwitchFlexibleBtn').attr('disabled','disabled');
|
|
$('#moderationFlexibleCollapse').collapse('hide');
|
|
break;
|
|
default:
|
|
|
|
}
|
|
break;
|
|
default:
|
|
|
|
}
|
|
},
|
|
"apply_evsched_mod_settings" : function(evsched_mod_sett){
|
|
if (evsched_mod_sett) {
|
|
$('input#moderationSwitchBtn').prop('checked',
|
|
parseInt(evsched_mod_sett.mod_stat)? true: false);
|
|
$('#moderationFormCollapse').collapse(
|
|
parseInt(evsched_mod_sett.mod_stat)? 'show': 'hide'
|
|
);
|
|
|
|
$('input#moderationSwitchFlexibleBtn').prop('checked',
|
|
parseInt(evsched_mod_sett.flex_mod_stat)? true: false);
|
|
$('#moderationFlexibleCollapse').collapse(
|
|
parseInt(evsched_mod_sett.flex_mod_stat)? 'show': 'hide'
|
|
);
|
|
|
|
$('input#flex_no_of_hours').val(
|
|
((evsched_mod_sett.hrs_bef_event_closes)? parseInt(evsched_mod_sett.hrs_bef_event_closes): 0)
|
|
);
|
|
$('input#flex_places_to_lift_moderation').val(
|
|
((evsched_mod_sett.places_volume)? parseInt(evsched_mod_sett.places_volume): 0)
|
|
);
|
|
|
|
$('input#moderationSwitchBtn').trigger('change');
|
|
$('input#moderationSwitchFlexibleBtn').trigger('change');
|
|
}
|
|
},
|
|
"evsched_is_covered_by_moderation" : function(action, event_schedule_id){
|
|
if (event_schedule_id) {
|
|
event_schedule.moderation.init_evsched_mod_settings(event_schedule_id);
|
|
}
|
|
var per_ev_cat_mod_is_on = parseInt(current_mod_settings.main_settings['event_cat_stat']);
|
|
var per_ev_loc_mod_is_on = parseInt(current_mod_settings.main_settings['event_loc_stat']);
|
|
var per_ev_month_mod_is_on = parseInt(current_mod_settings.main_settings['event_month_stat']);
|
|
var per_flex_mod_is_on = parseInt(current_mod_settings.main_settings['flex_mod_stat']);
|
|
|
|
covered_cat_list = [], in_covered_cat_list = false;
|
|
covered_loc_list = [], in_covered_loc_list = false;
|
|
var covered_month_list = [], in_covered_month_list = false;
|
|
var cur_evsched_sett = {};
|
|
var evsched_has_cursett = false;
|
|
var evsched_qualifies_mod = false;
|
|
var evsched_is_old_event = false;
|
|
|
|
start_date_time_ev_listener = false;
|
|
/*
|
|
* If flexible moderation is turned on
|
|
* Set default values
|
|
*/
|
|
if (per_flex_mod_is_on) {
|
|
$('input#flex_no_of_hours').val(
|
|
current_mod_settings.sub_settings['hrs_bef_event_closes'] ?
|
|
current_mod_settings.sub_settings['hrs_bef_event_closes']: 0
|
|
);
|
|
$('input#flex_places_to_lift_moderation').val(
|
|
current_mod_settings.sub_settings['places_volume'] ?
|
|
current_mod_settings.sub_settings['places_volume']: 0
|
|
);
|
|
}
|
|
/*
|
|
* Check if moderation settings are turned on or off
|
|
*/
|
|
if (parseInt(current_mod_settings.main_settings['gm_mod_stat']) != 1) {
|
|
$('input#moderationSwitchBtn').prop('checked', false);
|
|
$('input#moderationSwitchBtn').attr('disabled', 'disabled');
|
|
} else {
|
|
switch (action) {
|
|
/*
|
|
* These are done from the event modal
|
|
*/
|
|
case 'editSchedule':
|
|
/*
|
|
* Get current moderation settings
|
|
* Apply and retrieve moderation settings when in direct edit event schedule modal
|
|
* If there's no current mod settings, check if event qualifies in moderation
|
|
*/
|
|
evsched_is_old_event = true;
|
|
if (cur_evsched_mod_sett.length !=0) {
|
|
evsched_has_cursett = true;
|
|
event_schedule.moderation.apply_evsched_mod_settings(cur_evsched_mod_sett);
|
|
} else {
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('mod_stat', 'off');
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('flex_mod_stat', 'off');
|
|
// $.ajax({
|
|
// url: app.get_vars().baseurl + `checkIfEventQualifiesInModeration/${event_schedule_id}`,
|
|
// async: false
|
|
// })
|
|
// .done(function(data) {
|
|
// if (data.qualifies) {
|
|
// evsched_qualifies_mod = true;
|
|
// // event_schedule.moderation.toggle_evsched_mod_btn_status('mod_stat', 'on');
|
|
// } else {
|
|
// evsched_qualifies_mod = false;
|
|
// event_schedule.moderation.toggle_evsched_mod_btn_status('mod_stat', 'off');
|
|
// event_schedule.moderation.toggle_evsched_mod_btn_status('flex_mod_stat', 'off');
|
|
// }
|
|
// })
|
|
// .fail(function() {
|
|
// })
|
|
// .always(function() {
|
|
// });
|
|
}
|
|
break;
|
|
case 'add':
|
|
/*
|
|
* Add event listerner for start date time if action is add and moderation per month is on
|
|
*/
|
|
if (!start_date_time_ev_listener && per_ev_month_mod_is_on) {
|
|
start_date_time_ev_listener = $("#start_date_time").on('focusout', function(e){
|
|
event_schedule.moderation.evsched_is_covered_by_moderation('all', null);
|
|
});
|
|
}
|
|
break;
|
|
case 'edit':
|
|
/*
|
|
* Get current moderation settings
|
|
*/
|
|
evsched_is_old_event = true;
|
|
if (evsched_checker == 'addEvent_edit') {
|
|
evsched_has_cursett = true;
|
|
} else {
|
|
if (cur_evsched_mod_sett.length != 0) {
|
|
evsched_has_cursett = true;
|
|
event_schedule.moderation.apply_evsched_mod_settings(cur_evsched_mod_sett);
|
|
} else {
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('mod_stat', 'off');
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('flex_mod_stat', 'off');
|
|
}
|
|
}
|
|
default:
|
|
}
|
|
|
|
/*
|
|
* Check if event category/type falls under moderation
|
|
* If the event is newly created and falls under moderation activate auto on
|
|
*/
|
|
if (!evsched_has_cursett && !evsched_is_old_event) {
|
|
event_cat = $('#eventForm select#event_type_id').val();
|
|
/*
|
|
* If per moderation per event category is turned on and there are categories
|
|
* get category/event type and location list that are covered by moderation and check if event is covered
|
|
*/
|
|
if (current_mod_settings.sub_settings.event_cats && per_ev_cat_mod_is_on) {
|
|
covered_cat_list = current_mod_settings.sub_settings.event_cats.split(',');
|
|
$.each(covered_cat_list, function(key, value) {
|
|
if (value == event_cat) {
|
|
in_covered_cat_list = true;
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
|
|
/*
|
|
* If moderation per event location is turned on
|
|
* Check if event location falls under moderation
|
|
* Check if use different address per date or not
|
|
*/
|
|
use_diff_address_pdate = $('input#use_different_address_per_date').prop('checked');
|
|
if (!use_diff_address_pdate) {
|
|
event_loc = $('#eventForm select#city_location').val();
|
|
} else {
|
|
event_loc = $('#event_schedule_form select#city_location').val();
|
|
}
|
|
if (current_mod_settings.sub_settings.locations && per_ev_loc_mod_is_on) {
|
|
covered_loc_list = current_mod_settings.sub_settings.locations.split(',');
|
|
$.each(covered_loc_list, function(key, value) {
|
|
// console.log("event_location", value , event_loc)
|
|
if (value == event_loc) {
|
|
in_covered_loc_list = true;
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
|
|
/*
|
|
* If moderation per event month is turned on
|
|
* Check if event start date month falls under moderation
|
|
*/
|
|
event_month = $("#start_date_time").val()
|
|
if (event_month && per_ev_month_mod_is_on) {
|
|
event_month = parseInt(((event_month.match(/([.\-/ ])\d{2}\1/))[0]).replace(/\//g,''));
|
|
// get month covered by moderation
|
|
if (current_mod_settings.sub_settings.months) {
|
|
covered_month_list = current_mod_settings.sub_settings.months.split(',');
|
|
$.each(covered_month_list, function(key, value) {
|
|
if (value == event_month) {
|
|
in_covered_month_list = true;
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* $matchCatAndLoc - This will check if..
|
|
* - Location = 'PARIS'
|
|
* - Category = "CONCERT"
|
|
* Then 'mod_stat' will switch 'on'
|
|
*/
|
|
|
|
/*
|
|
* If moderation per event category is turned off in moderation settings force true
|
|
* This setting must not be considered in auto on since it's turned off
|
|
*/
|
|
if (!per_ev_cat_mod_is_on) {
|
|
in_covered_cat_list = true;
|
|
}
|
|
/*
|
|
* If moderation per event location is turned off in moderation settings force true
|
|
* This setting must not be considered in auto on since it's turned off
|
|
*/
|
|
if (!per_ev_loc_mod_is_on) {
|
|
in_covered_loc_list = true;
|
|
}
|
|
/*
|
|
* If moderation per event month is turned off in moderation settings force true
|
|
* This setting must not be considered in auto on since it's turned off
|
|
*/
|
|
if (!per_ev_month_mod_is_on) {
|
|
in_covered_month_list = true;
|
|
}
|
|
|
|
/*
|
|
* If all per category, location, and month is turned off in moderation settings all must be false
|
|
* Means auto on must be turned off
|
|
*/
|
|
if (
|
|
!per_ev_cat_mod_is_on &&
|
|
!per_ev_loc_mod_is_on &&
|
|
!per_ev_month_mod_is_on
|
|
) {
|
|
in_covered_cat_list = false;
|
|
in_covered_loc_list = false;
|
|
in_covered_month_list = false;
|
|
}
|
|
$matchCatLocMonth = (in_covered_cat_list && in_covered_loc_list && in_covered_month_list);
|
|
// check if event is qualified for mod settings
|
|
if ($matchCatLocMonth) {
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('mod_stat', 'on');
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('flex_mod_stat', 'off');
|
|
if (!per_flex_mod_is_on) {
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('flex_mod_stat', 'deactivate');
|
|
}
|
|
} else {
|
|
// console.log('asd');
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('mod_stat', 'off');
|
|
if (!per_flex_mod_is_on) {
|
|
event_schedule.moderation.toggle_evsched_mod_btn_status('flex_mod_stat', 'deactivate');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Cache city_location select option
|
|
*/
|
|
_multipleAddress = $('#event_schedule_form select#city_location');
|
|
|
|
/**
|
|
* Recall onchange and re-toggle two switch button 'Activer la Modération'
|
|
* and 'Modération Flexible' if use different address
|
|
*/
|
|
_multipleAddress.change(function(){
|
|
event_schedule.moderation.evsched_is_covered_by_moderation('all', null);
|
|
})
|
|
|
|
},
|
|
},
|
|
|
|
"validate" : {
|
|
"check_seats" : function(action, callback, row){
|
|
var change_msg = "Attention : Vous venez de rajouter des places alors que la programmation est déjà complète. Souhaitez-vous ré-ouvrir cette programmation (statut: Disponible) afin que les abonnés puissent réserver les nouvelles places ?"
|
|
|
|
var dialog = bootbox.dialog({
|
|
"title": 'Mise à jour du statut de l\'événement?',
|
|
"className" : "event_schedule_form",
|
|
"message": change_msg,
|
|
"size": 'medium',
|
|
"buttons" : [
|
|
{
|
|
"label": app.get_vars()._app.btn._close,
|
|
"class": "btn btn-default",
|
|
"callback": function () {}
|
|
}, {
|
|
"label": 'Non',
|
|
"class": "btn btn-default",
|
|
"callback": function () {
|
|
this.modal('hide');
|
|
event_schedule.validate.init(action, callback, row);
|
|
return false;
|
|
}
|
|
}, {
|
|
"label": 'Oui',
|
|
"class": "btn btn-success w-mb",
|
|
"callback": function () {
|
|
this.modal('hide');
|
|
$('select#event_status').find('option[value="AVAILABLE"]').prop("selected", true);
|
|
event_schedule.validate.init(action, callback, row);
|
|
return false;
|
|
}
|
|
}
|
|
]
|
|
})
|
|
},
|
|
"init" : function(action, callback, row){
|
|
$("form#event_schedule_form").data('current-editing-row', row);
|
|
var event_statuss = $("select#event_status").val();
|
|
var sizee ='small';
|
|
var change_msg = (action == "add")
|
|
? app.get_vars().events.cma_msg.add_new_event
|
|
: app.get_vars().events.cma_msg.save_changes;
|
|
|
|
if (event_statuss == 'CANCEL') {
|
|
prev_ev_status = $('option[value="'+prev_event_status+'"]').html();
|
|
var change_msg = "Êtes-vous sûr de vouloir annuler cet événement ? <br />"
|
|
+ "Attention, une fois la statut \"Annulé\" confirmé, cette action est irréversible."
|
|
sizee = 'medium';
|
|
}
|
|
var options = {
|
|
"tab" : "#home",
|
|
boot_box: {
|
|
"message": change_msg,
|
|
size: sizee,
|
|
"_continue": function () {
|
|
var _form_ = $("form#event_schedule_form");
|
|
(action == "add")
|
|
? callback.add(_form_)
|
|
: callback.edit(row)
|
|
}
|
|
},
|
|
"validation" : {
|
|
"custom" : {
|
|
/**
|
|
* TRUE = Valid
|
|
* FALSE = Invalid / Error
|
|
*/
|
|
"rules": {
|
|
"min_seat_per_subscriber": {
|
|
"_fnc": function (value, element, options) {
|
|
var val= value.trim();
|
|
if(val != "") {
|
|
var edit_form = $("form#event_schedule_form").data("esid");
|
|
if(typeof (edit_form) == "undefined"){
|
|
if(isNaN(parseInt(val))){
|
|
return false;
|
|
} else if(parseInt(val) <=0){
|
|
return false;
|
|
}
|
|
} else{
|
|
if(isNaN(parseInt(val))){
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
msg: "Saisir une valeur égale ou supérieure à 1."
|
|
},
|
|
"invalid_date": {
|
|
"_fnc": function (value, element, options) {
|
|
if(value.trim() != "") {
|
|
if (!moment(value, "DD/MM/YYYY HH[h]mm", false).isValid() && !moment(value, "D/MM/YYYY HH[h]mm", false).isValid()) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
return true;
|
|
},
|
|
msg: app.get_vars().events.val.invlaid_date
|
|
},
|
|
"total_available_seat": {
|
|
"_fnc": function (value, element, options) {
|
|
var is_not_valid = event_schedule.validate.check_bo_stat_on_save(element);
|
|
|
|
if(is_not_valid) {//if bo status >=1, means must undergo a validation
|
|
var seat_feature = $('input[type=radio][name="seat_feature"]:checked').val();
|
|
|
|
if(seat_feature != "2") {
|
|
if(value.trim() == "") {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
msg: "Ce champ est obligatoire."
|
|
},
|
|
"quota": {
|
|
"_fnc": function (value, element, options) {
|
|
var avl_seat = $("#total_available_seat");
|
|
avl_seat = ((avl_seat.val().trim() == "") ? 0 : parseInt(avl_seat.val().trim()));
|
|
if (avl_seat < parseInt(value.trim())) {
|
|
return false;
|
|
}
|
|
return true;
|
|
|
|
},
|
|
"msg": app.get_vars().events.val.invalid_rem_seat
|
|
},
|
|
"define_start_date": {
|
|
"_fnc": function (value, element, options) {
|
|
var t = $("#start_date_time").val().trim();
|
|
if(t != ""){
|
|
return false;
|
|
}
|
|
$(element).val("");
|
|
return false;
|
|
},
|
|
msg: app.get_vars().events.val.required_event_startdate
|
|
},
|
|
"check_valid_date" : {
|
|
"_fnc": function (value, element, options) {
|
|
var target = $(element).prop('id');
|
|
var start_date_time = event_schedule.datetimepicker.configure.get_date("start_date_time");
|
|
var end_date_time = event_schedule.datetimepicker.configure.get_date("end_date_time");
|
|
var reservation_start_date = event_schedule.datetimepicker.configure.get_date("reservation_start_date");
|
|
var reservation_end_date = event_schedule.datetimepicker.configure.get_date("reservation_end_date");
|
|
var date_now = moment();
|
|
var isvalid = true;
|
|
|
|
switch(target){
|
|
case "reservation_start_date" :
|
|
if((reservation_end_date != false && reservation_start_date != false) && ( reservation_end_date < reservation_start_date )){
|
|
isvalid = false;
|
|
} else if((reservation_start_date != false && start_date_time != false) && ( start_date_time < reservation_start_date )){
|
|
isvalid = false;
|
|
} else if((reservation_start_date != false && end_date_time != false) && ( end_date_time < reservation_start_date )){
|
|
isvalid = false;
|
|
} else if(reservation_start_date == false) {
|
|
isvalid = true;
|
|
}
|
|
break;
|
|
|
|
case "reservation_end_date" :
|
|
if((reservation_end_date != false && reservation_start_date != false) && ( reservation_end_date < reservation_start_date )){
|
|
isvalid = false;
|
|
} else if((reservation_end_date != false && start_date_time != false) && ( start_date_time < reservation_end_date )){
|
|
isvalid = false;
|
|
} else if((reservation_end_date != false && end_date_time != false) && ( end_date_time < reservation_end_date )){
|
|
isvalid = false;
|
|
} else if(reservation_end_date == false) {
|
|
isvalid = true;
|
|
}
|
|
break;
|
|
|
|
case "start_date_time" :
|
|
if((reservation_start_date != false && start_date_time != false) && ( start_date_time < reservation_start_date )){
|
|
isvalid = false;
|
|
}else if((reservation_end_date != false && start_date_time != false) && ( start_date_time < reservation_end_date )){
|
|
isvalid = false;
|
|
} else if((start_date_time != false && end_date_time != false) && ( end_date_time < start_date_time )){
|
|
isvalid = false;
|
|
} else if(start_date_time == false) {
|
|
isvalid = true;
|
|
}
|
|
break;
|
|
|
|
case "end_date_time" :
|
|
if((reservation_end_date != false && end_date_time != false) && ( end_date_time < reservation_end_date )){
|
|
isvalid = false;
|
|
} else if((reservation_start_date != false && end_date_time != false) && ( end_date_time < reservation_start_date )){
|
|
isvalid = false;
|
|
} else if((start_date_time != false && end_date_time != false) && ( end_date_time < start_date_time )){
|
|
isvalid = false;
|
|
} else if(end_date_time == false) {
|
|
isvalid = true;
|
|
}
|
|
break;
|
|
|
|
default :
|
|
break;
|
|
};
|
|
return isvalid;
|
|
},
|
|
msg: "Plage de dates non valide"
|
|
},
|
|
"duplicate_code_selection": {
|
|
"_fnc": function (value, element, options) {
|
|
const item_code= value.trim();
|
|
const edit_form = $("form#event_schedule_form");
|
|
if(item_code != "" && !edit_form.data("esid")) {
|
|
/**
|
|
* Check first if code collection exists in local data store
|
|
*/
|
|
const eventForm = event_schedule.getForm();
|
|
const eventDates = (eventForm.obj).data("event_schedule");
|
|
let noDuplicate = false;
|
|
|
|
if (eventDates) {
|
|
noDuplicate = event_schedule.model.action.client.validate_code_selection.from_data_store(item_code, edit_form.data('current-editing-row'));
|
|
}
|
|
return noDuplicate ? false : true;
|
|
}
|
|
return true;
|
|
},
|
|
msg: "Code selection already used by another event."
|
|
},
|
|
}
|
|
},
|
|
"form_id": "form#event_schedule_form",
|
|
"ignore" : ".ignore, :hidden",
|
|
"rules": {
|
|
"start_date_time": {
|
|
"required": true,
|
|
"check_valid_date" : true,
|
|
"invalid_date" : true
|
|
},
|
|
"end_date_time": {
|
|
"invalid_date" : true,
|
|
"check_valid_date" : true
|
|
},
|
|
"total_available_seat": {
|
|
"total_available_seat" : true,
|
|
"digits": {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
}
|
|
},
|
|
// "code_postal": {
|
|
// "required": {
|
|
// depends : event_schedule.validate.check_bo_stat_on_save
|
|
// },
|
|
// "digits" : true
|
|
// },
|
|
"location": {
|
|
"required": {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
}
|
|
},
|
|
"city_location": {
|
|
"required": {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
}
|
|
},
|
|
"city_name": {
|
|
"required": {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
}
|
|
},
|
|
"address": {
|
|
"required": {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
}
|
|
},
|
|
"event_url": {
|
|
required: true,
|
|
url: true
|
|
},
|
|
"item_code": {
|
|
required: true,
|
|
duplicate_code_selection: true
|
|
},
|
|
"seats_per_subscriber": {
|
|
"required" : {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
},
|
|
"min_seat_per_subscriber" : {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
},
|
|
"digits": true
|
|
},
|
|
"total_quota_waiting_list_seat": {
|
|
"digits": {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
}
|
|
},
|
|
"reservation_start_date": {
|
|
"required": true,
|
|
// "required": {
|
|
// depends : event_schedule.validate.check_bo_stat_reservation_date
|
|
// },
|
|
"invalid_date" : {
|
|
depends : event_schedule.validate.check_bo_stat_reservation_date
|
|
},
|
|
"check_valid_date" : true,
|
|
},
|
|
"reservation_end_date" : {
|
|
"required": true,
|
|
"check_valid_date" : true,
|
|
"invalid_date" : true
|
|
},
|
|
"event_status": {
|
|
"required": {
|
|
depends : event_schedule.validate.check_bo_stat_on_save
|
|
}
|
|
},
|
|
"back_office_status": {
|
|
"required": {
|
|
depends : event_schedule.validate.check_bo_stat_for_bostat_field
|
|
}
|
|
},
|
|
"flex_no_of_hours" : {
|
|
"digits": true,
|
|
"required": {
|
|
depends : event_schedule.validate.check_if_flexible_option_id_on
|
|
}
|
|
},
|
|
|
|
"flex_places_to_lift_moderation" : {
|
|
"digits": true,
|
|
"required": {
|
|
depends : event_schedule.validate.check_if_flexible_option_id_on
|
|
}
|
|
},
|
|
|
|
"flexAgreed" : {
|
|
"required": {
|
|
depends : event_schedule.validate.check_if_flexible_option_id_on
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
app._form._validate(options);
|
|
},
|
|
check_bo_stat_on_save : function(element){
|
|
var bo_status = parseInt($("#back_office_status option:selected").val(), 10);
|
|
if(bo_status != 0 && bo_status !="" && bo_status != null) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
|
|
check_bo_stat_for_bostat_field : function(element){
|
|
var bo_status = $("#back_office_status option:selected").val();
|
|
if(bo_status != 0 && bo_status !="" && bo_status != null) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
},
|
|
|
|
check_if_flexible_option_id_on : function(element) {
|
|
var isFlexibleModerationActive = $("#moderationSwitchFlexibleBtn").prop("checked");
|
|
if(isFlexibleModerationActive) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
|
|
check_bo_stat_reservation_date : function(){
|
|
var bo_status = parseInt($("#back_office_status option:selected").val(), 10);
|
|
if(bo_status != 0 && bo_status !="") {
|
|
if (bo_status > 1) {
|
|
return false;
|
|
} else if(bo_status == 1) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
|
|
"seat_feature" : function(){
|
|
var seat_feature = parseInt($('input[type=radio][name="seat_feature"]:checked').val());
|
|
var total_available_seat = $("#total_available_seat");
|
|
if(seat_feature == 2){
|
|
total_available_seat.val("").prop("readonly", true);
|
|
} else {
|
|
total_available_seat.prop("readonly", false);
|
|
}
|
|
},
|
|
|
|
"use_diffirent_address" : function(use_address=0){
|
|
if(use_address ==0){
|
|
use_address = parseInt($('input#use_different_address_per_date:checked').val());
|
|
}
|
|
|
|
var fields_div= $(".add-different-address-fields");
|
|
|
|
if(use_address){
|
|
fields_div.show();
|
|
fields_div.find(":input").prop("disabled", false);
|
|
} else {
|
|
fields_div.find(":input").prop("disabled", true);
|
|
fields_div.hide();
|
|
}
|
|
},
|
|
|
|
/*If date de reservation is set today and the status is set to "publie" event must automatically be open.*/
|
|
"watch_bo_event_status" : function(bostat, action){
|
|
var eventForm = event_schedule.getForm();
|
|
var start_date_time = event_schedule.datetimepicker.configure.get_date("start_date_time");
|
|
var end_date_time = event_schedule.datetimepicker.configure.get_date("end_date_time");
|
|
var reservation_start_date = event_schedule.datetimepicker.configure.get_date("reservation_start_date");
|
|
var reservation_end_date = event_schedule.datetimepicker.configure.get_date("reservation_end_date");
|
|
var date_now = moment();
|
|
if(
|
|
(reservation_end_date && reservation_end_date <= date_now) ||
|
|
((start_date_time && start_date_time <= date_now && !end_date_time) ||
|
|
(end_date_time && end_date_time <= date_now) ) && bostat !=5 && bostat != 0
|
|
)
|
|
{
|
|
return 4; //event is Passe|Closed
|
|
|
|
}
|
|
if( action == "auto" || (action == "manual" && (bostat == 1 || bostat == 2)) )
|
|
{
|
|
// var reservation_start_date = event_schedule.datetimepicker.configure.get_date("reservation_start_date");
|
|
// var reservation_end_date = event_schedule.datetimepicker.configure.get_date("reservation_end_date");
|
|
|
|
if( (reservation_start_date && start_date_time && reservation_start_date < start_date_time
|
|
&& reservation_start_date <= date_now && start_date_time > date_now)
|
|
|
|
|| (reservation_start_date && reservation_end_date && reservation_start_date <= reservation_end_date
|
|
&& reservation_start_date <= date_now && reservation_end_date >= date_now)
|
|
|
|
|| (eventForm.event_category && eventForm.event_category == 'ONLINE_EVENT'
|
|
&& (start_date_time < date_now)
|
|
)
|
|
)
|
|
{
|
|
return 2; //event is now open for reservation
|
|
|
|
} else if( (end_date_time && start_date_time )
|
|
&& (start_date_time <= date_now && end_date_time > date_now && end_date_time > start_date_time) ) {
|
|
return 7; //event is on going so must be terminated
|
|
|
|
} else if( (
|
|
(reservation_start_date && reservation_start_date > date_now)
|
|
|| (eventForm.event_category && eventForm.event_category == 'ONLINE_EVENT' && start_date_time && start_date_time > date_now)
|
|
)
|
|
&& bostat!=3
|
|
) {
|
|
return 1; //event is publish
|
|
} else if ( (
|
|
!reservation_start_date
|
|
|| (eventForm.event_category && eventForm.event_category == 'ONLINE_EVENT' && !start_date_time)
|
|
)
|
|
&& bostat == 1
|
|
) {
|
|
return 2
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
if(((start_date_time && start_date_time > date_now && !end_date_time) ||
|
|
(end_date_time && end_date_time > date_now) ) && bostat == 4) {
|
|
return 2;
|
|
}
|
|
|
|
},
|
|
"watch_fo_event_status": function(date) {
|
|
let status = ""
|
|
if(date) {
|
|
const r_date = date.startOf('day')
|
|
const c_date = moment().startOf('day')
|
|
if(r_date.isSameOrAfter(c_date)) {
|
|
status = "AVAILABLE"
|
|
}
|
|
}
|
|
|
|
return status;
|
|
},
|
|
"check_address" : function(){
|
|
var data = (events.get_vars().event_schedule_list)[0].data(),
|
|
required = ["city_location", "address", "city_name"];
|
|
|
|
//check if address fields are not empty
|
|
var checker = $.map(data, function(value, key){
|
|
var check = $.map(value, function(v, k){
|
|
if(required.indexOf(k) != -1){
|
|
if(v == "" || v == null){
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
|
|
if(check.length > 0 && check[0] == false){
|
|
return false;
|
|
}
|
|
});
|
|
|
|
if(checker.length > 0 && checker[0] == false){
|
|
return false;
|
|
}
|
|
return true; //valid
|
|
}
|
|
},
|
|
|
|
"reset" : {
|
|
"multidate_fields" : function(){
|
|
$('input.seat_feature').prop("checked", false);
|
|
$('input#total_combined_seat').val("").prop("disabled", true);
|
|
// $("input[name='is_multiple_reservation']").prop("checked", true);
|
|
// $("input[name='is_multiple_waitlist_reservation']").prop("checked", true);
|
|
}
|
|
},
|
|
|
|
"datetimepicker" : {
|
|
|
|
"init" : function(action, row){
|
|
var start_end = $('.datetimepicker');
|
|
start_end.datetimepicker( {
|
|
"locale": 'fr',
|
|
"sideBySide": false,
|
|
"useCurrent" : false,
|
|
"keepInvalid" : true,
|
|
"showClose" : true,
|
|
"focusOnShow":true,
|
|
"format": "DD/MM/YYYY HH"+"[h]"+"mm",
|
|
"tooltips": {
|
|
"today": 'Revenir à aujourd\'hui',
|
|
"clear": 'Effacer la sélection',
|
|
"close": 'Fermer',
|
|
"electMonth": 'Sélectionner le mois',
|
|
"prevMonth": 'Mois précédent',
|
|
"nextMonth": 'Mois suivant',
|
|
"selectYear": 'Sélectionner l\'année',
|
|
"prevYear": 'Année précédente',
|
|
"nextYear": 'Année suivante',
|
|
"selectDecade": 'Sélectionner la décénnie',
|
|
"prevDecade": 'Décénnie précédente'
|
|
},
|
|
}).on('dp.change', function(e){
|
|
const eventCategory = $("#event_schedule_form").data('event_category');
|
|
if ( $(this).val().trim() != "" ) {
|
|
var bostat = $('select#back_office_status');
|
|
var back_office_status = event_schedule.validate.watch_bo_event_status((isNaN(parseInt(bostat))?-1:parseInt(bostat)), "auto");
|
|
if(back_office_status){
|
|
bostat.find('option[value="'+back_office_status+'"]').prop("selected", true);
|
|
}
|
|
}
|
|
switch (this.id) {
|
|
case 'reservation_start_date':
|
|
if ($('#start_date_time').val().trim() == '') {
|
|
$('#end_date_time').data("DateTimePicker").minDate(e.date);
|
|
}
|
|
$('#reservation_end_date').data("DateTimePicker").minDate(e.date);
|
|
$('#start_date_time').data("DateTimePicker").minDate(e.date);
|
|
if(moment(app._form.format_inputs("datetime", $("#reservation_start_date").val())) > moment()) {
|
|
$("#event_status").val("SOON")
|
|
} else {
|
|
$("#event_status").val("AVAILABLE")
|
|
}
|
|
break;
|
|
case 'reservation_end_date':
|
|
$('#reservation_start_date').data("DateTimePicker").maxDate(e.date);
|
|
$('#start_date_time').data("DateTimePicker").minDate(e.date);
|
|
$('#end_date_time').data("DateTimePicker").minDate(e.date);
|
|
break;
|
|
case 'start_date_time':
|
|
if (eventCategory && eventCategory.toLowerCase() !== 'regular_event')
|
|
$('#reservation_end_date').data("DateTimePicker").maxDate(e.date);
|
|
$('#end_date_time').data("DateTimePicker").minDate(e.date);
|
|
if(events.get_vars().isEdit) {
|
|
events._edit.getEditedDate('schedule', $('#start_date_time').val())
|
|
}
|
|
break;
|
|
case 'end_date_time':
|
|
$('#start_date_time').data("DateTimePicker").maxDate(e.date);
|
|
if(events.get_vars().isEdit) {
|
|
events._edit.getEditedDate('schedule', $('#end_date_time').val())
|
|
}
|
|
break;
|
|
case 'live_video_end_date':
|
|
$('#live_video_start_date').data("DateTimePicker").maxDate(e.date);
|
|
break;
|
|
case 'live_video_start_date':
|
|
$('#live_video_end_date').data("DateTimePicker").minDate(e.date);
|
|
break;
|
|
default:
|
|
|
|
}
|
|
}).on('dp.show', function(e) {
|
|
if($(this).val().trim() == ""){
|
|
return $(this).data('DateTimePicker').date(null);
|
|
} else {
|
|
// return $(this).data('DateTimePicker').date(moment($(this).val(), "DD/MM/YYYY HH[h]mm", true));
|
|
}
|
|
}).on('dp.hide', function() {
|
|
$(this).blur();
|
|
});
|
|
},
|
|
|
|
"destroy" : function(){
|
|
var target = [$("#end_date_time"), $("#start_date_time"), $("#reservation_start_date"), $("#reservation_end_date")];
|
|
$.map(target, function(tdates, key) {
|
|
try{
|
|
if(typeof tdates.data("DateTimePicker") != "undefined"){
|
|
tdates.data("DateTimePicker").minDate(false);
|
|
tdates.data("DateTimePicker").maxDate(false);
|
|
tdates.data("DateTimePicker").date(null);
|
|
tdates.val("");
|
|
}
|
|
}catch(e){
|
|
if(typeof tdates.data("DateTimePicker") != "undefined"){
|
|
tdates.data("DateTimePicker").maxDate(false);
|
|
tdates.data("DateTimePicker").minDate(false);
|
|
tdates.data("DateTimePicker").date(null);
|
|
tdates.val("");
|
|
}
|
|
}
|
|
if(typeof tdates.data("DateTimePicker") != "undefined"){
|
|
tdates.data('DateTimePicker').destroy();
|
|
}
|
|
});
|
|
},
|
|
|
|
"configure" : {
|
|
"datetime" : function(el, min, max){
|
|
// console.log(el);
|
|
// try {
|
|
// el.data("DateTimePicker").minDate(false).minDate(min);
|
|
// // console.log(moment().toDate());
|
|
// el.data("DateTimePicker").maxDate(false).maxDate(max);
|
|
// }catch(e){
|
|
// try {
|
|
// el.data("DateTimePicker").maxDate(false).maxDate(max);
|
|
// el.data("DateTimePicker").minDate(false).minDate(min);
|
|
// }catch(e){
|
|
// try {
|
|
// el.data("DateTimePicker").maxDate(false);
|
|
// el.data("DateTimePicker").minDate(false);
|
|
// }catch(e){
|
|
//
|
|
// }
|
|
// }
|
|
// }
|
|
// $.map(target, function(el, key) {
|
|
// });
|
|
},
|
|
|
|
"reservation_start_date" : function(){
|
|
var eventForm = event_schedule.getForm();
|
|
var _this = $("#reservation_start_date"),
|
|
this_date = event_schedule.datetimepicker.configure.get_date("reservation_start_date"),
|
|
reservation_end_date = event_schedule.datetimepicker.configure.get_date("reservation_end_date"),
|
|
start_date_time = event_schedule.datetimepicker.configure.get_date("start_date_time"),
|
|
end_date_time = event_schedule.datetimepicker.configure.get_date("end_date_time"),
|
|
end_date = (reservation_end_date != false)?reservation_end_date:(end_date_time!=false)?end_date_time:start_date_time;
|
|
//end_date = (reservation_end_date != false)?reservation_end_date:this_date;
|
|
//check input date
|
|
event_schedule.datetimepicker.configure.check_date(false, end_date, this_date, _this);
|
|
//configure min and max date
|
|
event_schedule.datetimepicker.configure.datetime(_this, false, end_date);
|
|
return this_date;
|
|
},
|
|
|
|
"reservation_end_date" : function(){
|
|
var eventForm = event_schedule.getForm();
|
|
var _this = $("#reservation_end_date");
|
|
var this_date = event_schedule.datetimepicker.configure.get_date("reservation_end_date"),
|
|
start_date_time = event_schedule.datetimepicker.configure.get_date("start_date_time"),
|
|
start_date_time = (start_date_time!= false)?start_date_time:event_schedule.datetimepicker.configure.get_date("end_date_time"),
|
|
reservation_start_date = event_schedule.datetimepicker.configure.get_date("reservation_start_date")
|
|
start_date = reservation_start_date,
|
|
end_date = start_date_time;
|
|
|
|
//check input date
|
|
event_schedule.datetimepicker.configure.check_date(start_date, end_date, this_date, _this);
|
|
//configure min and max date
|
|
event_schedule.datetimepicker.configure.datetime(_this, start_date, end_date);
|
|
return this_date;
|
|
},
|
|
|
|
"start_date_time" : function(){
|
|
var eventForm = event_schedule.getForm();
|
|
var _this = $("#start_date_time");
|
|
this_date = event_schedule.datetimepicker.configure.get_date("start_date_time"),
|
|
reservation_end_date = event_schedule.datetimepicker.configure.get_date("reservation_end_date"),
|
|
reservation_end_date = (reservation_end_date != false)?reservation_end_date:event_schedule.datetimepicker.configure.get_date("reservation_start_date"),
|
|
end_date_time = event_schedule.datetimepicker.configure.get_date("end_date_time"),
|
|
|
|
start_date = (eventForm.event_category && eventForm.event_category == 'ONLINE_EVENT') ? this_date : reservation_end_date,
|
|
end_date = end_date_time;
|
|
|
|
//check input date
|
|
event_schedule.datetimepicker.configure.check_date(start_date, end_date, this_date, _this);
|
|
//configure min and max date
|
|
event_schedule.datetimepicker.configure.datetime(_this, start_date, end_date);
|
|
return this_date;
|
|
},
|
|
|
|
"end_date_time" : function(){
|
|
var eventForm = event_schedule.getForm();
|
|
var _this = $("#end_date_time"),
|
|
this_date = event_schedule.datetimepicker.configure.get_date("end_date_time"),
|
|
reservation_start_date = event_schedule.datetimepicker.configure.get_date("reservation_start_date"),
|
|
reservation_end_date = event_schedule.datetimepicker.configure.get_date("reservation_end_date"),
|
|
start_date_time = event_schedule.datetimepicker.configure.get_date("start_date_time"),
|
|
start_date = false;
|
|
|
|
if (eventForm.event_category && eventForm.event_category == 'ONLINE_EVENT') {
|
|
start_date = (start_date_time != false) ? start_date_time : new Date();
|
|
} else {
|
|
start_date = (start_date_time != false)?start_date_time:((reservation_end_date!= false)?reservation_end_date:reservation_start_date);
|
|
}
|
|
|
|
//check input date
|
|
event_schedule.datetimepicker.configure.check_date(start_date, false, this_date, _this);
|
|
//configure min and max date
|
|
event_schedule.datetimepicker.configure.datetime(_this, start_date, false);
|
|
return this_date;
|
|
},
|
|
|
|
"get_date" : function(dater) {
|
|
var _this = $("#"+dater);
|
|
return (typeof _this.val()!='undefined' && _this.val().trim() != "")?moment(_this.val().trim(), "DD/MM/YYYY HH[h]mm", false):false;
|
|
},
|
|
|
|
"check_date" : function(start_date, end_date, this_date, _this){
|
|
if(this_date != false){
|
|
try{
|
|
if(end_date){ //if has date
|
|
if(this_date.isAfter(end_date)){
|
|
_this.data("DateTimePicker").date(null);
|
|
}
|
|
} else {
|
|
if(start_date){
|
|
if(this_date.format("DD/MM/YYYY HH[h]mm") != start_date.format("DD/MM/YYYY HH[h]mm")){
|
|
if(this_date.isBefore(start_date)){
|
|
_this.data("DateTimePicker").date(null);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}catch(e){
|
|
if(start_date){
|
|
if(this_date.isBefore(start_date)){
|
|
_this.data("DateTimePicker").date(null);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
};// end of return
|
|
|
|
})(jQuery, this);
|
|
|
|
$(function() {
|
|
if (app.get_vars()._app.msg.role != 'adminrc') {
|
|
/*
|
|
* Initialize current moderation settings and evsched setting
|
|
*/
|
|
event_schedule.moderation.init_cur_mod_settings();
|
|
}
|
|
|
|
event_schedule.datetimepicker.init();
|
|
|
|
$("#start_date_time").on('click focus', function(e){
|
|
event_schedule.datetimepicker.configure.start_date_time(e);
|
|
// console.log(this.value);
|
|
});
|
|
|
|
$("#end_date_time").on('click focus', function(e){
|
|
event_schedule.datetimepicker.configure.end_date_time(e);
|
|
});
|
|
|
|
$("#reservation_start_date").on('click focus', function(e){
|
|
event_schedule.datetimepicker.configure.reservation_start_date(e);
|
|
});
|
|
|
|
$("#reservation_end_date").on('click focus', function(e){
|
|
event_schedule.datetimepicker.configure.reservation_end_date(e);
|
|
});
|
|
|
|
$("#back_office_status").on("focus", function (e) {
|
|
prev_eventbo_status = this.value;
|
|
}).change(function(event) {
|
|
/* Act on the event */
|
|
if (
|
|
$("#event_status").val() == 'CANCEL'
|
|
) {
|
|
if ($(this).val() == 2 || $(this).val() == 3 || $(this).val() == 5) {
|
|
bostat = $(this).val();
|
|
prev_eventbo_status = this.value;
|
|
} else {
|
|
bostat = prev_eventbo_status;
|
|
}
|
|
} else {
|
|
if (init_form_bo_status != true && $(this).val() != 5) {
|
|
var bostat = event_schedule.validate.watch_bo_event_status(parseInt($(this).val()), "manual");
|
|
} else {
|
|
var bostat = this.value;
|
|
init_form_bo_status = false;
|
|
}
|
|
}
|
|
if(bostat){
|
|
$(this).find('option[value="'+bostat+'"]').prop("selected", true);
|
|
}
|
|
});
|
|
|
|
|
|
$("select#event_status").on('focus', function(event) {
|
|
event.preventDefault();
|
|
/* Act on the event */
|
|
prev_event_status = this.value;
|
|
}).change(function (e) {
|
|
cur_bo_status = $('select[name=back_office_status]').val();
|
|
// let rsd = app._form.format_inputs("datetime", $("#reservation_start_date").val())
|
|
// if(rsd)
|
|
// $("#event_status").val(event_schedule.validate.watch_fo_event_status(moment(rsd)))
|
|
switch (this.value) {
|
|
case 'CANCEL':
|
|
if ((cur_bo_status != 2 && cur_bo_status != 3 && cur_bo_status != 5) && cur_bo_status) {
|
|
$(this).find('option[value="'+prev_event_status+'"]').prop("selected", true);
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
prev_event_status = this.value;
|
|
bostat = cur_bo_status;
|
|
}
|
|
// if ((cur_bo_status != 2 || cur_bo_status != 3) && this.value == 'CANCEL') {
|
|
// $(this).find('option[value="'+prev_event_status+'"]').prop("selected", true);
|
|
// } else {
|
|
// }
|
|
if (
|
|
this.value != 'CANCEL'
|
|
) {
|
|
if (init_form_ev_status != true) {
|
|
var bostat = event_schedule.validate.watch_bo_event_status(parseInt($(this).val()), "manual");
|
|
} else {
|
|
var bostat = this.value;
|
|
init_form_ev_status = false;
|
|
}
|
|
}
|
|
if(bostat){
|
|
$('#back_office_status').find('option[value="'+bostat+'"]').prop("selected", true);
|
|
}
|
|
});
|
|
|
|
//show multiple date table
|
|
$('.multidate-table').show();
|
|
|
|
$('input.date_feature').on('change', function(e) {
|
|
$("#multiple_date_form .help-block").hide('slow');
|
|
$("#eventForm span[for='date_feature']").hide('slow');
|
|
var val = parseInt($(e.target).val());
|
|
var action = ($("#event_schedule_list").DataTable().data().count() > 1)?"editEvent":"";
|
|
|
|
if(action != "editEvent"){ //add event
|
|
if(val == 2) { //multidate
|
|
$("#multiple_date_form").show('slow');
|
|
$("#set_default_config").removeAttr("disabled").prop("disabled", false).attr("onclick","event_schedule.modal.init(\'add\', -1);");
|
|
} else { //single date
|
|
event_schedule.reset.multidate_fields();
|
|
/*reset*/
|
|
$(".event-address").prop('disabled', false);
|
|
$('input#use_different_address_per_date').prop('checked', false);
|
|
|
|
if($("#event_schedule_list").DataTable().data().count() >0){
|
|
$("#set_default_config").attr("disabled","disabled").prop("disabled", true).removeAttr("onclick");
|
|
}
|
|
$("#multiple_date_form").hide('slow');
|
|
}
|
|
} else { //edit event
|
|
if(val == 1){ //checked multidate ; cannot transfer to single date after adding multidate
|
|
$(e.target).prop("checked", false);
|
|
$('input.date_feature[value="2"]').prop("checked", true);
|
|
}
|
|
}
|
|
|
|
//check if one of seat feature is selected
|
|
if($('input.seat_feature:checked').length <= 0){
|
|
$('input.seat_feature[value="1"]').prop("checked", true).change();
|
|
}
|
|
});
|
|
|
|
$('input.seat_feature').on('change', function(e) {
|
|
var target = parseInt($(e.target).val());
|
|
var action = $("#event_schedule_list").DataTable().data().count();
|
|
if(action >0){
|
|
if(parseInt($('input.date_feature:checked').val()) !=1){
|
|
if(pseat_feature_counter >0){
|
|
event_schedule.modal.pseat_feature(target);
|
|
}
|
|
}
|
|
pseat_feature_counter++;
|
|
} else {
|
|
if(target == 2) { //combine
|
|
$("#total_combined_seat").val("").prop('disabled', false);
|
|
} else { //per date
|
|
$("#total_combined_seat").val("").prop('disabled', true);
|
|
}
|
|
}
|
|
});
|
|
|
|
//user different address per event date
|
|
$('#user-multiple-address').on('click', function(e) {
|
|
var checked = $('input#use_different_address_per_date');
|
|
if(checked.prop("checked")) {
|
|
$(".event-address").val("").prop('disabled', false);
|
|
} else {
|
|
$(".event-address").prop('disabled', true).val("");
|
|
}
|
|
});
|
|
|
|
$('label.switch>input[type=checkbox]').on('change', function(event) {
|
|
event.preventDefault();
|
|
$('#moderationSwitchBtn').parent().closest('div')
|
|
|
|
has_loader = $(this).parent().closest('div').has('.switch-loader').length;
|
|
if (!has_loader) {
|
|
$(this).parent().closest('div').append(`<span class="switch-loader"><b class="fa fa-spinner fa-spin"></b></span>`);
|
|
}
|
|
|
|
setTimeout(function () {
|
|
$('.switch-loader').remove();
|
|
}, 500);
|
|
});
|
|
});
|
|
|