planning: added boat
This commit is contained in:
@@ -19,8 +19,13 @@
|
|||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
$items = $tpl->load('menu/item-switch', ['In die Saison-Planung aufnehmen', 'html-id' => 'switch-planning-include', 'icon' => 'fa-check']);
|
$items = $tpl->load('menu/item-switch', ['In die Saison-Planung aufnehmen', 'html-id' => 'switch-planning-include', 'icon' => 'fa-check']);
|
||||||
|
$items .= $tpl->load('menu/item-simple', ['', '#', 'html-id' => 'item-boat']);
|
||||||
$items .= $tpl->load('menu/item-simple', ['', '#', 'html-id' => 'item-steuermann']);
|
$items .= $tpl->load('menu/item-simple', ['', '#', 'html-id' => 'item-steuermann']);
|
||||||
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-edit', 'title' => 'Regatta bearbeiten', 'height' => 320]);
|
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-edit', 'title' => 'Regatta bearbeiten', 'height' => 400]);
|
||||||
|
|
||||||
|
// Select boat
|
||||||
|
$items = $tpl->load('input', ['html-id' => 'input-edit-boat-search', 'placeholder' => 'Suche', 'type' => 'text']);
|
||||||
|
$sp['menus'] .= $tpl->load('menu/modal', [$items, 'html-id' => 'menu-boat', 'height' => 500, 'width' => 350]);
|
||||||
|
|
||||||
// Select sailor
|
// Select sailor
|
||||||
$items = $tpl->load('input', ['html-id' => 'input-edit-search', 'placeholder' => 'Suche', 'type' => 'text']);
|
$items = $tpl->load('input', ['html-id' => 'input-edit-search', 'placeholder' => 'Suche', 'type' => 'text']);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
// Plannings
|
// Plannings
|
||||||
$content = '<p id="p-info" class="mb-0"></p>';
|
$content = '<p id="p-info" class="mb-0"></p>';
|
||||||
$thead = '<tr><th>Benutzer</th><th>Steuermann/-frau</th><th>Crew</th></tr>';
|
$thead = '<tr><th>Benutzer</th><th>Boot</th><th>Steuermann/-frau</th><th>Crew</th></tr>';
|
||||||
$content .= $tpl->load('table', [$thead, 'html-id' => 'table-plannings', 'css-class' => 'mb-0 text-nowrap']);
|
$content .= $tpl->load('table', [$thead, 'html-id' => 'table-plannings', 'css-class' => 'mb-0 text-nowrap']);
|
||||||
|
|
||||||
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-plannings']);
|
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-plannings']);
|
||||||
|
|||||||
@@ -57,11 +57,18 @@ async function onRegattaClicked(id) {
|
|||||||
// Your Planning
|
// Your Planning
|
||||||
if (planning != null) {
|
if (planning != null) {
|
||||||
$('#menu-item-yourplanning').show();
|
$('#menu-item-yourplanning').show();
|
||||||
|
var boat = null;
|
||||||
|
if (planning.boat != null) {
|
||||||
|
boat = (await dbGetData('boats', planning.boat)).sailnumber;
|
||||||
|
}
|
||||||
var steuermann = null;
|
var steuermann = null;
|
||||||
if (planning.steuermann != null) {
|
if (planning.steuermann != null) {
|
||||||
steuermann = (await dbGetData('sailors', planning.steuermann)).name;
|
steuermann = (await dbGetData('sailors', planning.steuermann)).name;
|
||||||
}
|
}
|
||||||
var crew = [steuermann == null ? '[noch unklar]' : steuermann];
|
var crew = [
|
||||||
|
boat == null ? '[Boot unklar]' : boat,
|
||||||
|
steuermann == null ? '[St.mann unklar]' : steuermann
|
||||||
|
];
|
||||||
crewA = planning.crew.split(',');
|
crewA = planning.crew.split(',');
|
||||||
for (i in crewA) {
|
for (i in crewA) {
|
||||||
var sailor = await dbGetData('sailors', crewA[i]);
|
var sailor = await dbGetData('sailors', crewA[i]);
|
||||||
|
|||||||
@@ -178,6 +178,9 @@ var siteScript = async function() {
|
|||||||
var club = null;
|
var club = null;
|
||||||
if (entry['club'] != null)
|
if (entry['club'] != null)
|
||||||
club = await dbGetData('clubs', entry['club']);
|
club = await dbGetData('clubs', entry['club']);
|
||||||
|
if (entry.planning.boat !== null) {
|
||||||
|
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||||
|
}
|
||||||
if (entry.planning.steuermann !== null) {
|
if (entry.planning.steuermann !== null) {
|
||||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||||
}
|
}
|
||||||
@@ -197,6 +200,7 @@ var siteScript = async function() {
|
|||||||
row.keywords.push(entry['name']);
|
row.keywords.push(entry['name']);
|
||||||
if (entry['number'] != null) row.keywords.push(entry['number']);
|
if (entry['number'] != null) row.keywords.push(entry['number']);
|
||||||
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
||||||
|
if (entry.planning.boat != null) row.keywords.push(entry.planning.boat);
|
||||||
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
||||||
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
||||||
|
|
||||||
|
|||||||
@@ -141,37 +141,6 @@ async function sailorsSearch() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function initSailors() {
|
|
||||||
sailors = [];
|
|
||||||
known = [];
|
|
||||||
var plannings = await dbGetDataIndex('plannings', 'user', USER_ID);
|
|
||||||
knownIds = {};
|
|
||||||
for (var p in plannings) {
|
|
||||||
p = plannings[p];
|
|
||||||
if (p.steuermann !== null) knownIds[p.steuermann] = true;
|
|
||||||
var crew = p.crew.split(',');
|
|
||||||
for (var c in crew) {
|
|
||||||
c = crew[c];
|
|
||||||
if (c != '') knownIds[c] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var dbSailors = await dbGetData('sailors');
|
|
||||||
dbSailors.sort(function(a,b){
|
|
||||||
return a.name.localeCompare(b.name);
|
|
||||||
});
|
|
||||||
for (var s in dbSailors) {
|
|
||||||
var item = '<a class="item-sailor-search" onclick="sailorSelected(' + dbSailors[s].id + ')">';
|
|
||||||
item += '<span>' + dbSailors[s].name + '</span>';
|
|
||||||
item += '<i class="fa fa-angle-right"></i>';
|
|
||||||
item += '</a>';
|
|
||||||
sailors.push({
|
|
||||||
keywords: [dbSailors[s].name],
|
|
||||||
content: item
|
|
||||||
});
|
|
||||||
if (dbSailors[s].id in knownIds) known.push(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function planningChangeCrew(sid = null) {
|
async function planningChangeCrew(sid = null) {
|
||||||
if (sid !== null) {
|
if (sid !== null) {
|
||||||
showLoader();
|
showLoader();
|
||||||
@@ -230,6 +199,136 @@ async function planningChangeSteuermann() {
|
|||||||
$('#input-edit-search').focus();
|
$('#input-edit-search').focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var boats = [];
|
||||||
|
var boatKnownIds = [];
|
||||||
|
var boatKnown = [];
|
||||||
|
|
||||||
|
async function boatSelected(bid) {
|
||||||
|
$('#menu-boat').hideMenu();
|
||||||
|
showLoader();
|
||||||
|
var rid = $('#switch-planning-include').data('regatta');
|
||||||
|
var action = 'planning_set_boat';
|
||||||
|
// add boat
|
||||||
|
var auth = {
|
||||||
|
id: localStorage.getItem('auth_id'),
|
||||||
|
hash: localStorage.getItem('auth_hash')
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
url: QUERY_URL + action,
|
||||||
|
method: 'POST',
|
||||||
|
data: {
|
||||||
|
auth: auth,
|
||||||
|
regatta: rid,
|
||||||
|
boat: bid
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
|
if (xhr.status == 401) {
|
||||||
|
log('authentification failed');
|
||||||
|
toastError('Authentifizierung fehlgeschlagen. Versuche es erneut.');
|
||||||
|
} else if (xhr.status == 0) {
|
||||||
|
toastError('Du bist momentan offline.<br>Stelle eine Internetverbindung her, um die Änderungen zu speichern');
|
||||||
|
} else {
|
||||||
|
log(action + ': unbekannter Fehler', status, error);
|
||||||
|
log(xhr);
|
||||||
|
toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000);
|
||||||
|
}
|
||||||
|
hideLoader();
|
||||||
|
},
|
||||||
|
success: async function (data, status, xhr) {
|
||||||
|
await sync();
|
||||||
|
if ((bid === null) || (bid in boatKnownIds)) {
|
||||||
|
planningEdit(rid);
|
||||||
|
hideLoader();
|
||||||
|
} else {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function boatsSearch() {
|
||||||
|
$('.item-boat-search').remove();
|
||||||
|
var item = '<a class="item-boat-search" onclick="boatSelected(null)">';
|
||||||
|
item += '<span style="font-style:italic;">noch unklar</span>';
|
||||||
|
item += '<i class="fa fa-angle-right"></i>';
|
||||||
|
item += '</a>';
|
||||||
|
$('#menu-boat').find('.content').find('.list-group').append(item);
|
||||||
|
if ($('#input-edit-boat-search').val().length == 0) {
|
||||||
|
boatKnown.forEach(function (entry) {
|
||||||
|
$('#menu-boat').find('.content').find('.list-group').append(entry);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if ($('#input-edit-boat-search').val().length >= 3) {
|
||||||
|
boats.forEach(function (entry) {
|
||||||
|
if (search($('#input-edit-boat-search').val(), entry.keywords)) {
|
||||||
|
$('#menu-boat').find('.content').find('.list-group').append(entry.content);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
var item = '<p class="item-boat-search">Zum Suchen mindestens 3 Zeichen eingeben</p>';
|
||||||
|
$('#menu-boat').find('.content').find('.list-group').append(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function planningChangeBoat() {
|
||||||
|
$('#input-edit-boat-search').val('').trigger('focusin').trigger('focusout');
|
||||||
|
boatsSearch();
|
||||||
|
$('#menu-edit').hideMenu();
|
||||||
|
$('#menu-boat').find('.menu-title').find('h1').text('Boot bearbeiten');
|
||||||
|
$('#menu-boat').showMenu();
|
||||||
|
$('#input-edit-boat-search').focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function initBoatsSailors() {
|
||||||
|
boats = [];
|
||||||
|
sailors = [];
|
||||||
|
boatKnown = [];
|
||||||
|
known = [];
|
||||||
|
var plannings = await dbGetDataIndex('plannings', 'user', USER_ID);
|
||||||
|
boatKnownIds = {};
|
||||||
|
knownIds = {};
|
||||||
|
for (var p in plannings) {
|
||||||
|
p = plannings[p];
|
||||||
|
if (p.boat !== null) boatKnownIds[p.boat] = true;
|
||||||
|
if (p.steuermann !== null) knownIds[p.steuermann] = true;
|
||||||
|
var crew = p.crew.split(',');
|
||||||
|
for (var c in crew) {
|
||||||
|
c = crew[c];
|
||||||
|
if (c != '') knownIds[c] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var dbBoats = await dbGetData('boats');
|
||||||
|
dbBoats.sort(function(a,b){
|
||||||
|
return a.sailnumber.localeCompare(b.sailnumber);
|
||||||
|
});
|
||||||
|
for (var b in dbBoats) {
|
||||||
|
var item = '<a class="item-boat-search" onclick="boatSelected(' + dbBoats[b].id + ')">';
|
||||||
|
item += '<span>' + dbBoats[b].sailnumber + ' - ' + dbBoats[b].name + '</span>';
|
||||||
|
item += '<i class="fa fa-angle-right"></i>';
|
||||||
|
item += '</a>';
|
||||||
|
boats.push({
|
||||||
|
keywords: [dbBoats[b].sailnumber, dbBoats[b].name],
|
||||||
|
content: item
|
||||||
|
});
|
||||||
|
if (dbBoats[b].id in boatKnownIds) boatKnown.push(item);
|
||||||
|
}
|
||||||
|
var dbSailors = await dbGetData('sailors');
|
||||||
|
dbSailors.sort(function(a,b){
|
||||||
|
return a.name.localeCompare(b.name);
|
||||||
|
});
|
||||||
|
for (var s in dbSailors) {
|
||||||
|
var item = '<a class="item-sailor-search" onclick="sailorSelected(' + dbSailors[s].id + ')">';
|
||||||
|
item += '<span>' + dbSailors[s].name + '</span>';
|
||||||
|
item += '<i class="fa fa-angle-right"></i>';
|
||||||
|
item += '</a>';
|
||||||
|
sailors.push({
|
||||||
|
keywords: [dbSailors[s].name],
|
||||||
|
content: item
|
||||||
|
});
|
||||||
|
if (dbSailors[s].id in knownIds) known.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function planningEdit(id) {
|
async function planningEdit(id) {
|
||||||
var regatta = await dbGetData('regattas', id);
|
var regatta = await dbGetData('regattas', id);
|
||||||
|
|
||||||
@@ -249,7 +348,13 @@ async function planningEdit(id) {
|
|||||||
$('#switch-planning-include').data('regatta', id);
|
$('#switch-planning-include').data('regatta', id);
|
||||||
if (planning !== null) {
|
if (planning !== null) {
|
||||||
$('#switch-planning-include').prop('checked', true);
|
$('#switch-planning-include').prop('checked', true);
|
||||||
|
$('#item-boat').show();
|
||||||
$('#item-steuermann').show();
|
$('#item-steuermann').show();
|
||||||
|
if (planning.boat !== null) {
|
||||||
|
$('#item-boat').find('span').text('Boot: ' + (await dbGetData('boats', planning.boat)).sailnumber);
|
||||||
|
} else {
|
||||||
|
$('#item-boat').find('span').html('Boot: <font style="font-style:italic;">noch unklar</font>');
|
||||||
|
}
|
||||||
if (planning.steuermann !== null) {
|
if (planning.steuermann !== null) {
|
||||||
$('#item-steuermann').find('span').text('Am Steuer: ' + (await dbGetData('sailors', planning.steuermann)).name);
|
$('#item-steuermann').find('span').text('Am Steuer: ' + (await dbGetData('sailors', planning.steuermann)).name);
|
||||||
} else {
|
} else {
|
||||||
@@ -274,6 +379,7 @@ async function planningEdit(id) {
|
|||||||
$('#menu-edit').find('.content').find('.list-group').append(item);
|
$('#menu-edit').find('.content').find('.list-group').append(item);
|
||||||
} else {
|
} else {
|
||||||
$('#switch-planning-include').prop('checked', false);
|
$('#switch-planning-include').prop('checked', false);
|
||||||
|
$('#item-boat').hide();
|
||||||
$('#item-steuermann').hide();
|
$('#item-steuermann').hide();
|
||||||
$('.item-crew').remove();
|
$('.item-crew').remove();
|
||||||
}
|
}
|
||||||
@@ -332,9 +438,11 @@ var siteScript = async function() {
|
|||||||
$('#select-year').change(selectChange);
|
$('#select-year').change(selectChange);
|
||||||
$('#input-search').on('input', drawList);
|
$('#input-search').on('input', drawList);
|
||||||
$('#switch-planning-include').parent().parent().click(planningSwitchChanged);
|
$('#switch-planning-include').parent().parent().click(planningSwitchChanged);
|
||||||
|
$('#item-boat').click(planningChangeBoat);
|
||||||
$('#item-steuermann').click(planningChangeSteuermann);
|
$('#item-steuermann').click(planningChangeSteuermann);
|
||||||
$('#input-edit-search').on('input', sailorsSearch);
|
$('#input-edit-search').on('input', sailorsSearch);
|
||||||
initSailors();
|
$('#input-edit-boat-search').on('input', boatsSearch);
|
||||||
|
initBoatsSailors();
|
||||||
}
|
}
|
||||||
|
|
||||||
today = getToday();
|
today = getToday();
|
||||||
@@ -393,6 +501,9 @@ var siteScript = async function() {
|
|||||||
if (entry['club'] != null)
|
if (entry['club'] != null)
|
||||||
club = await dbGetData('clubs', entry['club']);
|
club = await dbGetData('clubs', entry['club']);
|
||||||
if (entry.planning !== null) {
|
if (entry.planning !== null) {
|
||||||
|
if (entry.planning.boat !== null) {
|
||||||
|
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||||
|
}
|
||||||
if (entry.planning.steuermann !== null) {
|
if (entry.planning.steuermann !== null) {
|
||||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||||
}
|
}
|
||||||
@@ -488,10 +599,15 @@ var siteScript = async function() {
|
|||||||
|
|
||||||
// ZEILE 5
|
// ZEILE 5
|
||||||
row.content += '<div>';
|
row.content += '<div>';
|
||||||
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : 'noch unklar') + '</div>';
|
row.content += '<div>' + (entry.planning.boat !== null ? entry.planning.boat : '<i>Boot unklar</i>') + '</div>';
|
||||||
row.content += '</div>';
|
row.content += '</div>';
|
||||||
|
|
||||||
// ZEILE 6...
|
// ZEILE 6
|
||||||
|
row.content += '<div>';
|
||||||
|
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : '<i>St.mann unklar</i>') + '</div>';
|
||||||
|
row.content += '</div>';
|
||||||
|
|
||||||
|
// ZEILE 7...
|
||||||
for (var i in entry.planning.crew) {
|
for (var i in entry.planning.crew) {
|
||||||
row.content += '<div>';
|
row.content += '<div>';
|
||||||
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
||||||
|
|||||||
@@ -124,6 +124,9 @@ var siteScript = async function() {
|
|||||||
var club = null;
|
var club = null;
|
||||||
if (entry['club'] != null)
|
if (entry['club'] != null)
|
||||||
club = await dbGetData('clubs', entry['club']);
|
club = await dbGetData('clubs', entry['club']);
|
||||||
|
if (entry.planning.boat !== null) {
|
||||||
|
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||||
|
}
|
||||||
if (entry.planning.steuermann !== null) {
|
if (entry.planning.steuermann !== null) {
|
||||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||||
}
|
}
|
||||||
@@ -143,6 +146,7 @@ var siteScript = async function() {
|
|||||||
row.keywords.push(entry['name']);
|
row.keywords.push(entry['name']);
|
||||||
if (entry['number'] != null) row.keywords.push(entry['number']);
|
if (entry['number'] != null) row.keywords.push(entry['number']);
|
||||||
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
||||||
|
if (entry.planning.boat != null) row.keywords.push(entry.planning.boat);
|
||||||
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
||||||
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
||||||
|
|
||||||
@@ -215,10 +219,15 @@ var siteScript = async function() {
|
|||||||
|
|
||||||
// ZEILE 5
|
// ZEILE 5
|
||||||
row.content += '<div>';
|
row.content += '<div>';
|
||||||
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : 'noch unklar') + '</div>';
|
row.content += '<div>' + (entry.planning.boat !== null ? entry.planning.boat : '<i>Boot unklar</i>') + '</div>';
|
||||||
row.content += '</div>';
|
row.content += '</div>';
|
||||||
|
|
||||||
// ZEILE 6...
|
// ZEILE 6
|
||||||
|
row.content += '<div>';
|
||||||
|
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : '<i>St.mann unklar</i>') + '</div>';
|
||||||
|
row.content += '</div>';
|
||||||
|
|
||||||
|
// ZEILE 7...
|
||||||
for (var i in entry.planning.crew) {
|
for (var i in entry.planning.crew) {
|
||||||
row.content += '<div>';
|
row.content += '<div>';
|
||||||
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
||||||
|
|||||||
@@ -38,6 +38,12 @@ var siteScript = async function() {
|
|||||||
|
|
||||||
tbody += '<td>' + (await dbGetData('users', planning.user)).username + '</td>';
|
tbody += '<td>' + (await dbGetData('users', planning.user)).username + '</td>';
|
||||||
|
|
||||||
|
if (planning.boat != null) {
|
||||||
|
tbody += '<td>' + (await dbGetData('boats', planning.boat)).sailnumber + '</td>';
|
||||||
|
} else {
|
||||||
|
tbody += '<td>(noch unklar)</td>';
|
||||||
|
}
|
||||||
|
|
||||||
if (planning.steuermann != null) {
|
if (planning.steuermann != null) {
|
||||||
tbody += '<td>' + (await dbGetData('sailors', planning.steuermann)).name + '</td>';
|
tbody += '<td>' + (await dbGetData('sailors', planning.steuermann)).name + '</td>';
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user