EinsatzOnline/resources/js/em_eventlist.js

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