pfisjs/public/javascripts/pcal_pentry_edit_manager.js

1060 lines
31 KiB
JavaScript

var pcalPentryEditManager = function(websocket) {
var _ws = websocket;
var _date;
var _pentrytype;
var _uuid;
var _is_active = false;
var _pentry = null;
var _cache;
var _scroll_top = 0;
var _scroll_top_body = 0;
var _messages;
add_uids_to_event = function(ev) {
for(var idx in ev.involved)
{
ev.involved[idx].uid = generateUID();
console.log(ev.involved[idx]);
}
for(var idx in ev.involved_roles)
{
ev.involved_roles[idx].uid = generateUID();
for(var inv_idx in ev.involved_roles[idx].involved)
ev.involved_roles[idx].involved[inv_idx].uid = generateUID();
}
for(var idx in ev.locations)
{
ev.locations[idx].uid = generateUID();
console.log(ev.locations[idx]);
}
}
_ws.bind("pcal_pentry_edit_event_details_result", function(data) {
console.log("pcal_pentry_edit_event_details_result");
console.log(data);
if(_pentrytype === "tevent") {
for(idx in data.event.thereafter) {
if(data.event.thereafter[idx].uuid === _uuid) {
_pentry = data.event.thereafter[idx];
_pentry.parent_start = data.event.start;
break;
}
}
}
else
_pentry = data.event;
add_uids_to_event(_pentry);
pcal_pentry_edit_manager.intern_complete_start();
});
_ws.bind("pcal_pentry_edit_away_details_result", function(data) {
console.log("pcal_pentry_edit_away_details_result");
console.log(data);
_pentry = data.away;
pcal_pentry_edit_manager.intern_complete_start();
});
_ws.bind("pcal_pentry_edit_todo_details_result", function(data) {
console.log("pcal_pentry_edit_todo_details_result");
console.log(data);
_pentry = data.todo;
for(var idx in _pentry.involved) {
_pentry.involved[idx].uid = generateUID();
}
pcal_pentry_edit_manager.intern_complete_start();
});
_ws.bind("pcal_pentry_edit_keep_in_mind_details_result", function(data) {
console.log("pcal_pentry_edit_keep_in_mind_details_result");
console.log(data);
_pentry = data.keep_in_mind;
pcal_pentry_edit_manager.intern_complete_start();
});
_ws.bind("pcal_pentry_edit_vehicle_use_details_result", function(data) {
console.log("pcal_pentry_edit_vehicle_use_details_result");
console.log(data);
_pentry = data.vehicle_use;
for(var idx in _pentry.involved) {
_pentry.involved[idx].uid = generateUID();
}
pcal_pentry_edit_manager.intern_complete_start();
});
_ws.bind("get_all_vehicles_legacy_result", function(data) {
console.log('get_all_vehicles_legacy_result')
_cache["vehicles"] = data.vehicles;
_cache.vehicles_loaded = true;
pcal_pentry_edit_manager.intern_complete_start();
});
this.get_date = function() { return _date; }
this.set_date = function(date) {
_date = date;
console.log(_date);
}
this.is_active = function() {
return _is_active;
}
this.start = function(pentrytype, uuid) {
this.reset_messages();
this.reset_cache();
_is_active = true;
_pentrytype = pentrytype;
_uuid = uuid;
if(uuid === "new")
_uuid="new_" + generateUID();
console.log('start', _date, _pentrytype, _uuid);
if(_pentrytype === "event" || _pentrytype === "tevent") {
var parent_event_uuid = _uuid;
console.log(history.state);
if(history.state.direction === 'day_show_event' || history.state.direction === 'pentry_edit_main')
parent_event_uuid = history.state.event_uuid;
console.log('parent_uuid', parent_event_uuid);
history.replaceState({direction: 'pentry_edit_main', pentrytype: _pentrytype, uuid: _uuid, event_uuid: parent_event_uuid, date: _date.date}, document.title, location.pathname);
}
else {
if(history.state.direction.substr(0,12) === 'pentry_edit_')
history.replaceState({direction: 'pentry_edit_main', pentrytype: _pentrytype, uuid: _uuid, date: _date.date}, document.title, location.pathname);
else
history.pushState({direction: 'pentry_edit_main', pentrytype: _pentrytype, uuid: _uuid, date: _date.date}, document.title, location.pathname);
}
var renderdata = { pentrytype : _pentrytype,
date : _date,
uuid : _uuid,
edit_type : (_uuid.substr(0,4) === "new_" ? "erstellen" : "bearbeiten")
};
switch(_pentrytype) {
case "event":
renderdata["pentrytype_pretty"] = "Ereignis";
break;
case "tevent":
var pentry = $("[data-pentryuuid="+parent_event_uuid+"]");
console.log(pentry);
console.log(pentry.data('pentryname'));
console.log(pentry.data('eventstart'));
renderdata["pentrytype_pretty"] = "Folge-Ereignis zu " + pentry.data('pentryname');
renderdata["eventstart"] = pentry.data('eventstart');
break;
case "away":
renderdata["pentrytype_pretty"] = "Abwesenheit";
break;
case "keep_in_mind":
renderdata["pentrytype_pretty"] = "Zu-Beachten";
break;
case "todo":
renderdata["pentrytype_pretty"] = "Zu-Tun";
break;
case "vehicle_use":
renderdata["pentrytype_pretty"] = "Fahrzeugbenutzung";
break;
}
var html = pentry_edit_template(renderdata);
$("#pentry_edit_parent").html(html);
// load the pentry
pentry_from_storage = sessionStorage.getItem('pcal_pentry_edit_current');
if(pentry_from_storage !== null) {
console.log('found pentry in sessionstorage');
pentry_from_storage = JSON.parse(pentry_from_storage);
if(pentry_from_storage.uuid === _uuid && pentry_from_storage.pentrytype === _pentrytype)
_pentry = pentry_from_storage;
}
if(!_pentry) {
console.log('could not load pentry from sessionstorage')
if(_uuid.substr(0,4) === "new_") {
console.log('generate new entry')
_pentry = generate_new();
if(_pentrytype === 'tevent')
_pentry.parent_start = renderdata["eventstart"];
}
else {
console.log('loading pentry from server')
var send_data = {"date": _date.date, "answer_prefix" : "pcal_pentry_edit_" };
if(_pentrytype === "tevent") {
send_data["event"] = parent_event_uuid;
ws.send("event_details", send_data);
}
else {
send_data[_pentrytype] = _uuid;
ws.send(_pentrytype + "_details", send_data);
}
return; // intern_complete_start is in this case called when the loading is complete!
}
}
this.intern_complete_start();
}
this.show_edit_main = function() {
var data = {messages: _messages};
this.reset_messages();
if(_pentrytype === "tevent")
data["event"] = _pentry;
else
data[_pentrytype] = _pentry;
var html;
switch(_pentrytype) {
case "event":
html=edit_event_template(data);
break;
case "tevent":
html=edit_event_template(data);
break;
case "away":
html=edit_away_template(data);
break;
case "keep_in_mind":
html=edit_keep_in_mind_template(data);
break;
case "todo":
html=edit_todo_template(data);
break;
case "vehicle_use":
data.vehicles = _cache.vehicles;
html=edit_vehicle_use_template(data);
break;
}
$('.noEnterSubmit').keydown(function(e){
if ( e.which == 13 ) e.preventDefault();
});
$("#entryeditnav-form").empty();
$("#pentry_edit_root").children(".subroot").remove();
$("#pentry_edit_root").append(html);
$("#pentry_edit_root > .subroot > .new_flex_one").scrollTop(_scroll_top);
$("html, body").scrollTop(_scroll_top_body);
_scroll_top = 0;
_scroll_top_body = 0;
switch(_pentrytype) {
case "event":
case "tevent":
$('#form_pentry').validator({
custom: {
end_after_start: function(el)
{
var start = "";
console.log(_pentry.pentrytype === "tevent")
if(_pentry.pentrytype === "tevent")
start = _pentry.parent_start;
else
start = $('#edit_begin').val();
var end = $('#edit_end').val();
console.log(start);
console.log(end);
if(end.length === 0)
return;
if (Date.parse("2015-08-31T"+end) <= Date.parse("2015-08-31T"+start))
return "Das Ende des Ereignisses muss nach dessen Beginn liegen!";
},
when_end_then_start: function(el)
{
if(_pentry.pentrytype === "tevent")
return;
console.log("WHEN END THEN START");
var start = $('#edit_begin').val().trim();
var end = $('#edit_end').val().trim();
if(end.length > 0 && start.length===0)
return "Wenn Sie ein Ende angeben, müssen Sie auch einen Beginn angeben!";
}
}
}).on('invalid.bs.validator', function (e) {
console.log("INVALID");
console.log(e);
}).on('valid.bs.validator', function (e) {
console.log("VALID");
console.log(e);
});
break;
case "away":
$('.noDirectInput').keydown(function(e) {
var target = $(e.currentTarget);
var form_group = target.closest('.form-group');
var help_block = form_group.find('.with-errors');
if(! form_group.hasClass('has-error')) {
target.closest('.form-group').addClass('has-error');
}
if(! help_block.hasClass('has-halieus-error')) {
help_block.addClass('has-halieus-error');
help_block.append("<ul class='list-unstyled'><li>Sie müssen den 'Ändern'-Button benutzen!</li></ul>");
}
e.preventDefault();
});
$('.noDirectInput').keyup(function(e) { e.preventDefault(); });
$('.noDirectInput').keypress(function(e) { e.preventDefault(); });
$('.noDirectInput').focusout(function(e) {
var target = $(e.currentTarget);
var form_group = target.closest('.form-group');
var help_block = form_group.find('.with-errors');
help_block.empty();
help_block.removeClass('has-halieus-error');
});
/* fall though for validator */
case "keep_in_mind":
case "todo":
case "vehicle_use":
$('#form').validator().on('invalid.bs.validator', function (e) {
console.log("INVALID");
console.log(e);
}).on('valid.bs.validator', function (e) {
console.log("VALID");
console.log(e);
});
break;
}
$('#form_pentry').on('submit', function(e) {
console.log('submit');
e.preventDefault();
pcal_pentry_edit_manager.commit_pentry();
});
}
this.intern_complete_start = function() {
_pentry.pentrytype = _pentrytype;
if(_pentrytype === "tevent") {
_pentry.parent_event_uuid = history.state.event_uuid;
console.log('intern_complete_start: prent_event_uuid: ', _pentry.parent_event_uuid)
}
this.intern_save_to_storage();
$("#pentry_edit_parent").show();
console.log(_cache);
console.log(_pentrytype)
if(_pentrytype === "vehicle_use" && _cache.vehicles_loaded === false) {
console.log('loading vehicles ...')
_ws.send("get_all_vehicles_legacy", {});
}
else
this.show_edit_main();
}
this.intern_save_to_storage = function() {
sessionStorage.setItem('pcal_pentry_edit_current', JSON.stringify(_pentry));
}
this.intern_save_pentry = function() {
switch(_pentrytype) {
case "event":
_pentry.start = $("#edit_begin").val();
/* no break here to save common event/tevent-things*/
case "tevent":
_pentry.name = $("#edit_name").val(),
_pentry.name_secondary = $("#edit_name_secondary").val(),
_pentry.visibility = $("#combo_type").val(),
_pentry.end = $("#edit_end").val(),
_pentry.end_is_vague = $("#check_end_is_vague").prop("checked"),
_pentry.description = $("#area_description").val(),
_pentry.annotations = $("#area_annotations").val()
break;
case "away":
_pentry.reason = $("#edit_reason").val()
break;
case "keep_in_mind":
_pentry.name = $("#edit_name").val(),
_pentry.description = $("#area_description").val()
break;
case "todo":
_pentry.name = $("#edit_name").val(),
_pentry.description = $("#area_description").val()
break;
case "vehicle_use":
_pentry.name = $("#edit_name").val(),
_pentry.description = $("#area_description").val(),
_pentry.vehicle_id = $("#combo_vehicle").val()
break;
}
console.log(_pentry);
this.intern_save_to_storage();
}
this.save_and_goto = function(subpage, subpage_data) {
this.intern_save_pentry();
console.log('subpage: ', subpage);
console.log('subbpage_data: ', subpage_data);
_scroll_top = $("#pentry_edit_root > .subroot > .new_flex_one").scrollTop();
_scroll_top_body = $("html, body").scrollTop();
switch(subpage) {
case "select_pastoralunit":
ws.send('get_all_pastoralunits', {});
break;
case "add_predefined_location":
var jsondata = { "omitt": [] };
for(idx in _pentry.locations) {
var loc = _pentry.locations[idx];
if(loc.id != "other")
jsondata.omitt.push(loc.id);
}
ws.send('get_all_predefined_locations', jsondata)
break;
case "add_location":
this.intern_present_locationeditor("add", {});
break;
case "edit_location":
this.intern_present_locationeditor("edit", {location: subpage_data.location });
break;
case "add_actor":
var jsondata = { "omitt": [], "date": _date.date, "pentry": _pentry.uuid };
if(_pentry.pentrytype !== "away") {
var the_involved = _pentry.involved;
if(_pentry.pentrytype === "event" || _pentry.pentrytype === "tevent") {
role = subpage_data.role;
console.log('ADD ACTOR FOR ROLE '+role);
the_involved = this.get_involved_from_event(_pentry, role);
}
for(a in the_involved) {
var actor = the_involved[a];
if(actor.id !== "other" && actor.id !== "dn")
jsondata.omitt.push(actor.id);
}
_cache.role = role;
}
_ws.send("get_all_actors", jsondata);
break;
case "add_role":
_cache["roleeditor"]["type"] = "add";
_cache["roleeditor"]["role"] = "";
_ws.send("get_predefined_roles");
break;
case "edit_role":
_cache["roleeditor"]["type"] = "edit";
_cache["roleeditor"]["role"] = subpage_data.role;
_ws.send("get_predefined_roles");
break;
case "add_involved":
this.intern_present_involvededitor("add", { role: subpage_data.role});
break;
case "edit_involved":
this.intern_present_involvededitor("edit",{ role: subpage_data.role, involved: subpage_data.involved});
break;
case "add_parishdbpersongroup":
_cache["parishdbpersongroupselector"]["role"] = subpage_data.role;
_ws.send("get_parishdbelems_flat", {});
break;
}
}
this.show_searchbar = function(functiontocall) {
$("#entryeditnav-form").append("<div class='input-group'><div class='input-group-addon'><span class='glyphicon glyphicon-search'></span></div><input class='form-control' type='text' placeholder='Suche' style='display: inline;' oninput='" + functiontocall + "'></input></div>");
}
this.get_element_of_array_by_uid = function(array, uid) {
for(idx in array) {
if(array[idx].uid === uid)
return array[idx];
}
return null;
}
this.get_role_from_uid = function(event, uid) {
return this.get_element_of_array_by_uid(event.involved_roles, uid);
}
this.get_involved_from_event = function(event, role_uid) {
if(role_uid !== '') {
var role = this.get_role_from_uid(event, role_uid);
if(role)
return role.involved;
else {
console.log("WARNING: get_involved_from_event: Could not find role: " + role_uid);
return null;
}
}
return event.involved;
}
this.intern_present_subpage = function(name, html) {
history.pushState({direction: name, pentrytype: _pentrytype, uuid: _uuid, date: _date.date}, document.title, location.pathname);
$("#pentry_edit_root").children(".subroot").remove();
$("#pentry_edit_root").append(html);
$("html, body").scrollTop(0);
$("#pentry_edit_root").scrollTop(0);
}
_ws.bind('get_all_actors_result', function(data) {
var html;
console.log('get_all_actors_result', data);
if(data.result === "OK") {
var renderdata = { units: data.actors, for_role: _cache.role };
if(_pentry.pentrytype === "away") {
renderdata.actual_actor_id = _pentry.involveddb_id;
renderdata.actual_actor_name = _pentry.name;
}
console.log(renderdata);
html = actorselector_inlay_template(renderdata);
}
else
html = "ERROR";
delete _cache.role;
console.log('got actorselector');
pcal_pentry_edit_manager.intern_present_subpage('pentry_edit_actorselector', html)
});
_ws.bind('get_all_pastoralunits_result', function(data) {
var html;
console.log(data);
if(data.result === "OK") {
var renderdata = { actual_punit_dn : _pentry.punit.dn, actual_punit_name: _pentry.punit.name, pastoralunits: data.pastoralunits };
console.log(renderdata);
html = pastoralunitselector_inlay_template(renderdata);
}
else
html = "ERROR";
console.log('got pastoralunitseclector');
pcal_pentry_edit_manager.intern_present_subpage('pentry_edit_pastoralunitselector', html);
});
_ws.bind('get_all_predefined_locations_result', function(data) {
console.log(data);
var html;
if(data.result === "OK") {
var renderdata = { pentry_edit_base: "PENTRYBASE", units: data.locations };
console.log(renderdata);
html = locationselector_inlay_template(renderdata);
}
else
html = "ERROR";
pcal_pentry_edit_manager.intern_present_subpage('pentry_edit_locationselector', html);
});
_ws.bind('get_predefined_roles_result', function(data) {
console.log(data);
var html;
if(data.result === "OK") {
var role_uid = '';
var role_name = '';
if(_cache["roleeditor"]["type"] === 'edit') {
role_uid = _cache["roleeditor"]["role"];
role_name = pcal_pentry_edit_manager.get_role_from_uid(_pentry, role_uid).name;
}
var already_defined_roles = [];
for( idx in _pentry.involved_roles ) {
if(_pentry.involved_roles[idx].name !== role_name)
already_defined_roles.push(_pentry.involved_roles[idx].name);
}
var renderdata = { roles: data.roles, type : _cache["roleeditor"]["type"], role_name : role_name, role_uid : role_uid, already_defined_roles : already_defined_roles };
html = roleeditor_inlay_template(renderdata);
}
else
html = "ERROR";
pcal_pentry_edit_manager.intern_present_subpage('pentry_edit_roleeditor', html);
});
this.intern_present_involvededitor = function(type, data) {
var role = '';
var the_involved = _pentry.involved;
if(_pentrytype === "event" || _pentrytype === "tevent") {
role = data.role;
console.log('ADD/EDIT FOR ROLE '+role);
the_involved = this.get_involved_from_event(_pentry, role);
}
var involved = {};
if(type === 'edit') {
involved_uid = data.involved;
involved = this.get_element_of_array_by_uid(the_involved, involved_uid);
}
else
involved = { group:"", forename:"", surname:"", street:"", street_nr:"", postalcode:"", location:"", email:"", telephonenumber:"", uid:""};
var renderdata = { type: type, involved: involved, for_role: role };
var html = involvededitor_inlay_template(renderdata);
this.intern_present_subpage('pentry_edit_involvededitor', html);
}
this.intern_present_locationeditor = function(type, data) {
console.log(data);
console.log(_pentry.locations);
var location = {}
if(type === 'edit') {
location_uid = data.location;
location = this.get_element_of_array_by_uid(_pentry.locations, location_uid);
}
else
location = { name:"", sign:"", uid:""};
console.log(location);
var renderdata = { type : type, location: location };
var html = locationeditor_inlay_template(renderdata);
this.intern_present_subpage('pentry_edit_locationeditor', html);
}
_ws.bind('get_parishdbelems_flat_result', function(data) {
var role = '';
if(_pentrytype === "event" || _pentrytype === "tevent") {
role = _cache["parishdbpersongroupselector"]["role"]
console.log('ADD ACTOR FOR ROLE '+role);
}
var html;
if(data.result === "OK") {
for(idx in data.parishdb) {
data.parishdb[idx].uid = generateUID();
if(data.parishdb[idx].type === "group") {
for(midx in data.parishdb[idx].members)
data.parishdb[idx].members[midx].uid = generateUID();
}
}
var renderdata = { parishdb: data.parishdb, for_role: role }
html = parishdbpersongroupselector_inlay_template(renderdata);
}
else
html = "ERROR";
pcal_pentry_edit_manager.intern_present_subpage('pentry_edit_parishdbgroupselector', html);
});
this.set_pastoralunit = function(punit) {
_pentry.punit.dn = punit.dn;
_pentry.punit.name = punit.name;
_messages.other.push({ type: "success", title: "Kontext erfolgreich geändert", message: "Der Kontext wurde erfolgreich auf '" + punit.name + "' geändert." });
this.intern_save_to_storage();
// this.show_edit_main();
history.back();
}
this.add_edit_location = function(type, location) {
switch(type) {
case 'add':
location.uid = generateUID();
_pentry.locations.push(location);
_messages.locations.push({ type: "success", title: "Ort erfolgreich hinzugefügt", message: "Der Ort '" + location.name + "' wurde erfolgreich hinzugefügt." });
break;
case 'edit':
var loc = this.get_element_of_array_by_uid(_pentry.locations, location.uid);
if(loc) {
loc.name = location.name;
loc.sign = location.sign;
_messages.locations.push({ type: "success", title: "Ort erfolgreich bearbeitet", message: "'" + location.name + "' wurde erfolgreich bearbeitet." });
}
else
_messages.locations.push({ type: "danger", title: "Ort nicht geändert", message: "'" + location.name + "' konnte über seine UID keinem Eintrag zugeordnet werden; Bearbeitung verworfen!" });
break;
}
this.intern_save_to_storage();
//this.show_edit_main();
history.back();
}
this.add_location = function(location) {
this.add_edit_location('add', location);
}
this.edit_location = function(location) {
this.add_edit_location('edit', location);
}
this.add_edit_involved = function(type, involved) {
if(_pentrytype === "away") {
// special treatment here!
_pentry.name = involved.name;
_pentry.involveddb_id = involved.id;
_messages.involved['primary'].push({ type: "success", title: "Abwesende Person gesetzt", message: "'" + involved.name + "' wurde erfolgreich als abwesend gesetzt." });
this.intern_save_to_storage();
this.show_edit_main();
return;
}
console.log(involved);
var the_involved = _pentry.involved;
var role = '';
if(_pentrytype === "event" || _pentrytype === "tevent") {
role = involved.for_role;
if(role !== '')
_messages.involved[role] = [];
the_involved = this.get_involved_from_event(_pentry, involved.for_role);
delete involved.for_role;
}
if(role === '')
role = 'primary';
if(the_involved) {
switch(type) {
case 'add':
involved.uid = generateUID();
the_involved.push(involved);
_messages.involved[role].push({ type: "success", title: "Betroffenen erfolgreich hinzugefügt", message: "'" + involved.name + "' wurde erfolgreich hinzugefügt." });
break;
case 'edit':
var inv = this.get_element_of_array_by_uid(the_involved, involved.uid);
if(inv) {
inv.name = involved.name;
inv.group = involved.group;
inv.surname = involved.surname;
inv.forename = involved.forename;
inv.street = involved.street;
inv.street_nr = involved.street_nr;
inv.postalcode = involved.postalcode;
inv.location = involved.location;
inv.email = involved.email;
inv.telephonenumber = involved.telephonenumber;
_messages.involved[role].push({ type: "success", title: "Betroffenen erfolgreich bearbeitet", message: "'" + involved.name + "' wurde erfolgreich bearbeitet." });
}
else
_messages.involved.primary.push({ type: "danger", title: "Betroffener nicht geändert", message: "'" + involved.name + "' konnte über seine UID keinem Eintrag zugeordnet werden; Bearbeitung verworfen!" });
break;
}
}
else
_messages.involved.primary.push({ type: "danger", title: "Dienst nicht gefunden", message: "'" + involved.name + "' wurde nicht hinzugefügt, weil der angegebene Dienst nicht gefunden werden konnte!" });
this.intern_save_to_storage();
//this.show_edit_main();
history.back();
}
this.add_involved = function(involved) {
this.add_edit_involved('add', involved);
}
this.edit_involved = function(involved) {
this.add_edit_involved('edit', involved);
}
this.event_add_role = function(role) {
role.uid = generateUID();
role.involved = [];
console.log('about to add role:')
console.log(role);
_pentry.involved_roles.push(role);
this.intern_save_to_storage();
//this.show_edit_main();
history.back();
};
this.event_edit_role = function(role) {
console.log(role);
this.get_role_from_uid(_pentry, role.uid).name = role.name;
console.log(this.get_role_from_uid(_pentry, role.uid));
this.intern_save_to_storage();
//this.show_edit_main();
history.back();
};
this.commit_pentry = function() {
this.intern_save_pentry();
var data = { date: _date.date };
if(_pentrytype == "tevent") {
data["event"] = _pentry.parent_event_uuid;
data["thereafter"] = _pentry.uuid;
data["event_data"] = _pentry;
}
else {
data[_pentrytype] = _uuid;
data[_pentrytype+"_data"] = _pentry;
}
console.log(data);
_ws.send("commit_"+_pentrytype, data);
}
this.internal_commit_result = function(data) {
console.log(data);
pcal_pentry_edit_manager.finish();
history.back();
}
_ws.bind("commit_away_result", this.internal_commit_result);
_ws.bind("commit_keep_in_mind_result", this.internal_commit_result);
_ws.bind("commit_todo_result", this.internal_commit_result);
_ws.bind("commit_vehicle_use_result", this.internal_commit_result);
_ws.bind("commit_event_result", this.internal_commit_result);
_ws.bind("commit_tevent_result", this.internal_commit_result);
this.finish = function() {
$("#pentry_edit_parent").hide();
$("#pentry_edit_parent").empty();
sessionStorage.removeItem('pcal_pentry_edit_current');
_is_active = false;
_pentry = null;
this.reset_cache();
this.reset_messages();
}
this.reset_messages = function() {
_messages = {
other : [],
locations : [],
involved : { primary: [] }
}
}
this.reset_cache = function () {
_cache = {
roleeditor : {},
parishdbpersongroupselector: {},
vehicles : {},
vehicles_loaded : false
}
}
/* helper functions */
generateUID = function() {
return ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4)
}
generate_new_tevent = function() {
return {
uuid: _uuid,
name : "",
name_secondary : "",
visibility : "publ",
end : "",
end_is_vague : false,
locations: [],
involved : [],
involved_roles : [],
description : "",
annotations : ""
};
}
generate_new = function() {
switch(_pentrytype) {
case "event":
var ev = generate_new_tevent();
ev.punit = { name : "Rödental St. Hedwig", dn : "eb_bamberg/d_coburg/sb_cosl/p_roedental" };
ev.start = "";
return ev;
case "tevent":
return generate_new_tevent();
case "away":
return { uuid: _uuid, punit : { name : "Rödental St. Hedwig", dn : "eb_bamberg/d_coburg/sb_cosl/p_roedental" }, name: '', involveddb_id: '', reason: ''};
case "keep_in_mind":
return { uuid: _uuid, punit : { name : "Rödental St. Hedwig", dn : "eb_bamberg/d_coburg/sb_cosl/p_roedental" }, name: '', description: ''};
case "todo":
return { uuid: _uuid, punit : { name : "Rödental St. Hedwig", dn : "eb_bamberg/d_coburg/sb_cosl/p_roedental" }, name: '', description: '', involved: []};
case "vehicle_use":
return { uuid: _uuid, punit : { name : "Rödental St. Hedwig", dn : "eb_bamberg/d_coburg/sb_cosl/p_roedental" }, name: '', description: '', involved: [], vehicle_id: "r_pfarrbus"};
}
}
this.deletedialog_handle_show = function(_this_, e){
$etype = $(e.relatedTarget).attr('data-delete-type');
$ename = $(e.relatedTarget).attr('data-delete-name');
_this_.find('.modal-body p').text("Sind Sie sicher, dass Sie \"" + $ename + "\" als " + $etype + " löschen wollen?");
console.log($etype);
if($etype === "Dienst") {
var fieldset = $(e.relatedTarget).closest('fieldset');
_this_.find('.modal-footer #confirm').data('fieldset', fieldset);
}
else {
// Pass form reference to modal for submission on yes/ok
var tr = $(e.relatedTarget).closest('tr');
_this_.find('.modal-footer #confirm').data('tr', tr);
}
_this_.find('.modal-footer #confirm').data('delete-type', $etype);
};
function remove_from_array_by_uid(array, uid) {
var found = false;
var idx;
for(idx in array) {
if(array[idx].uid === uid) {
found = true;
break;
}
}
if(found)
array.splice(idx, 1);
return found;
}
this.deletedialog_handle_confirm = function(_this_) {
console.log('dialog_handle_confirm');
$('#confirmDelete').modal('hide');
var my_messages = [];
$etype = _this_.data('delete-type');
console.log($etype);
if($etype === "Dienst") {
var fieldset = _this_.data('fieldset');
var uid = fieldset.data('uid');
fieldset = fieldset.parent();
var found = remove_from_array_by_uid(_pentry.involved_roles, uid);
console.log("removeing role; found: ", found, uid);
var show_no_roles_message = false;
var f_parent;
if(fieldset.is(":last-child") && fieldset.is(":first-child")) {
show_no_roles_message = true;
f_parent = fieldset.parent();
console.log(f_parent);
}
fieldset.remove();
console.log(show_no_roles_message)
if(show_no_roles_message)
f_parent.append("<p>Keine Dienste angegeben.</p>");
}
else {
var tr = _this_.data('tr');
var uid = tr.data('uid');
if($etype === "Ort") {
var found = remove_from_array_by_uid(_pentry.locations, uid);
if(found) {
var tr = $('#confirmDelete').find('.modal-footer #confirm').data('tr');
if(tr.is(":last-child") && tr.is(":first-child")) {
var table = tr.closest("table");
var t_parent = table.parent();
table.remove();
t_parent.append("<p>Keine Orte ausgewählt.</p>");
}
else
tr.remove();
my_messages.push({ type: "success", title: "Entfernen erfolgreich", message: "Der zu entfernende Ort wurde erfolgreich entfernt."});
}
else
my_messages.push({ type: "danger", title: "Ort nicht gefunden", message: "Der zu entfernende Ort konnte nicht entfernt werden, da der angegeben Ort nicht gefunden werden konnte."});
var html = messageview_inlay_template({messages: my_messages});
$('#messageview_locations').append(html);
my_messages = {};
}
else {
var the_involved = _pentry.involved;
var role = '';
if(_pentrytype === "event" || _pentrytype === "tevent") {
role = tr.data('role');
the_involved = this.get_involved_from_event(_pentry, role);
}
if(role === '')
role = 'primary';
if(the_involved === null) {
console.log('REMOVING FROM ROLE '+ role);
console.log("WARNING: role not found!");
my_messages.push({ type: "danger", title: "Dienst nicht gefunden", message: "Der zu entfernende Betroffene konnte nicht entfernt werden, da der angegeben Dienst [" + role + "] nicht gefunden werden konnte."});
var html=messageview_inlay_template({messages: my_messages});
my_messages = {}
$('#messageview_involved_primary').append(html);
return;
}
var found = remove_from_array_by_uid(the_involved, uid);
if(found) {
my_messages.push( { type: "success", title: "Entfernen erfolgreich", message: "Der zu entfernende Betroffene wurde erfolgreich entfernt."});
var tr = $('#confirmDelete').find('.modal-footer #confirm').data('tr');
if(tr.is(":last-child") && tr.is(":first-child")) {
var table = tr.closest("table");
var t_parent = table.parent();
table.remove();
t_parent.append("<p>Keine Beteiligten ausgewählt.</p>");
}
else
tr.remove();
}
else
my_messages.push( { type: "danger", title: "Betroffener nicht gefunden", message: "Der zu entfernende Betroffene konnte nicht entfernt werden, da der angegeben Betroffene [" + data.data.involved + "; role: " + role + "] nicht gefunden werden konnte."});
var html = messageview_inlay_template({messages: my_messages});
$('#messageview_involved_' + role).append(html);
my_messages = {};
console.log(_pentry);
}
}
this.intern_save_to_storage();
};
}