EinsatzOnline/resources/js/eb_list.js

153 lines
6.7 KiB
JavaScript

$(document).ready(async function () {
await EventBillingList.setup();
});
EventBillingList = (function () {
let templates = {};
let pag;
let limit = 10;
let setup = async function () {
await load_templates();
setup_pagination();
await load_events(0);
$(".event_billing_list_load").off("click").on("click", load_events);
$("#event_billing_list_num_of_res").on("change", function(){
limit = $("#event_billing_list_num_of_res option:selected").data("num");
pag.set_limit(limit);
load_events();
});
};
let load_templates = async function () {
const eb_list_card = $.get("/templates/eb_list_card.hbs");
const pagination = $.get("/templates/pagination.hbs");
await Promise.all([eb_list_card, pagination]).then(function (res) {
templates.eb_list_card = Handlebars.compile(res[0]);
templates.pagination = Handlebars.compile(res[1]);
});
};
let setup_pagination = function(){
pag = new Pagination("eb_list_pagination", templates.pagination, ".billingpag", limit, load_events);
};
let load_events = function(offset){
if(offset === undefined || !Number.isInteger(offset)){
offset = 0;
}
let args = "";
if($("#event_billing_list_start_datetime").val()){
args += "&start="+$("#event_billing_list_start_datetime").val();
}
if($("#event_billing_list_end_datetime").val()){
args += "&end="+$("#event_billing_list_end_datetime").val();
}
if($("#event_billing_list_groups_select").val()){
args += "&groups="+$("#event_billing_list_groups_select").val();
}
//Add filter for event status to args
let event_states = "";
if ($("#event_billing_list_status_unknown").prop("checked")){
event_states += "0,"
}
if ($("#event_billing_list_status_event_opened").prop("checked")){
event_states += "2,"
}
if ($("#event_billing_list_status_event_closed").prop("checked")){
event_states += "4,"
}
if ($("#event_billing_list_status_event_times_approved").prop("checked")){
event_states += "6,"
}
if ($("#event_billing_list_status_personnal_billing_done").prop("checked")){
event_states += "7,"
}
if ($("#event_billing_list_status_billing_approved").prop("checked")){
event_states += "8,"
}
if(event_states){
args += "&states="+event_states.slice(0, event_states.length - 1); //Remove last comma
}
//Load results
$.ajax({
type: "GET",
url: "/api/events/?limit="+limit+"&offset="+offset+args,
contentType: 'application/json',
timeout: 3000,
error: function () {
alert("Verbindung zum Server unterbrochen!");
},
success: async function (data) {
if (is_ok(data)) {
$("#event_billing_list_accordion").html("").hide();
let event_loading_queue = [];
$(data.events).each(function () {
event_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);
if (event.state === 2) {
event.state_name = "Einsatz geöffnet";
event.event_status_yellow = true;
} else if (event.state === 4) {
event.state_name = "Einsatz geschlossen";
event.event_status_red = true;
} else if (event.state === 6) {
event.state_name = "Einsatzzeiten bestätigt";
event.event_status_red = true;
} else if (event.state === 7) {
event.state_name = "Personalabrechnung abgeschlossen";
event.event_status_red = true;
} else if (event.state === 8) {
event.state_name = "Abrechnung abgeschlossen";
event.event_status_green = true;
}else{
event.state_name = "unbekannt";
}
return event;
}
await Promise.all(event_loading_queue).then((values) => {
$("#event_billing_list_accordion").empty();
for(val of values){
$("#event_billing_list_accordion").append(templates.eb_list_card(val))
}
$("#event_billing_list_accordion").show();
pag.render(data.total_event_count, offset);
})
}
}
});
}
return{
setup
}
}());