EinsatzOnline/resources/js/member_management_profile.js

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