299 lines
15 KiB
JavaScript
299 lines
15 KiB
JavaScript
let limit = 10;
|
|
let offset = 0;
|
|
let page = 1;
|
|
let total_page_count = 1;
|
|
let total_event_count = 0;
|
|
|
|
$( document ).ready(function() {
|
|
EventListModule.load_templates();
|
|
EventListModule.load_events();
|
|
$(".eventlist_change_datetime_range_button").on("click", EventListModule.load_events);
|
|
$(".event_list_nav_next").on("click", EventListModule.pagination_forward);
|
|
$(".event_list_nav_back").on("click", EventListModule.pagination_backward);
|
|
$(".event_list_nav_numbers").on("click", EventListModule.pagination_numbers);
|
|
$("#eventlist_num_of_res").on("change", function(){
|
|
limit = $("#eventlist_num_of_res option:selected").data("num");
|
|
page = 1;
|
|
EventListModule.load_events();
|
|
});
|
|
});
|
|
|
|
EventListModule = ( function() {
|
|
let templates = {};
|
|
let pagination_forward = function(){
|
|
if(page < total_page_count){
|
|
page++;
|
|
EventListModule.load_events();
|
|
}
|
|
};
|
|
let pagination_backward = function(){
|
|
if(page > 1){
|
|
page--;
|
|
EventListModule.load_events();
|
|
}
|
|
};
|
|
let pagination_numbers = function(){
|
|
page = parseInt($(this).text());
|
|
EventListModule.load_events();
|
|
};
|
|
let pagination_update = function(){
|
|
$(".event_list_nav_numbers").remove();
|
|
for(let i = total_page_count; i>0;i--){
|
|
if(page === i){
|
|
$(".event_list_nav_back_li").after("<li class=\"page-item event_list_nav_numbers disabled\"><a class=\"page-link\" href=\"#\">"+i+"</a></li>");
|
|
}else {
|
|
$(".event_list_nav_back_li").after("<li class=\"page-item event_list_nav_numbers\"><a class=\"page-link\" href=\"#\">" + i + "</a></li>");
|
|
}
|
|
}
|
|
$(".event_list_nav_numbers").on("click", EventListModule.pagination_numbers);
|
|
|
|
if(page === total_page_count){
|
|
$(".event_list_nav_next").parent().addClass("disabled");
|
|
}else{
|
|
$(".event_list_nav_next").parent().removeClass("disabled");
|
|
}
|
|
if(page === 1){
|
|
$(".event_list_nav_back").parent().addClass("disabled");
|
|
}else{
|
|
$(".event_list_nav_back").parent().removeClass("disabled");
|
|
}
|
|
};
|
|
let load_templates = function(){
|
|
$.get("/templates/em_eventlist_card.hbs", function( res) {
|
|
templates.eventlist_card = Handlebars.compile(res);
|
|
});
|
|
$.get("/templates/em_eventlist_cast_instances.hbs", function( res) {
|
|
templates.cast_instance = Handlebars.compile(res);
|
|
});
|
|
$.get("/templates/search.hbs", function (res) {
|
|
templates.search = res;
|
|
Handlebars.registerPartial('search', templates.search);
|
|
});
|
|
};
|
|
let load_events = function(){
|
|
let args = "";
|
|
if($("#eventlist_start_datetime").val().length !== 0){
|
|
args += "&start="+$("#eventlist_start_datetime").val();
|
|
}
|
|
if($("#eventlist_end_datetime").val().length !== 0){
|
|
args += "&end="+$("#eventlist_end_datetime").val();
|
|
}
|
|
if($("#eventlist_groups_select").val().length !== 0){
|
|
args += "&groups="+$("#eventlist_groups_select").val();
|
|
}
|
|
|
|
offset = (page-1)*limit;
|
|
|
|
$.ajax({
|
|
type: "GET",
|
|
url: "/api/events/?limit="+limit+"&offset="+offset+args,
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if (is_ok(data)) {
|
|
total_event_count = data.total_event_count;
|
|
total_page_count = Math.ceil(total_event_count/limit);
|
|
pagination_update();
|
|
|
|
$("#eventlist_accordion").html("").hide();
|
|
|
|
let loading_queue = [];
|
|
$(data.events).each(function(){
|
|
loading_queue.push(load_event(this))
|
|
});
|
|
|
|
async function load_event(event){
|
|
if(event.member_responsible){
|
|
let member = await get_member(event.member_responsible);
|
|
event.member_responsible = member.firstname + " " + member.lastname;
|
|
}
|
|
if(event.related_group){
|
|
event.related_group = await get_related_group(event.related_group);
|
|
}
|
|
if(event.etype){
|
|
event.etype = await get_event_type(event.etype);
|
|
}
|
|
if(event.organiser_id){
|
|
event.organiser = await get_organiser(event.organiser_id);
|
|
}
|
|
|
|
let date = new Date(event.start);
|
|
event.timeframe = ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ' - ';
|
|
let date2 = new Date(event.end);
|
|
if (date.getDate() === date2.getDate()) {
|
|
event.timeframe += ('0' + date2.getHours()).slice(-2) + ':' + ('0' + date2.getMinutes()).slice(-2)
|
|
} else {
|
|
event.timeframe += event.timeframe = ('0' + date2.getDate()).slice(-2) + '.' + ('0' + (date2.getMonth() + 1)).slice(-2) + '.' + date2.getFullYear() + ' ' + ('0' + date2.getHours()).slice(-2) + ':' + ('0' + date2.getMinutes()).slice(-2);
|
|
}
|
|
|
|
event.cast_status = await load_event_cast_status(event.entity_id);
|
|
event.state_name = "unbekannt";
|
|
if (event.state === 2) {
|
|
event.state_name = "Einsatz geöffnet";
|
|
} else if (event.state === 4) {
|
|
event.state_name = "Einsatz geschlossen";
|
|
} else if (event.state === 6) {
|
|
event.state_name = "Einsatzzeiten bestätigt";
|
|
} else if (event.state === 7) {
|
|
event.state_name = "Personalabrechnung abgeschlossen";
|
|
} else if (event.state === 8) {
|
|
event.state_name = "Abrechnung abgeschlossen";
|
|
}
|
|
|
|
return event
|
|
}
|
|
|
|
$.when.apply($, loading_queue).then(function(){
|
|
var objects = arguments;
|
|
|
|
$(objects).each(function(){
|
|
$("#eventlist_accordion").append(templates.eventlist_card(this));
|
|
})
|
|
$('.eventlist_accordion_card').off("show.bs.collapse").on('show.bs.collapse', load_cast_for_event);
|
|
check_for_permission(check_edit_permission_callback, "modules.event_management.events.edit");
|
|
$("#eventlist_accordion").show();
|
|
|
|
})
|
|
}
|
|
}
|
|
});
|
|
};
|
|
let load_cast_for_event = async function(){
|
|
let event_id = $(this).data("entity-id");
|
|
$.ajax({
|
|
url: '/api/events/' + event_id + '/instances',
|
|
type: 'GET',
|
|
contentType: 'application/json',
|
|
success: function (data) {
|
|
if (is_ok(data)) {
|
|
$("#eventlist_cast_instance_container-"+event_id).html("");
|
|
$(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);
|
|
|
|
if (this.planned_start_time && this.planned_end_time) {
|
|
|
|
let date = new Date(this.planned_start_time);
|
|
let start_date = ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear();
|
|
let start_time = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ' - ';
|
|
date = new Date(this.planned_end_time);
|
|
let end_date = ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear();
|
|
let end_time = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);
|
|
|
|
if (start_date === end_date) {
|
|
this.planned_time = start_date + " " + start_time + end_time;
|
|
} else {
|
|
this.planned_time = start_date + " " + start_time + end_date + " " + end_time;
|
|
}
|
|
}
|
|
|
|
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) {
|
|
console.log("taken by: {}", 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;
|
|
}
|
|
}
|
|
|
|
$("#eventlist_cast_instance_container-"+event_id).append(templates.cast_instance(this));
|
|
|
|
$(".eu_cast_instance_self_register").off("click").on("click", self_register);
|
|
|
|
$(".eu_cast_instance_personal_position").each(function(){
|
|
let pos = $(this).data("position-id");
|
|
let instance = $(this).data("instance-id");
|
|
let position_instance_id = $(this).data("position-instance-id");
|
|
|
|
let callback = function(caller){
|
|
let ms = this;
|
|
$("#"+ms.base+"-search").hide();
|
|
$("#"+ms.base).val($(caller).data("firstname")+" "+$(caller).data("lastname")).attr("data-entity-id", $(caller).data("entity-id")).data("entity-id", $(caller).data("entity-id"));
|
|
$("#"+ms.base+"_input_group").show();
|
|
add_entity_to_position($(caller).data("entity-id"), position_instance_id)
|
|
};
|
|
let delete_callback = function(){
|
|
remove_entity_from_position(position_instance_id);
|
|
};
|
|
var member_search = new MiniSearchbar("search_"+$(this).data("instance-id")+"_"+$(this).data("position-id"), callback, $(this).data("member-id"), $(this).data("member-name"), delete_callback);
|
|
member_search.setup();
|
|
});
|
|
$(".eu_cast_instance_vehicle_position").each(function(){
|
|
let pos = $(this).data("position-id");
|
|
let instance = $(this).data("instance-id");
|
|
let position_instance_id = $(this).data("position-instance-id");
|
|
|
|
let callback = function(caller){
|
|
let ms = this;
|
|
$("#"+ms.base+"-search").hide();
|
|
$("#"+ms.base).val($(caller).data("identifier")).attr("data-entity-id", $(caller).data("entity-id")).data("entity-id", $(caller).data("entity-id"));
|
|
$("#"+ms.base+"_input_group").show();
|
|
add_entity_to_position($(caller).data("entity-id"), position_instance_id)
|
|
};
|
|
let delete_callback = function(){
|
|
remove_entity_from_position(position_instance_id);
|
|
};
|
|
var vehicle_search = new MiniSearchbar("search_"+$(this).data("instance-id")+"_"+$(this).data("position-id"), callback, $(this).data("entity-id"), $(this).data("identifier"), delete_callback);
|
|
vehicle_search.setup();
|
|
});
|
|
});
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Es ist ein Fehler aufgetreten!");
|
|
}
|
|
});
|
|
};
|
|
let self_register = async function(){
|
|
let btn = $(this);
|
|
let position = $(this).closest(".eu_cast_instance_personal_position");
|
|
let position_id = position.data("position-id");
|
|
let instance_id = position.data("instance-id");
|
|
let caller_entity_id = $("#caller_entity_id").val();
|
|
let position_instance_id = position.data("position-instance-id");
|
|
let check_requirements = await check_position_requirements(position_id, caller_entity_id);
|
|
|
|
if(check_requirements){
|
|
add_entity_to_position(caller_entity_id, position_instance_id);
|
|
let member = await get_member(caller_entity_id);
|
|
btn.replaceWith(member.firstname + " "+member.lastname);
|
|
}else{
|
|
alert("Du erfüllst nicht die nötigen Voraussetzungen für diese Position.");
|
|
}
|
|
}
|
|
let check_edit_permission_callback = function(has_permission){
|
|
if(has_permission === true){
|
|
$(".eventlist_navtabs").each(function(){
|
|
$(this).append("<li class=\"nav-item\"><a class=\"nav-link\" href=\"/portal/em/event?id="+$(this).data("entity-id")+"\">Einsatz bearbeiten</a></li>")
|
|
});
|
|
}
|
|
};
|
|
|
|
return{
|
|
load_events: load_events,
|
|
load_templates: load_templates,
|
|
pagination_forward: pagination_forward,
|
|
pagination_backward: pagination_backward,
|
|
pagination_numbers: pagination_numbers,
|
|
check_edit_permission_callback: check_edit_permission_callback,
|
|
};
|
|
}()); |