531 lines
25 KiB
JavaScript
531 lines
25 KiB
JavaScript
var member_id = "";
|
|
var qualification_id = "";
|
|
|
|
$( document ).ready(function() {
|
|
member_id = $("#member_entity_id").val();
|
|
if(member_id !== null){
|
|
$.getJSON("/api/member_management/get_qualifications?member_id=" + member_id, function (data) {
|
|
QualificationList.load_list(data)
|
|
});
|
|
$(".qualification_delete").on("click", QualificationList.delete_qualification_save);
|
|
$("#add_qualification_category").change(QualificationList.get_qualification_for_category);
|
|
$("#add_qualification_submit").on("click", QualificationList.add_qualification);
|
|
$(".drive_permission_update").on("click", DrivingPermissionModule.update);
|
|
CommunicationModule.update_communication_types();
|
|
$(".communication_edit_button").on("click", CommunicationModule.handle_edit_button);
|
|
$(".communication_save_new_button").on("click", CommunicationModule.handle_save_new_button);
|
|
$(".communication_delete_button").on("click", CommunicationModule.handle_delete_button);
|
|
$(".communication_edit_save_button").on("click", CommunicationModule.handle_edit_save_button);
|
|
|
|
UnitModule.get_units();
|
|
$("#add_operation_unit_submit").on("click", UnitModule.add_unit_submit_listener);
|
|
$(".delete_unit_from_member_button").on("click", UnitModule.delete_unit);
|
|
|
|
$("#login_allowed").on("change", LoginModule.login_allowed_checkbox_listener);
|
|
$("#login_save_button").on("click", LoginModule.login_submit);
|
|
}
|
|
});
|
|
|
|
QualificationList = ( function() {
|
|
var list = [];
|
|
var qualification_list = [];
|
|
var load_list = function (data) {
|
|
list = data;
|
|
};
|
|
var get_qualification_for_category = function (){
|
|
$("#add_qualification_qualification").children().remove();
|
|
if($("#add_qualification_category").val() === "none"){
|
|
$("#add_qualification_qualification").attr('disabled','disabled');
|
|
$("#add_qualification_submit").attr('disabled','disabled');
|
|
}else {
|
|
$.getJSON("/api/member_management/get_qualifications_for_category?category_id=" + $(this).val(), function (data) {
|
|
if (is_ok(data)) {
|
|
qualification_list = data;
|
|
for (var i = 0; i < qualification_list.length; i++) {
|
|
var option = "<option value=\"" + qualification_list[i].id + "\">" + qualification_list[i].name + "</option>";
|
|
$("#add_qualification_qualification").append(option);
|
|
}
|
|
if (qualification_list.length > 0) {
|
|
$("#add_qualification_qualification").removeAttr("disabled");
|
|
$("#add_qualification_submit").removeAttr("disabled");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
/*var delete_qualification = function () {
|
|
get_qualification_for_category();
|
|
qualification_id = $(this).data("qualification-id");
|
|
var category = $(this).data("category-id");
|
|
|
|
for(var i=0; i<list.categories.length;i++){ //Search for category
|
|
if (list.categories[i].id === category){ //Category found
|
|
for(var v=0;v<list.categories[i].qualifications.length;v++){
|
|
if (list.categories[i].qualifications[v].id === qualification_id){ //Qualification found
|
|
list.categories[i].qualifications.splice(v, 1);
|
|
if ($(this).parent().parent().children().length === 3){
|
|
$(this).parent().parent().remove();
|
|
}else {
|
|
$(this).parent().remove();
|
|
}
|
|
delete_qualification_save()
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
};*/
|
|
var delete_qualification_save = function(){
|
|
var qualification_id = $(this).data("qualification-id");
|
|
var qual_badge = $(this).parent();
|
|
|
|
$.ajax({
|
|
url: '/api/member_management/remove_qualification?member_id='+member_id+'&qualification_id='+qualification_id,
|
|
type: 'PUT',
|
|
contentType: 'application/json',
|
|
success: function(data) {
|
|
if(is_ok(data)) {
|
|
qual_badge.remove();
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function() {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
}
|
|
});
|
|
};
|
|
var add_qualification = function(){
|
|
var qual_id = $("#add_qualification_qualification").val();
|
|
var qual_name = $("#add_qualification_qualification option:selected").text();
|
|
var qual_category = $("#add_qualification_category").val();
|
|
var qual_category_name = $("#add_qualification_category option:selected").text();
|
|
|
|
$.ajax({
|
|
url: '/api/member_management/add_qualification?member_id='+member_id+'&qualification_id='+qual_id,
|
|
type: 'PUT',
|
|
contentType: 'application/json',
|
|
success: function(data) {
|
|
if(is_ok(data)) {
|
|
var found = false;
|
|
$(".qualification_category_single").each(function(){
|
|
if($(this).data("category-id") === qual_category){
|
|
$(this).append("<span class=\"badge badge-secondary\" data-type=\"qualification\">"+qual_name+
|
|
" <span class=\"qualification_delete\" data-qualification-id=\""+qual_id+"\" data-category-id=\""+qual_category+"\"><svg width=\"1em\" height=\"1em\" fill=\"currentColor\">\n" +
|
|
" <use xlink:href=\"/img/bootstrap-icons.svg#trash\"></use>\n" +
|
|
" </svg></span></span>");
|
|
found = true;
|
|
}
|
|
});
|
|
if(!found){
|
|
$("#qualification_category_list").append("<span class=\"qualification_category_single\" data-category-id=\""+qual_category+"\"><b>"+qual_category_name+": </b><span class=\"badge badge-secondary\" data-type=\"qualification\">" + qual_name+
|
|
" <span class=\"qualification_delete\" data-qualification-id=\""+qual_id+"\" data-category-id=\""+qual_category+"\"><svg width=\"1em\" height=\"1em\" fill=\"currentColor\">\n" +
|
|
" <use xlink:href=\"/img/bootstrap-icons.svg#trash\"></use>\n" +
|
|
" </svg></span></span>\n" +
|
|
" </span>")
|
|
}
|
|
//Reapply button listeners:
|
|
$(".qualification_delete").off("click").on("click", QualificationList.delete_qualification_save);
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function() {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
}
|
|
});
|
|
};
|
|
return{
|
|
load_list: load_list,
|
|
get_qualification_for_category: get_qualification_for_category,
|
|
delete_qualification_save: delete_qualification_save,
|
|
add_qualification: add_qualification,
|
|
};
|
|
})();
|
|
|
|
DrivingPermissionModule = ( function() {
|
|
var update = function(){
|
|
var permission_name = $(this).data("permission-name");
|
|
var permission_level = $(this).data("permission-level");
|
|
|
|
if(permission_name === undefined || permission_level === undefined){
|
|
return;
|
|
}
|
|
|
|
switch(permission_level){
|
|
case "none":
|
|
update_to_license(this, permission_name);
|
|
break;
|
|
case "license":
|
|
update_to_drive_permission(this,permission_name);
|
|
break;
|
|
case "drive_permission":
|
|
update_to_none(this,permission_name);
|
|
break;
|
|
}
|
|
};
|
|
var update_to_license = function(element, permission_name){
|
|
if(permission_name === undefined){
|
|
return;
|
|
}
|
|
$.ajax({
|
|
url: '/api/member_management/add_driving_license?member_id='+member_id+'&license_name='+permission_name,
|
|
type: 'PUT',
|
|
contentType: 'application/json',
|
|
success: function(data) {
|
|
if(is_ok(data)) {
|
|
$(element).removeClass("btn-success").addClass("btn-warning");
|
|
$(element).data("permission-level", "license");
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function() {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
}
|
|
});
|
|
};
|
|
var update_to_drive_permission = function(element,permission_name){
|
|
if(permission_name === undefined){
|
|
return;
|
|
}
|
|
$.ajax({
|
|
url: '/api/member_management/add_driving_permission?member_id='+member_id+'&license_name='+permission_name,
|
|
type: 'PUT',
|
|
contentType: 'application/json',
|
|
success: function(data) {
|
|
if(is_ok(data)) {
|
|
$(element).removeClass("btn-warning").addClass("btn-success");
|
|
$(element).data("permission-level", "drive_permission");
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function() {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
}
|
|
});
|
|
};
|
|
var update_to_none = function(element,permission_name){
|
|
if(permission_name === undefined){
|
|
return;
|
|
}
|
|
$.ajax({
|
|
url: '/api/member_management/remove_driving_license?member_id='+member_id+'&license_name='+permission_name,
|
|
type: 'PUT',
|
|
contentType: 'application/json',
|
|
success: function(data) {
|
|
if(is_ok(data)) {
|
|
$(element).removeClass("btn-warning").removeClass("btn-success");
|
|
$(element).data("permission-level", "none");
|
|
}
|
|
},
|
|
timeout: 3000,
|
|
error: function() {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
}
|
|
});
|
|
}
|
|
return{
|
|
update: update,
|
|
};
|
|
}
|
|
)();
|
|
|
|
CommunicationModule = ( function() {
|
|
var update_communication_types = function(){
|
|
$.getJSON("/api/communication_types", function (data){
|
|
if(is_ok(data)) {
|
|
$(".communication_types").empty().each(function () {
|
|
var type_id = $(this).data("type-id");
|
|
|
|
for (var i = 0; i < data.types.length; i++) {
|
|
var selected = "";
|
|
if (type_id === data.types[i].type_id) {
|
|
selected = "selected";
|
|
}
|
|
var option = "<option value=\"" + data.types[i].type_id + "\"" + selected + ">" + data.types[i].type_name + "</option>";
|
|
$(this).append(option);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
};
|
|
var handle_edit_button = function(){
|
|
var row = $(this).parent().parent();
|
|
row.find("input").prop("readonly", false);
|
|
row.find("select").prop("disabled", false);
|
|
row.find(".communication_edit_save_button").prop("hidden", false);
|
|
$(this).hide();
|
|
};
|
|
var handle_save_new_button = function(){
|
|
var row = $(this).parent().parent();
|
|
var type_id = row.find(".communication_types").val();
|
|
var value = row.find(".communication_value").val();
|
|
var description = row.find(".communication_description").val();
|
|
|
|
if(type_id===""||value===""){
|
|
return;
|
|
}
|
|
|
|
var com_entry = {};
|
|
com_entry.entity_id = member_id;
|
|
com_entry.target_id = "00000000-0000-0000-0000-000000000000";
|
|
com_entry.type_id = type_id;
|
|
com_entry.type_name = "";
|
|
com_entry.value = value;
|
|
com_entry.description = description;
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "/api/communication_targets",
|
|
data: JSON.stringify(com_entry),
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
error: function() {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data){
|
|
if(is_ok(data)) {
|
|
row.before("<tr data-target-id=\"" + data.target_id + "\"><td><select data-type-id=\"" + com_entry.type_id + "\" disabled class=\"communication_types form-control\"></select></td><td><input type=\"text\" value=\"" + com_entry.value + "\" class=\"form-control\" readonly></td><td><input type=\"text\" value=\"" + com_entry.description + "\" class=\"form-control\" readonly></td><td><button class=\"iconbutton communication_edit_button\"><svg width=\"1.5em\" height=\"1.5em\" viewBox=\"0 0 16 16\" class=\"bi bi-pencil-square\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n" +
|
|
" <path d=\"M15.502 1.94a.5.5 0 0 1 0 .706L14.459 3.69l-2-2L13.502.646a.5.5 0 0 1 .707 0l1.293 1.293zm-1.75 2.456l-2-2L4.939 9.21a.5.5 0 0 0-.121.196l-.805 2.414a.25.25 0 0 0 .316.316l2.414-.805a.5.5 0 0 0 .196-.12l6.813-6.814z\"/>\n" +
|
|
" <path fill-rule=\"evenodd\" d=\"M1 13.5A1.5 1.5 0 0 0 2.5 15h11a1.5 1.5 0 0 0 1.5-1.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-11a.5.5 0 0 1 .5-.5H9a.5.5 0 0 0 0-1H2.5A1.5 1.5 0 0 0 1 2.5v11z\"/>\n" +
|
|
" </svg></button>\n" +
|
|
" <button class=\"iconbutton communication_edit_save_button\" hidden><svg width=\"1.5em\" height=\"1.5em\" viewBox=\"0 0 16 16\" class=\"bi bi-check-square\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n" +
|
|
" <path fill-rule=\"evenodd\" d=\"M14 1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z\"/>\n" +
|
|
" <path fill-rule=\"evenodd\" d=\"M10.97 4.97a.75.75 0 0 1 1.071 1.05l-3.992 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.236.236 0 0 1 .02-.022z\"/>\n" +
|
|
" </svg></button>\n" +
|
|
" <button class=\"iconbutton communication_delete_button\"><svg width=\"1.5em\" height=\"1.5em\" viewBox=\"0 0 16 16\" class=\"bi bi-trash\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n" +
|
|
" <path d=\"M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z\"></path>\n" +
|
|
" <path fill-rule=\"evenodd\" d=\"M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4L4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z\"></path>\n" +
|
|
" </svg></button>\n" +
|
|
" </td></tr>");
|
|
|
|
//Apply button handlers to new buttons
|
|
$(".communication_edit_button").off("click").on("click", CommunicationModule.handle_edit_button);
|
|
$(".communication_edit_save_button").off("click").on("click", CommunicationModule.handle_edit_save_button);
|
|
$(".communication_delete_button").off("click").on("click", CommunicationModule.handle_delete_button);
|
|
//Clear input fields
|
|
row.find(".communication_types").val("");
|
|
row.find(".communication_value").val("");
|
|
row.find(".communication_description").val("");
|
|
update_communication_types()
|
|
}
|
|
},
|
|
});
|
|
};
|
|
var handle_delete_button = function(){
|
|
var row = $(this).parent().parent();
|
|
var target_id = row.data("target-id");
|
|
|
|
$.ajax({
|
|
type: "DELETE",
|
|
url: "/api/communication_targets/"+target_id,
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if(is_ok(data)) {
|
|
row.remove();
|
|
}
|
|
}
|
|
});
|
|
};
|
|
var handle_edit_save_button = function(){
|
|
var row = $(this).parent().parent();
|
|
|
|
var com_entry = {};
|
|
com_entry.com_type = row.find(".communication_types").val();
|
|
com_entry.value = row.find(".communication_value").val();
|
|
com_entry.description = row.find(".communication_description").val();
|
|
|
|
$.ajax({
|
|
type: "PUT",
|
|
url: "/api/communication_targets/"+row.data("target-id"),
|
|
contentType: 'application/json',
|
|
data: JSON.stringify(com_entry),
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if(is_ok(data)) {
|
|
row.find("input").prop("readonly", true);
|
|
row.find("select").prop("disabled", true);
|
|
row.find(".communication_edit_save_button").prop("hidden", true);
|
|
row.find(".communication_edit_button").show();
|
|
}
|
|
}
|
|
});
|
|
};
|
|
return{
|
|
update_communication_types: update_communication_types,
|
|
handle_edit_button: handle_edit_button,
|
|
handle_save_new_button: handle_save_new_button,
|
|
handle_delete_button: handle_delete_button,
|
|
handle_edit_save_button: handle_edit_save_button,
|
|
}
|
|
})();
|
|
|
|
UnitModule = (
|
|
function(){
|
|
var get_units = function(){
|
|
$.ajax({
|
|
type: "GET",
|
|
url: "/api/units",
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if(is_ok(data)) {
|
|
var count = 0;
|
|
$(data).each(function(){
|
|
count++;
|
|
$("#add_operation_unit_unit").append("<option value=\""+this.unit_id+"\" data-unit_name=\""+this.name+"\">"+this.name+"</option>");
|
|
});
|
|
|
|
if(count>0 && $("#add_operation_unit_unit").val() != null){
|
|
$("#add_operation_unit_submit").prop("disabled", false);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
};
|
|
var add_unit_submit_listener = function(){
|
|
var unit_id = $("#add_operation_unit_unit").val();
|
|
var unit_name = $("#add_operation_unit_unit option:selected").data("unit_name");
|
|
var crew = $("#add_operation_unit_crew").val();
|
|
$.ajax({
|
|
type: "PUT",
|
|
url: "/api/units/"+unit_id+"/members/"+member_id+"?crew="+crew,
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if(is_ok(data)) {
|
|
$("#units_tbody").append("<tr>\n" +
|
|
" <td>"+unit_name+"</td>\n" +
|
|
" <td>"+crew+". Besetzung</td>\n" +
|
|
" <td><button type=\"button\" class=\"iconbutton delete_unit_from_member_button\" data-unit-id=\""+unit_id+"\">\n" +
|
|
" <svg width=\"1.5em\" height=\"1.5em\" fill=\"currentColor\">\n" +
|
|
" <use xlink:href=\"/img/bootstrap-icons.svg#trash\"/>\n" +
|
|
" </svg>\n" +
|
|
" </button></td>\n" +
|
|
" </tr>");
|
|
$(".delete_unit_from_member_button").off("click").on("click", UnitModule.delete_unit);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
var delete_unit = function(){
|
|
var unit_id = $(this).data("unit-id");
|
|
var row = $(this).parent().parent();
|
|
$.ajax({
|
|
type: "DELETE",
|
|
url: "/api/units/"+unit_id+"/members/"+member_id,
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if(is_ok(data)) {
|
|
row.remove();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
return{
|
|
get_units: get_units,
|
|
add_unit_submit_listener: add_unit_submit_listener,
|
|
delete_unit: delete_unit,
|
|
}
|
|
}
|
|
)();
|
|
|
|
LoginModule = (function(){
|
|
var login_allowed_checkbox_listener = function(){
|
|
var ro = $("#login_email").prop('readonly');
|
|
if(ro){
|
|
$("#login_email").prop('readonly', false);
|
|
}else{
|
|
$("#login_email").prop('readonly', true);
|
|
}
|
|
};
|
|
var login_submit = function(){
|
|
var login_allowed = $("#login_allowed").prop('checked');
|
|
|
|
if(login_allowed){
|
|
var email = $("#login_email").val();
|
|
if(email.trim() === ""){
|
|
alert("Bitte eine Email-Adresse für den Login angeben!");
|
|
}else{
|
|
var user_id = $("#login_save_button").data("user-id");
|
|
if(user_id === ""){//New entry
|
|
var user = $();
|
|
user.email = email.trim();
|
|
user.member_id = member_id;
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "/api/users/",
|
|
contentType: 'application/json',
|
|
data: JSON.stringify(user),
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if(is_ok(data)) {
|
|
$("#login_save_button").data("user-id", data.user_id);
|
|
}
|
|
}
|
|
});
|
|
}else{ //Update existing entry
|
|
var user = $();
|
|
user.user_id = user_id;
|
|
user.email = email.trim();
|
|
user.member_id = member_id;
|
|
|
|
$.ajax({
|
|
type: "PUT",
|
|
url: "/api/users/"+user_id,
|
|
contentType: 'application/json',
|
|
data: JSON.stringify(user),
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if(is_ok(data)) {
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}else{
|
|
//Delete user for member
|
|
$.ajax({
|
|
type: "DELETE",
|
|
url: "/api/users/"+$("#login_save_button").data("user-id"),
|
|
contentType: 'application/json',
|
|
timeout: 3000,
|
|
error: function () {
|
|
alert("Verbindung zum Server unterbrochen!");
|
|
},
|
|
success: function (data) {
|
|
if(is_ok(data)) {
|
|
$("#login_email").val("");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
return{
|
|
login_allowed_checkbox_listener: login_allowed_checkbox_listener,
|
|
login_submit: login_submit,
|
|
}
|
|
})(); |