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); }); });