351 lines
15 KiB
JavaScript
351 lines
15 KiB
JavaScript
let event_id;
|
|
let limit = 10;
|
|
let offset = 0;
|
|
let page = 1;
|
|
|
|
$(document).ready(function () {
|
|
let searchParams = new URLSearchParams(window.location.search);
|
|
event_id = searchParams.get('id');
|
|
|
|
EventEditModule.load_templates();
|
|
//Do not execute code here which relies on templates. Use EventUnitTemplateModule.start function instead
|
|
});
|
|
|
|
EventEditModule = (function () {
|
|
let templates = {};
|
|
let event = {};
|
|
let instance_modified = false;
|
|
|
|
let load_templates = function () {
|
|
$.get("/templates/em_edit_event_core_data.hbs", function (res) {
|
|
templates.core_data_view = Handlebars.compile(res);
|
|
start();
|
|
});
|
|
$.get("/templates/search.hbs", function (res) {
|
|
templates.search = res;
|
|
start();
|
|
});
|
|
$.get("/templates/em_edit_event_cast.hbs", function (res) {
|
|
templates.cast_view = Handlebars.compile(res);
|
|
start();
|
|
});
|
|
$.get("/templates/em_edit_event_cast_instances.hbs", function (res) {
|
|
templates.cast_instance = Handlebars.compile(res);
|
|
start();
|
|
});
|
|
load_event();
|
|
};
|
|
let start = function () {
|
|
if (templates.core_data_view && templates.search && templates.cast_view && templates.cast_instance && !jQuery.isEmptyObject(event)) {
|
|
Handlebars.registerPartial('search', templates.search);
|
|
$(".edit_event_core_data").append(templates.core_data_view(event));
|
|
var member_search = new MiniSearchbar("edit_event_search", null, event.member_responsible, event.member_responsible_name);
|
|
member_search.setup();
|
|
var organiser_search = new MiniSearchbar("edit_event_organiser_search", null, event.organiser_id, event.organiser_name);
|
|
organiser_search.setup();
|
|
|
|
$("#edit_event_btn").on("click", save_event);
|
|
$("#edit_event_delete_link").on("click", function(){
|
|
$("#delete_event_modal").modal();
|
|
});
|
|
$(".delete_event_modal_submit").on("click", delete_event);
|
|
|
|
//Cast panel
|
|
|
|
$("#edit_event_cast_cast_tabpanel").append(templates.cast_view());
|
|
|
|
var template_search = new MiniSearchbar("edit_event_cast_template_search", null, null, null);
|
|
template_search.setup();
|
|
|
|
$("#edit_event_cast_instance_planned_start_time").val(event.start);
|
|
$("#edit_event_cast_instance_planned_end_time").val(event.end);
|
|
|
|
$(".edit_event_cast_add_template").on("click", add_template_instance);
|
|
load_instances();
|
|
Search2.setup();
|
|
}
|
|
};
|
|
let load_event = function () {
|
|
$.ajax({
|
|
type: "GET",
|
|
url: "/api/events/" + event_id,
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: async function (data) {
|
|
if (is_ok(data)) {
|
|
if (data.member_responsible) {
|
|
let member = await get_member(data.member_responsible);
|
|
data.member_responsible_name = member.firstname + " " + member.lastname;
|
|
}
|
|
if (data.organiser_id) {
|
|
let org = await get_organiser(data.organiser_id);
|
|
if (org.company) {
|
|
data.organiser_name = org.company;
|
|
} else {
|
|
data.organiser_name = org.firstname + " " + org.lastname;
|
|
}
|
|
}
|
|
data.start = data.start.slice(0, -3);
|
|
data.end = data.end.slice(0, -3);
|
|
data.etypes = await load_event_types_async();
|
|
$(data.etypes).each(function () {
|
|
if (this.type_id === data.etype) {
|
|
this.selected = true;
|
|
}
|
|
});
|
|
data.groups = await load_groups_async();
|
|
$(data.groups).each(function () {
|
|
if (this.group_id === data.related_group) {
|
|
this.selected = true;
|
|
}
|
|
});
|
|
|
|
event = data;
|
|
start();
|
|
}
|
|
}
|
|
});
|
|
};
|
|
let save_event = function () {
|
|
if ($("#edit_event_core_data_form")[0].checkValidity()) {
|
|
let event = {};
|
|
event.name = $("#name").val();
|
|
event.start = $("#start").val();
|
|
event.end = $("#end").val();
|
|
event.state = parseInt($("#state").val());
|
|
if ($("#site").val().length > 0) {
|
|
event.site = $("#site").val();
|
|
}
|
|
if ($("#etype").val().length > 0) {
|
|
event.etype = $("#etype option:selected").val();
|
|
}
|
|
event.related_group = $("#related_group option:selected").val();
|
|
|
|
if ($("#edit_event_search").data("entity-id")) {
|
|
event.member_responsible = $("#edit_event_search").data("entity-id");
|
|
}
|
|
if ($("#edit_event_organiser_search").data("entity-id")) {
|
|
event.organiser_id = $("#edit_event_organiser_search").data("entity-id");
|
|
}
|
|
if ($("#other").val().length > 0) {
|
|
event.other = $("#other").val();
|
|
}
|
|
if ($("#other_intern").val().length > 0) {
|
|
event.other_intern = $("#other_intern").val();
|
|
}
|
|
if ($("#contact_on_site_name").val().length > 0) {
|
|
event.contact_on_site_name = $("#contact_on_site_name").val();
|
|
}
|
|
if ($("#contact_on_site_phone").val().length > 0) {
|
|
event.contact_on_site_phone = $("#contact_on_site_phone").val();
|
|
}
|
|
console.log(event);
|
|
$.ajax({
|
|
url: '/api/events/' + event_id,
|
|
type: 'PUT',
|
|
contentType: 'application/json',
|
|
data: JSON.stringify(event),
|
|
success: function (data) {
|
|
if (is_ok(data)) {
|
|
location.reload();
|
|
}
|
|
|
|
},
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
}
|
|
});
|
|
} else {
|
|
$('<input type="submit">').hide().appendTo("#create_event_form").click().remove();
|
|
}
|
|
};
|
|
let add_template_instance = function () {
|
|
let template =$(".search_template").data("value-id");
|
|
let instance_name = $("#edit_event_cast_instance_name").val();
|
|
|
|
if (!template || !instance_name) {
|
|
alert("Bitte Vorlage auswählen und Namen eingeben.");
|
|
return;
|
|
}
|
|
|
|
let instance = {};
|
|
instance.template_id = template;
|
|
instance.name = instance_name;
|
|
instance.event_id = event_id;
|
|
instance.planned_start_time = $("#edit_event_cast_instance_planned_start_time").val() || undefined;
|
|
instance.planned_end_time = $("#edit_event_cast_instance_planned_end_time").val() || undefined;
|
|
$.ajax({
|
|
url: '/api/events/' + event_id + '/instances',
|
|
type: 'POST',
|
|
contentType: 'application/json',
|
|
data: JSON.stringify(instance),
|
|
success: function (data) {
|
|
if (is_ok(data)) {
|
|
location.reload();
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Es ist ein Fehler aufgetreten!");
|
|
}
|
|
});
|
|
};
|
|
let load_instances = function () {
|
|
$.ajax({
|
|
url: '/api/events/' + event_id + '/instances',
|
|
type: 'GET',
|
|
contentType: 'application/json',
|
|
success: function (data) {
|
|
if (is_ok(data)) {
|
|
$(data).each(async function(){
|
|
|
|
this.positions = await load_positions_for_instance(this.instance_id);
|
|
this.vehicle_positions = await load_vehicle_positions_for_instance(this.instance_id);
|
|
console.log(data);
|
|
let positions_taken = true;
|
|
for(let i=0;i<this.positions.length;i++){
|
|
this.positions[i].base = "search_"+this.positions[i].instance_id+"_"+this.positions[i].position_id;
|
|
if(this.positions[i].taken_by){
|
|
let member = await get_member(this.positions[i].taken_by);
|
|
this.positions[i].member_name = member.firstname + " "+member.lastname;
|
|
}else{
|
|
positions_taken = false;
|
|
}
|
|
}
|
|
|
|
let vehicles_taken = true;
|
|
for(let i=0;i<this.vehicle_positions.length;i++){
|
|
this.vehicle_positions[i].base = "search_"+this.vehicle_positions[i].instance_id+"_"+this.vehicle_positions[i].position_id;
|
|
if(this.vehicle_positions[i].taken_by){
|
|
let vehicle = await get_vehicle(this.vehicle_positions[i].taken_by);
|
|
this.vehicle_positions[i].identifier = vehicle.identifier;
|
|
} else {
|
|
vehicles_taken = false;
|
|
}
|
|
}
|
|
this.complete = vehicles_taken && positions_taken;
|
|
$("#instances_container").append(templates.cast_instance(this));
|
|
|
|
$(".remove_instance_button").off("click").on("click", remove_instance);
|
|
$(".qsf").off("focusin focusout").on("focusin focusout", activate_modified).keyup(function (e) {
|
|
if (event.which === 13) {
|
|
activate_modified(e.target);
|
|
}
|
|
});
|
|
|
|
$(".search_instance_vehicle_position").off("change").on("change", function(){
|
|
let search = $(this).closest(".search2");
|
|
let position_instance_id = search.closest(".eu_cast_instance_vehicle_position").data("position-instance-id");
|
|
let vehicle_entity_id = $(this).data("value-id");
|
|
|
|
if(vehicle_entity_id && $(this).val()){
|
|
//Added
|
|
add_entity_to_position(vehicle_entity_id, position_instance_id)
|
|
}else{
|
|
//Removed
|
|
remove_entity_from_position(position_instance_id);
|
|
}
|
|
|
|
});
|
|
|
|
$(".search_instance_position_member").off("change").on("change", async function () {
|
|
let search = $(this).closest(".search2");
|
|
let position_id = search.closest(".eu_cast_instance_personal_position").data("position-id") || undefined;
|
|
let instance_id = search.closest(".eu_cast_instance_personal_position").data("instance-id") || undefined;
|
|
let position_instance_id = search.closest(".eu_cast_instance_personal_position").data("position-instance-id") || undefined;
|
|
let member_id = $(this).data("value-id");
|
|
|
|
if (member_id && $(this).val()) {
|
|
//Added
|
|
let requirements_fulfilled = await check_position_requirements(position_id, member_id);
|
|
if (!requirements_fulfilled) {
|
|
$("#overwrite_position_requirements_modal").modal();
|
|
$(".overwrite_position_requirements_modal_submit").off("click").on("click", function () {
|
|
add_entity_to_position(member_id, position_instance_id);
|
|
})
|
|
} else {
|
|
add_entity_to_position(member_id, position_instance_id);
|
|
}
|
|
} else {
|
|
let instanceh = $(this).closest(".instance");
|
|
if ($(instanceh).hasClass("acs-green")) {
|
|
$(instanceh).removeClass("acs-green");
|
|
$(instanceh).addClass("acs-red");
|
|
}
|
|
remove_entity_from_position(position_instance_id);
|
|
}
|
|
});
|
|
|
|
Search2.setup();
|
|
});
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Es ist ein Fehler aufgetreten!");
|
|
}
|
|
});
|
|
};
|
|
let activate_modified = function () {
|
|
if (!$(this).hasClass("modified")) { //Only execute on first modification
|
|
$(this).closest(".instance").find(".save-button").off("click").on("click", save).show(); //Show save button
|
|
$(this).addClass("modified");
|
|
}
|
|
};
|
|
let deactivate_modified = function () {
|
|
//TODO
|
|
};
|
|
let save = async function () {
|
|
let data = {};
|
|
|
|
let instance = $(this).closest(".instance");
|
|
|
|
data.instance_id = instance.data("instance-id") || undefined;
|
|
data.name = instance.find(".eu_cast_instance_name").val() || undefined;
|
|
data.planned_start_time = instance.find(".eu_cast_instance_planned_start_time").val() || undefined;
|
|
data.planned_end_time = instance.find(".eu_cast_instance_planned_end_time").val() || undefined;
|
|
|
|
//TODO: error if no name
|
|
$.ajax({
|
|
type: "PATCH",
|
|
url: "/api/events/" + event_id + "/instances/" + data.instance_id,
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
data: JSON.stringify(data),
|
|
error: function () {
|
|
alert("Es ist ein Fehler aufgetreten.");
|
|
},
|
|
success: async function (data) {
|
|
if (is_ok(data)) {
|
|
location.reload(); //TODO: soft reload
|
|
}
|
|
}
|
|
});
|
|
console.log("saving:" + data);
|
|
};
|
|
|
|
var delete_event = function () {
|
|
$.ajax({
|
|
url: '/api/events/' + event_id,
|
|
type: 'DELETE',
|
|
contentType: 'application/json',
|
|
success: function (data) {
|
|
if (is_ok(data)) {
|
|
location.href = "/portal/em/list";
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Es ist ein Fehler aufgetreten!");
|
|
}
|
|
});
|
|
};
|
|
return {
|
|
load_templates: load_templates,
|
|
start: start,
|
|
};
|
|
}()); |