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(''
+app.get_vars().events.btn.add_event_date+'');
}
$("#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('');
}
} 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('');
}
} 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+" [#"+(row+1)+"] ?
"+app.get_vars()._app.cma_msg.note+"",
"_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 ?
"
+ "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(``);
}
setTimeout(function () {
$('.switch-loader').remove();
}, 500);
});
});