diff --git a/INSTALL b/INSTALL index be117b4..930b82f 100644 --- a/INSTALL +++ b/INSTALL @@ -18,7 +18,7 @@ Yacht Management Software (YMS) Installation 1.3 Web GUI - Webserver -- PHP +- PHP (>= 8.0) - php-mysql - php-xml diff --git a/db/mariadb.sql b/db/mariadb.sql index 7dfd123..129af98 100644 --- a/db/mariadb.sql +++ b/db/mariadb.sql @@ -159,7 +159,7 @@ CREATE TABLE inventory ( weight float(5,2) UNSIGNED DEFAULT NULL, price decimal(12,2) DEFAULT NULL, purchdate date DEFAULT NULL, - invcond enum('unknown','new','good','normal','bad','repairable','defect') NOT NULL default 'unknown', + invcond enum('unknown','excellent','good','fair','bad','repairable','defect') NOT NULL default 'unknown', remarks varchar(150) DEFAULT NULL, PRIMARY KEY (invid), INDEX ix_invname (invname) @@ -178,7 +178,7 @@ CREATE TABLE cable ( color char(6) DEFAULT NULL, supplier smallint(6) DEFAULT NULL, manufacturer smallint(6) DEFAULT NULL, - cablecond enum('unknown','new','good','normal','bad','repairable','defect') NOT NULL default 'unknown', + cablecond enum('unknown','new','excellent','good','fair','bad','repairable','defect') NOT NULL default 'unknown', remarks varchar(150) DEFAULT NULL, PRIMARY KEY (cableid), INDEX ix_cablename (vid, cablename) @@ -222,11 +222,13 @@ CREATE TABLE provisions ( sid smallint(6) UNSIGNED DEFAULT NULL, boxid smallint(6) UNSIGNED NOT NULL DEFAULT 1, number smallint(6) UNSIGNED NOT NULL DEFAULT 1, + target smallint(6) UNSIGNED DEFAULT NULL, -- for shopping list weight float(5,2) UNSIGNED DEFAULT NULL, weight_net float(5,2) UNSIGNED DEFAULT NULL, unit tinyint(3) DEFAULT NULL, storedate date DEFAULT CURRENT_DATE, shelflife date DEFAULT NULL, + remarks varchar(150) DEFAULT NULL, PRIMARY KEY (provid) ) ENGINE=InnoDB; @@ -283,6 +285,7 @@ CREATE TABLE company ( customerno varchar(20), contractno varchar(20), remarks varchar(150) DEFAULT NULL, + flags set('deleted','historic') DEFAULT NULL, PRIMARY KEY (compid), UNIQUE INDEX ix_compname (compname, comptype) ) ENGINE=InnoDB; diff --git a/webgui/box.php b/webgui/box.php index ec65943..bdf6437 100644 --- a/webgui/box.php +++ b/webgui/box.php @@ -171,6 +171,11 @@ $box = $sth->fetch(PDO::FETCH_OBJ); echo '

', $box->label, "

\n"; +// Bootstrap grid +echo '
'; +echo '
'; +echo '
'; + echo '', "\n"; echo '\n"; echo '\n"; @@ -184,6 +189,46 @@ echo "
', _('Box type'),"", ($opt_boxtype[$box->boxtype] ?? ''), "
', _('Content'),"", $box->content, "
\n"; form_view_buttons($g_scriptname, $id); +echo '
'; // Column break +echo '
', "\n"; + +echo '
', "\n"; +echo '
', _('Images'), "
\n"; +echo '
', "\n"; + +$sql = "SELECT d.docid, d.title " + . "FROM docref AS r INNER JOIN document AS d using (docid) " + . "WHERE d.doctype='picture' AND r.reftype='box' AND r.refid=? " + . "ORDER BY d.title"; +$sth = $pdo->prepare($sql); +$sth->execute([$id]); +$res = $sth->fetchAll(); +// TODO hübsche Darstellung +$doccount = 0; +foreach ($res as $row) { + $doccount += 1; + echo '
'; + echo ''; +// echo ''; + echo '', $row['title'], ''; + echo "\n"; + // additionally direct download and go to document details page + echo '
'; + echo ' '; + echo ''; + echo "
\n"; + echo "\n"; // card-body +echo "
\n"; // card + +echo '
'; // col +echo '
'; // row +echo '
'; // container + // Inventory in box // WIP $sql = "SELECT invid, invname, weight, number FROM inventory WHERE conttype='box' AND boxid=?"; diff --git a/webgui/company.php b/webgui/company.php index 350db6e..0aa05ab 100644 --- a/webgui/company.php +++ b/webgui/company.php @@ -63,6 +63,8 @@ switch ($submit = form_get_action()) { $p[':customerno'] = gpc_get_string($_POST, 'customerno', 20); $p[':contractno'] = gpc_get_string($_POST, 'contractno', 20); $p[':remarks'] = gpc_get_string($_POST, 'remarks', 150); + $allowed = db_load_enum('company', 'flags'); + $p[':flags'] = gpc_get_set($_POST, 'flags', $allowed, true, NULL); db_exec_update('company', $p, 'compid'); $action = ACT_VIEW; break; @@ -136,7 +138,7 @@ $page = gpc_get_int($_REQUEST, 'p', 1); $rows_pp = gpc_get_int($_REQUEST, 'n', $user->rows_pp); $lastpage = ceil($numrows/$rows_pp); -$sql = "SELECT compid, compname, comptype, remarks " +$sql = "SELECT compid, compname, comptype, remarks, flags " . "FROM company"; if ($where) $sql .= ' WHERE ' . $where; $sql .= $order; @@ -212,6 +214,14 @@ foreach ($res as $row) { echo "\n"; echo '', $i; echo '', "\n"; + // icons for some flags + $flags = explode(',', $row['flags']); + if (in_array('historic', $flags)) { + echo ''; + } + if (in_array('deleted', $flags)) { + echo ''; + } echo "\n"; echo "", $row['compname'], "\n"; echo "", $opt_comptype[$row['comptype']], "\n"; @@ -251,7 +261,7 @@ elseif ($action == ACT_VIEW): // ========== VARIANT: view single record ===================================== $sql = "SELECT compname, comptype, comptype2, shortname, street, zip, city," - . " country, contact, phone, email, web, customerno, contractno, remarks " + . " country, contact, phone, email, web, customerno, contractno, remarks, flags " . "FROM company " . "WHERE compid=?"; $sth = $pdo->prepare($sql); @@ -283,6 +293,7 @@ echo make_weblink($company->web), ' ', $company->web, "\n"; echo '', _('Customer no.'),"", $company->customerno, "\n"; echo '', _('Contract no.'),"", $company->contractno, "\n"; echo '', _('Remarks'),"", $company->remarks, "\n"; +echo '', _('Flags'),"", $company->flags, "\n"; echo "\n"; form_view_buttons($g_scriptname, $id); @@ -330,7 +341,7 @@ elseif ($action == ACT_EDIT): echo '

', _('Edit Company'), "

\n"; $sql = "SELECT compname, comptype, comptype2, street, zip, city, country," - . " contact, phone, email, web, customerno, contractno, remarks " + . " contact, phone, email, web, customerno, contractno, remarks, flags " . "FROM company " . "WHERE compid=?"; $sth = $pdo->prepare($sql); @@ -409,6 +420,10 @@ form_create_select('comptype2', _('Secondary company type'), $g_opt_none + $opt_
+flags)); +?> diff --git a/webgui/documents.php b/webgui/documents.php index d7156c3..4eb8de2 100644 --- a/webgui/documents.php +++ b/webgui/documents.php @@ -6,6 +6,14 @@ * SPDX-License-Identifier: WTFPL ******************************************************************************/ +/* +doctype icons + generic: file-earmark + image: file-earmark-image + drawing: file-earmark-easel + pdf: file-earmark-pdf +*/ + require 'globals.inc'; require 'lib/gpc.inc'; require 'lib/fileutils.inc'; @@ -143,6 +151,12 @@ switch ($submit = form_get_action()) { break; case 'delete': + // check user rights + if ($user->role == ROLE_SAILOR) { + $g_error->Add(_('User level allows no deletion!')); + $action = ACT_VIEW; + break; + } // Security token needed! if (gpc_get_string($_POST, 'token', 16) != $_SESSION['token']) { $g_error->Add(_('Delete prohibited, invalid security token!')); @@ -189,21 +203,18 @@ switch ($submit = form_get_action()) { $p[':docid'] = $id; $p[':refid'] = gpc_get_int($_POST, 'refid'); $p[':reftype'] = gpc_get_enum($_POST, 'reftype', $opt_reftype, 'equipment'); - /* $sql = "INSERT INTO docref " - . " (docid, refid, reftype) " - . "VALUES " - . " (:docid, :refid, :reftype)"; - $sth = $pdo->prepare($sql); - $sth->bindValue(':docid', $id, PDO::PARAM_INT); - $sth->bindValue(':refid', $refid, PDO::PARAM_INT); - $sth->bindValue(':reftype', $reftype, PDO::PARAM_STR); - $sth->execute(); */ db_exec_insert('docref', $p); $action = ACT_VIEW; break; case 'delref': // remove only link, not critical so get without token is ok + // check user rights + if ($user->role == ROLE_SAILOR) { + $g_error->Add(_('User level allows no deletion!')); + $action = ACT_VIEW; + break; + } $drid = gpc_get_int($_GET, 'drid'); $sql = "DELETE FROM docref WHERE drid=?"; $sth = $pdo->prepare($sql); @@ -582,6 +593,18 @@ foreach ($sth->fetchAll() as $row) { $compids[] = $row['refid']; } +// Boxes +$boxids = array(); +$sql = "SELECT drid, reftype, refid, CONCAT_WS(' - ', label, NULLIF(content, '')) AS target " + . "FROM docref INNER JOIN box ON (docref.reftype='box' AND docref.refid=box.boxid) " + . "WHERE docid=?"; +$sth = $pdo->prepare($sql); +$sth->execute([$id]); +foreach ($sth->fetchAll() as $row) { + $references[] = $row; + $boxids[] = $row['refid']; +} + echo '', "\n"; echo "\n"; echo ""; @@ -600,6 +623,8 @@ foreach ($references as $ref) { echo ''; } elseif ($ref['reftype'] == 'company') { echo ''; + } elseif ($ref['reftype'] == 'box') { + echo ''; } echo ""; echo ""; @@ -616,18 +641,12 @@ echo '

', _('Add new reference'), "

\n"; // enum('vessel','box','equipment','project','task','user','company') // +// Reference options +$opt_reference = db_load_enum('docref', 'reftype', lookup:true, as_dict:true); // Equipment options // Do not include equipment that has already been referenced in the list! -$opt_equipment = array(); -$sql = "SELECT eid, ename FROM equipment WHERE vid=? ORDER BY ename"; -$sth = $pdo->prepare($sql); -$sth->execute([$user->vid]); -foreach ($sth->fetchAll() as $row) { - if (!in_array($row['eid'], $eids)) { - $opt_equipment[$row['eid']] = $row['ename']; - } -} +$opt_equipment = db_get_opt_equip($user->vid, exclude:$eids) ?> @@ -656,8 +675,6 @@ foreach ($sth->fetchAll() as $row) { $opt_company[$row['compid']] = $row['compname']; } } - - ?> @@ -673,6 +690,23 @@ foreach ($opt_company as $k => $v) { +vid, exclude:$boxids) +?> + + + + + + +\n"; echo "\n"; echo "\n"; echo "\n"; @@ -624,7 +637,7 @@ foreach ($sth->fetchAll() as $row) { } $sql = "SELECT eid, ename, model, serial, weight, price, purchdate," - . " supplier, manufacturer, ecat, shortname, remarks " + . " supplier, manufacturer, ecat, shortname, remarks, flags " . "FROM equipment " . "WHERE eid=?"; $sth = $pdo->prepare($sql); @@ -671,6 +684,10 @@ form_create_select('category', _('Category'), $g_opt_unknown + $opt_ecat, $equip +flags)); +?> diff --git a/webgui/globals.inc b/webgui/globals.inc index 49d8ddc..5d98c32 100644 --- a/webgui/globals.inc +++ b/webgui/globals.inc @@ -39,6 +39,11 @@ define ('ACT_UNLINK', 11); define ('ACT_MAIL', 12); define ('ACT_VIEW_LIST', 13); +define('ROLE_VESSEL', 'vessel'); +define('ROLE_CAPTAIN', 'captain'); +define('ROLE_HELMSMAN', 'helmsman'); +define('ROLE_SAILOR', 'sailor'); + // ========== PAGE START CODE ================================================= // global version string @@ -396,8 +401,8 @@ function db_exec_insert($table, $params) { global $pdo; global $g_error; $keys = array_keys($params); - $fields = join(',', array_map(function($s) { return ltrim($s, ':'); }, $keys)); - $pnames = join(',', $keys); + $fields = join(', ', array_map(function($s) { return ltrim($s, ':'); }, $keys)); + $pnames = join(', ', $keys); $sql = "INSERT INTO $table ($fields) VALUES ($pnames)"; // $sth = $pdo->prepare("INSERT INTO $table ($fields) VALUES ($pnames)"); $sth = $pdo->prepare($sql); @@ -433,7 +438,7 @@ function db_exec_update($table, $params, $pk) { unset($fields[':'.$pk]); $where = "$pk=:$pk"; } - $fieldlist = join(',', array_map(fn($s) => ltrim($s, ':') . '=' . $s, array_keys($fields))); + $fieldlist = join(', ', array_map(fn($s) => ltrim($s, ':') . '=' . $s, array_keys($fields))); $sql = "UPDATE $table SET $fieldlist WHERE $where"; $sth = $pdo->prepare($sql); try { @@ -526,12 +531,15 @@ function get_enum($enum) { 'drawing' => _('Drawing'), 'equipment' => _('Equipment'), 'estimated' => _('Estimated'), + 'excellent' => _('Excellent'), + 'fair' => _('Fair'), 'finished' => _('Finished'), 'fixed' => _('Fixed'), 'fuse' => _('Fuse'), 'generic' => _('Generic'), 'good' => _('Good'), 'high' => _('High'), + 'historic' => _('Historic'), 'invoice' => _('Invoice'), 'locked' => _('Locked'), 'low' => _('Low'), @@ -806,7 +814,7 @@ function db_get_opt_storage($vid) { return $list; } -function db_get_opt_box($vid) { +function db_get_opt_box($vid, $exclude=[]) { global $pdo; global $g_error; $list = array(); @@ -821,12 +829,14 @@ function db_get_opt_box($vid) { $g_error->Add($e->getMessage()); } foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) { - $list[$rec[0]] = $rec[1] . ' - '. $rec[2]; + if (! in_array($rec[0], $exclude)) { + $list[$rec[0]] = $rec[1] . ($rec[2] ? ' - '. $rec[2] : ''); + } } return $list; } -function db_get_opt_equip($vid, $default=NULL) { +function db_get_opt_equip($vid, $default=NULL, $exclude=[]) { global $pdo; global $g_error; if (isset($default)) { @@ -842,7 +852,9 @@ function db_get_opt_equip($vid, $default=NULL) { $g_error->Add($e->getMessage()); } foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) { - $list[$rec[0]] = $rec[1]; + if (! in_array($rec[0], $exclude)) { + $list[$rec[0]] = $rec[1]; + } } return $list; } @@ -1050,11 +1062,21 @@ function form_create_select($fieldname, $label, $optlist, $selval=NULL, $multipl echo "\n"; } -function form_create_checks($fieldname, $label, $optlist, $selected) { - echo '
', "\n"; - echo '\n"; - print_r($optlist); - echo "
\n"; +function form_create_checks($fieldname, $label, $optlist, $selected = []) { + echo '
'; + echo '', $label, "\n"; + echo '
'; + foreach ($optlist as $k => $v) { + echo '
'; + $checked = in_array($k, $selected, true) ? ' checked' : ''; + echo ''; + echo '
'; + } + echo '
'; + echo '
'; } // TODO DEPRECATED for touch multiple adjacent buttuns are not well suited. @@ -1418,7 +1440,7 @@ function make_weblink($dest) { } elseif (!in_array($scheme, ['http', 'https'], true)) { return ''; } - return ''; + return ''; } function make_maillink($dest) { diff --git a/webgui/img/pwa-192.png b/webgui/img/pwa-192.png new file mode 100644 index 0000000..9429b13 Binary files /dev/null and b/webgui/img/pwa-192.png differ diff --git a/webgui/img/pwa-512.png b/webgui/img/pwa-512.png new file mode 100644 index 0000000..85175f1 Binary files /dev/null and b/webgui/img/pwa-512.png differ diff --git a/webgui/index.php b/webgui/index.php index 1767ded..3e0222a 100644 --- a/webgui/index.php +++ b/webgui/index.php @@ -242,7 +242,11 @@ if (isset($vessel->loa)) { $h = round($row['wy'] * $f); $x = round($row['x'] * $f - $w / 2.0); $y = round($row['y'] * $f + $shape['height'] / 2.0 - $h / 2.0); - $rect = $g->addChild('rect'); + + $a = $g->addChild('a'); + $a->addAttribute('href', 'storage.php?f=view&id=' . $row['sid']); + + $rect = $a->addChild('rect'); $rect->addChild('title', $row['sname']); $rect->addAttribute('x', $x); $rect->addAttribute('y', $y); diff --git a/webgui/inventory.php b/webgui/inventory.php index 0a4ae2b..8888bc8 100644 --- a/webgui/inventory.php +++ b/webgui/inventory.php @@ -121,7 +121,7 @@ if ($action == ACT_DEFAULT): page_caption_search($pagetitle); -$flt = db_get_filter($user->id, 201, ['cond','name','txt']); +$flt = db_get_filter($user->id, 201, ['stor', 'cond','txt']); /* The only way to find out whether the inventory is on the current boat is to use @@ -301,7 +301,7 @@ echo '

', _('Add Inventory'), "

\n";
- +
@@ -310,12 +310,14 @@ echo '

', _('Add Inventory'), "

\n";
id, 201, ['stor','cond','txt']); +form_create_select('sid', _('Storage'), $g_opt_none + $opt_storage, $flt->stor); form_create_select('boxid', _('Box'), $g_opt_none + $opt_box); ?>
@@ -371,7 +373,10 @@ echo '
\n"; echo "\n"; diff --git a/webgui/lib/db.inc b/webgui/lib/db.inc new file mode 100644 index 0000000..a54699e --- /dev/null +++ b/webgui/lib/db.inc @@ -0,0 +1,10 @@ +\n" "Language-Team: LANGUAGE \n" @@ -16,58 +16,59 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: box.php:19 index.php:352 +#: box.php:19 index.php:353 globals.inc:1536 msgid "Boxes" msgstr "Kisten" #: box.php:70 checklist.php:59 maintenance.php:66 note.php:71 projects.php:96 -#: settings.php:45 storage.php:92 task.php:110 +#: settings.php:54 storage.php:92 task.php:111 #, php-format msgid "Unknown function '%s'!" msgstr "Unbekannte Funktion '%s'!" -#: box.php:94 box.php:134 box.php:250 storage.php:165 +#: box.php:94 box.php:134 box.php:295 storage.php:165 msgid "Label" msgstr "Etikett" -#: box.php:95 cable.php:177 cable.php:206 cable.php:239 company.php:203 -#: company.php:266 documents.php:374 documents.php:589 fuse.php:156 +#: box.php:95 cable.php:177 cable.php:206 cable.php:239 company.php:205 +#: company.php:276 documents.php:385 documents.php:612 fuse.php:156 #: fuse.php:207 fuse.php:232 note.php:104 note.php:179 storage.php:206 -#: storage.php:300 +#: storage.php:320 msgid "Type" msgstr "Typ" -#: box.php:96 box.php:177 box.php:259 cable.php:131 cable.php:212 cable.php:262 +#: box.php:96 box.php:182 box.php:304 cable.php:131 cable.php:212 cable.php:262 #: dropdown.php:44 dropdown.php:187 dropdown.php:235 storage.php:166 #: storage.php:233 tag.php:119 tag.php:181 tag.php:265 msgid "Color" msgstr "Farbe" -#: box.php:97 box.php:148 box.php:176 box.php:255 storage.php:167 +#: box.php:97 box.php:148 box.php:181 box.php:300 storage.php:167 msgid "Content" msgstr "Inhalt" -#: box.php:98 box.php:178 box.php:203 cable.php:211 equipment.php:451 -#: index.php:360 index.php:376 inventory.php:379 provisions.php:272 +#: box.php:98 box.php:183 box.php:248 cable.php:211 equipment.php:464 +#: index.php:361 index.php:377 inventory.php:381 provisions.php:284 msgid "Weight" msgstr "Gewicht" -#: box.php:106 box.php:180 box.php:210 cable.php:141 company.php:214 -#: company.php:299 documents.php:388 documents.php:600 documents.php:602 -#: dropdown.php:156 equipment.php:376 equipment.php:447 equipment.php:545 -#: equipment.php:568 equipment.php:590 fuse.php:167 inventory.php:273 -#: maintenance.php:190 measurement.php:227 projects.php:210 projects.php:258 -#: projects.php:346 provisions.php:195 storage.php:131 storage.php:175 -#: storage.php:252 tag.php:128 task.php:231 globals.inc:1049 +#: box.php:106 box.php:185 box.php:255 cable.php:141 company.php:216 +#: company.php:310 documents.php:399 documents.php:623 documents.php:625 +#: documents.php:627 dropdown.php:156 equipment.php:378 equipment.php:460 +#: equipment.php:558 equipment.php:581 equipment.php:603 fuse.php:167 +#: inventory.php:273 maintenance.php:190 measurement.php:227 projects.php:210 +#: projects.php:258 projects.php:346 provisions.php:198 storage.php:131 +#: storage.php:175 storage.php:252 storage.php:271 tag.php:128 task.php:248 +#: globals.inc:1085 msgid "View" msgstr "Ansehen" -#: box.php:115 cable.php:151 company.php:221 documents.php:396 dropdown.php:162 -#: equipment.php:386 equipment_js.php:247 fuse.php:176 index.php:317 +#: box.php:115 cable.php:151 company.php:231 documents.php:407 dropdown.php:162 +#: equipment.php:399 equipment_js.php:247 fuse.php:176 index.php:318 #: inventory.php:284 maintenance.php:197 maintenance.php:318 #: measurement.php:235 projects.php:219 projects.php:264 projects.php:351 -#: provisions.php:214 storage.php:143 storage.php:182 tag.php:136 task.php:239 -#: task.php:315 globals.inc:1050 globals.inc:1066 +#: provisions.php:219 storage.php:143 storage.php:182 tag.php:136 task.php:256 +#: task.php:332 globals.inc:1086 globals.inc:1102 msgid "Edit" msgstr "Bearbeiten" @@ -75,141 +76,158 @@ msgstr "Bearbeiten" msgid "Add Box" msgstr "Kiste hinzufügen" -#: box.php:138 box.php:179 box.php:266 index.php:400 inventory.php:208 -#: inventory.php:314 inventory.php:318 inventory.php:372 inventory.php:422 -#: provisions.php:250 provisions.php:278 provisions.php:326 storage.php:12 -#: globals.inc:542 +#: box.php:138 box.php:184 box.php:311 inventory.php:208 inventory.php:313 +#: inventory.php:320 inventory.php:374 inventory.php:424 provisions.php:260 +#: provisions.php:290 provisions.php:344 storage.php:12 storage.php:225 +#: globals.inc:564 globals.inc:1532 msgid "Storage" msgstr "Stauraum" -#: box.php:152 box.php:182 box.php:268 cable.php:214 cable.php:269 -#: company.php:204 company.php:285 company.php:409 documents.php:419 -#: documents.php:527 documents.php:744 equipment.php:358 equipment.php:418 -#: equipment.php:456 equipment.php:671 equipment_js.php:69 fuse.php:237 -#: index.php:438 index.php:558 inventory.php:383 inventory.php:450 +#: box.php:152 box.php:187 box.php:313 cable.php:214 cable.php:269 +#: company.php:206 company.php:295 company.php:420 documents.php:430 +#: documents.php:538 documents.php:778 equipment.php:360 equipment.php:431 +#: equipment.php:469 equipment.php:684 equipment_js.php:69 fuse.php:237 +#: index.php:445 index.php:555 inventory.php:385 inventory.php:452 #: maintenance.php:180 maintenance.php:280 maintenance.php:350 projects.php:176 #: projects.php:200 projects.php:290 projects.php:317 projects.php:403 -#: storage.php:122 storage.php:234 storage.php:340 +#: provisions.php:291 provisions.php:347 storage.php:122 storage.php:234 +#: storage.php:360 msgid "Remarks" msgstr "Bemerkungen" -#: box.php:156 company.php:245 company.php:412 documents.php:444 -#: documents.php:747 equipment.php:422 equipment.php:674 equipment_js.php:116 -#: equipment_js.php:283 index.php:442 inventory.php:322 maintenance.php:238 +#: box.php:156 company.php:255 company.php:427 documents.php:455 +#: documents.php:781 equipment.php:435 equipment.php:691 equipment_js.php:116 +#: equipment_js.php:283 index.php:449 inventory.php:324 maintenance.php:238 #: measurement.php:284 note.php:158 projects.php:293 projects.php:406 -#: provisions.php:252 settings.php:125 storage.php:208 storage.php:343 -#: task.php:269 globals.inc:1076 globals.inc:1083 +#: provisions.php:262 settings.php:146 storage.php:208 storage.php:363 +#: task.php:286 globals.inc:1112 globals.inc:1119 msgid "Save" msgstr "Speichern" -#: box.php:157 company.php:246 company.php:413 company.php:439 -#: documents.php:445 documents.php:748 dropdown.php:214 dropdown.php:281 -#: equipment.php:423 equipment.php:675 equipment_js.php:117 -#: equipment_js.php:251 equipment_js.php:284 index.php:443 inventory.php:323 +#: box.php:157 company.php:256 company.php:428 company.php:454 +#: documents.php:456 documents.php:782 dropdown.php:214 dropdown.php:281 +#: equipment.php:436 equipment.php:692 equipment_js.php:117 +#: equipment_js.php:251 equipment_js.php:284 index.php:450 inventory.php:325 #: maintenance.php:239 measurement.php:285 note.php:159 projects.php:294 -#: projects.php:407 provisions.php:253 search.php:36 settings.php:126 -#: storage.php:209 storage.php:344 task.php:270 globals.inc:1070 -#: globals.inc:1077 globals.inc:1084 globals.inc:1094 +#: projects.php:407 provisions.php:263 provisions.php:385 search.php:36 +#: settings.php:147 storage.php:209 storage.php:364 task.php:287 +#: globals.inc:1106 globals.inc:1113 globals.inc:1120 globals.inc:1130 msgid "Back" msgstr "Zurück" -#: box.php:175 box.php:253 inventory.php:369 +#: box.php:180 box.php:298 inventory.php:371 msgid "Box type" msgstr "Kistentyp" -#: box.php:194 +#: box.php:196 +msgid "Images" +msgstr "Bilder" + +#: box.php:217 +msgid "View image details" +msgstr "Bilddetails ansehen" + +#: box.php:218 +msgid "Download image" +msgstr "Bild herunterladen" + +#: box.php:223 +msgid "No referenced images" +msgstr "Keine verknüpften Bilder" + +#: box.php:239 msgid "Inventory in box" msgstr "Inventar in der Kiste" -#: box.php:201 index.php:374 inventory.php:12 search.php:80 globals.inc:1460 +#: box.php:246 index.php:375 inventory.php:12 search.php:80 globals.inc:1500 msgid "Inventory" msgstr "Inventar" -#: box.php:202 dropdown.php:150 inventory.php:261 inventory.php:307 -#: inventory.php:378 inventory.php:412 provisions.php:180 provisions.php:238 -#: provisions.php:271 provisions.php:302 +#: box.php:247 dropdown.php:150 inventory.php:261 inventory.php:307 +#: inventory.php:380 inventory.php:414 provisions.php:183 provisions.php:248 +#: provisions.php:282 provisions.php:316 msgid "Number" msgstr "Anzahl" -#: box.php:230 +#: box.php:275 msgid "Box is empty" msgstr "Kiste ist leer" -#: box.php:243 documents.php:337 inventory.php:19 inventory.php:194 -#: maintenance.php:87 measurement.php:174 globals.inc:130 globals.inc:131 +#: box.php:288 documents.php:348 inventory.php:19 inventory.php:194 +#: maintenance.php:87 measurement.php:174 globals.inc:135 globals.inc:136 msgid "― none ―" msgstr "― keine ―" -#: box.php:245 +#: box.php:290 msgid "Edit Box" msgstr "Kiste bearbeiten" -#: box.php:263 equipment.php:655 inventory.php:416 provisions.php:306 +#: box.php:308 equipment.php:668 inventory.php:418 provisions.php:324 msgid "Weight, kg" msgstr "Gewicht, kg" -#: box.php:282 cable.php:298 checklist.php:170 company.php:450 -#: documents.php:781 dropdown.php:287 equipment.php:701 equipment_js.php:293 -#: fuse.php:290 index.php:569 inventory.php:478 maintenance.php:371 -#: measurement.php:369 note.php:226 projects.php:419 provisions.php:340 -#: settings.php:132 storage.php:370 tag.php:294 task.php:398 +#: box.php:327 cable.php:298 checklist.php:170 company.php:465 +#: documents.php:815 dropdown.php:287 equipment.php:718 equipment_js.php:293 +#: fuse.php:290 index.php:566 inventory.php:480 maintenance.php:371 +#: measurement.php:369 note.php:226 projects.php:419 provisions.php:391 +#: settings.php:153 storage.php:390 tag.php:294 task.php:415 msgid "Unknown function call: Please report to system development!" msgstr "Unbekannter Funktionsaufruf: Bitte der Systementwickelung melden!" -#: cable.php:12 index.php:409 +#: cable.php:12 globals.inc:1540 msgid "Cables" msgstr "Kabel" -#: cable.php:70 company.php:73 documents.php:148 equipment.php:84 fuse.php:71 +#: cable.php:70 company.php:75 documents.php:162 equipment.php:86 fuse.php:71 #: inventory.php:96 measurement.php:116 note.php:49 projects.php:86 -#: provisions.php:73 storage.php:60 tag.php:57 task.php:87 +#: provisions.php:76 storage.php:60 tag.php:57 task.php:88 msgid "Delete prohibited, invalid security token!" msgstr "Löschen verboten, ungültiger Sicherheitstoken!" -#: cable.php:79 company.php:85 documents.php:216 dropdown.php:113 -#: equipment.php:219 fuse.php:82 index.php:89 inventory.php:108 -#: measurement.php:125 provisions.php:82 tag.php:68 +#: cable.php:79 company.php:87 documents.php:227 dropdown.php:113 +#: equipment.php:221 fuse.php:82 index.php:90 inventory.php:108 +#: measurement.php:125 provisions.php:85 tag.php:68 #, php-format msgid "Unknown function!" msgstr "Unbekannte Funktion!" -#: cable.php:110 company.php:186 documents.php:357 equipment.php:337 +#: cable.php:110 company.php:188 documents.php:368 equipment.php:339 #: fuse.php:135 inventory.php:244 maintenance.php:114 measurement.php:187 -#: projects.php:181 provisions.php:164 tag.php:101 task.php:201 +#: projects.php:181 provisions.php:167 tag.php:101 task.php:218 msgid "Apply" msgstr "Anwenden" -#: cable.php:110 company.php:186 documents.php:357 equipment.php:337 +#: cable.php:110 company.php:188 documents.php:368 equipment.php:339 #: fuse.php:135 inventory.php:244 maintenance.php:114 measurement.php:187 -#: projects.php:181 provisions.php:164 tag.php:101 task.php:201 +#: projects.php:181 provisions.php:167 tag.php:101 task.php:218 msgid "Go" msgstr "Start" -#: cable.php:111 company.php:187 documents.php:358 equipment.php:338 +#: cable.php:111 company.php:189 documents.php:369 equipment.php:340 #: fuse.php:136 inventory.php:245 maintenance.php:115 measurement.php:188 -#: projects.php:182 provisions.php:165 tag.php:102 task.php:202 +#: projects.php:182 provisions.php:168 tag.php:102 task.php:219 msgid "Reset filter to defaults" msgstr "Filter auf Standard zurücksetzen" -#: cable.php:111 company.php:187 documents.php:358 equipment.php:338 +#: cable.php:111 company.php:189 documents.php:369 equipment.php:340 #: fuse.php:136 inventory.php:245 maintenance.php:115 measurement.php:188 -#: projects.php:182 provisions.php:165 tag.php:102 task.php:202 +#: projects.php:182 provisions.php:168 tag.php:102 task.php:219 msgid "Clear" msgstr "Löschen" -#: cable.php:126 cable.php:205 fuse.php:235 globals.inc:504 +#: cable.php:126 cable.php:205 fuse.php:235 globals.inc:523 msgid "Cable" msgstr "Kabel" -#: cable.php:127 cable.php:169 cable.php:235 checklist.php:153 company.php:202 -#: company.php:241 company.php:264 company.php:344 dropdown.php:185 -#: dropdown.php:233 equipment.php:406 equipment.php:638 equipment_js.php:101 -#: equipment_js.php:268 index.php:430 inventory.php:259 inventory.php:303 -#: inventory.php:408 measurement.php:256 measurement.php:303 +#: cable.php:127 cable.php:169 cable.php:235 checklist.php:153 company.php:204 +#: company.php:251 company.php:274 company.php:355 dropdown.php:185 +#: dropdown.php:233 equipment.php:419 equipment.php:651 equipment_js.php:101 +#: equipment_js.php:268 index.php:437 inventory.php:259 inventory.php:303 +#: inventory.php:410 measurement.php:256 measurement.php:303 #: measurement.php:333 projects.php:169 projects.php:196 projects.php:245 -#: projects.php:283 projects.php:310 projects.php:377 provisions.php:234 -#: provisions.php:298 storage.php:120 storage.php:202 storage.php:296 -#: tag.php:156 task.php:348 +#: projects.php:283 projects.php:310 projects.php:377 provisions.php:244 +#: provisions.php:312 storage.php:120 storage.php:202 storage.php:316 +#: tag.php:156 task.php:365 msgid "Name" msgstr "Name" @@ -226,7 +244,7 @@ msgid "Cross section" msgstr "Querschnitt" #: cable.php:132 cable.php:213 cable.php:266 inventory.php:222 -#: inventory.php:262 inventory.php:382 inventory.php:434 +#: inventory.php:262 inventory.php:384 inventory.php:436 msgid "Condition" msgstr "Zustand" @@ -270,18 +288,17 @@ msgstr "Kabel löschen" msgid "Tag is not used anywhere" msgstr "Unbenutzte Tags" -#: checklist.php:12 index.php:411 +#: checklist.php:12 globals.inc:1548 msgid "Checklists" msgstr "Checklisten" -#: checklist.php:81 checklist.php:108 checklist.php:125 documents.php:376 -#: documents.php:415 documents.php:526 documents.php:726 +#: checklist.php:81 checklist.php:108 checklist.php:125 documents.php:387 +#: documents.php:426 documents.php:537 documents.php:760 msgid "Title" msgstr "Titel" #: checklist.php:82 checklist.php:126 checklist.php:157 maintenance.php:282 #: projects.php:173 projects.php:199 projects.php:246 projects.php:316 -#: task.php:193 msgid "State" msgstr "Status" @@ -301,115 +318,128 @@ msgstr "Checkliste bearbeiten" msgid "Delete checklist" msgstr "Lösche Checkliste" -#: company.php:12 documents.php:665 globals.inc:508 +#: company.php:12 documents.php:682 globals.inc:527 msgid "Company" msgstr "Firma" -#: company.php:80 +#: company.php:82 #, php-format msgid "Deleted company no. %d" msgstr "Firma Nr. %d gelöscht" -#: company.php:159 documents.php:310 inventory.php:193 inventory.php:226 -#: maintenance.php:86 measurement.php:173 globals.inc:129 +#: company.php:161 documents.php:321 inventory.php:193 inventory.php:226 +#: maintenance.php:86 measurement.php:173 globals.inc:134 msgid "― all ―" msgstr "― alle ―" -#: company.php:237 +#: company.php:220 +msgid "Historic company" +msgstr "Historische Firma" + +#: company.php:223 equipment.php:385 globals.inc:529 +msgid "Deleted" +msgstr "Gelöscht" + +#: company.php:247 msgid "Add Company" msgstr "Firma hinzufügen" -#: company.php:244 company.php:352 +#: company.php:254 company.php:363 msgid "Company type" msgstr "Firmenart" -#: company.php:265 company.php:348 equipment.php:445 equipment.php:642 +#: company.php:275 company.php:359 equipment.php:458 equipment.php:655 msgid "Short name" msgstr "Kurzbezeichnung" -#: company.php:267 +#: company.php:277 msgid "Secondary type" msgstr "Sekundärer Typ" -#: company.php:268 company.php:369 +#: company.php:278 company.php:380 msgid "Street" msgstr "Straße" -#: company.php:269 +#: company.php:279 msgid "Zip, City" msgstr "PLZ, Ort" -#: company.php:270 company.php:381 +#: company.php:280 company.php:392 msgid "Country" msgstr "Land" -#: company.php:271 company.php:385 +#: company.php:281 company.php:396 msgid "Contact" msgstr "Ansprechparter" -#: company.php:273 company.php:389 +#: company.php:283 company.php:400 msgid "Phone" msgstr "Telefon" -#: company.php:276 company.php:393 +#: company.php:286 company.php:404 msgid "Email" msgstr "Email" -#: company.php:279 company.php:397 +#: company.php:289 company.php:408 msgid "Web" msgstr "Web" -#: company.php:283 company.php:401 +#: company.php:293 company.php:412 msgid "Customer no." msgstr "Kundennr." -#: company.php:284 company.php:405 +#: company.php:294 company.php:416 msgid "Contract no." msgstr "Kontraktnr." -#: company.php:304 +#: company.php:296 company.php:425 dropdown.php:189 equipment.php:333 +#: equipment.php:470 equipment.php:689 +msgid "Flags" +msgstr "" + +#: company.php:315 msgid "Not referenced in any equipment" msgstr "In keiner Ausrüstung benutzt" -#: company.php:314 +#: company.php:325 msgid "Invoices" msgstr "Rechnungen" -#: company.php:324 +#: company.php:335 msgid "No invoices" msgstr "Keine Rechnungen" -#: company.php:330 +#: company.php:341 msgid "Edit Company" msgstr "Firma bearbeiten" -#: company.php:366 +#: company.php:377 msgid "Secondary company type" msgstr "Sekundärer Firmentyp" -#: company.php:373 +#: company.php:384 msgid "Zip" msgstr "PLZ" -#: company.php:377 +#: company.php:388 msgid "City" msgstr "Stadt" -#: company.php:425 +#: company.php:440 msgid "Delete Company" msgstr "Firma löschen" -#: company.php:426 documents.php:768 equipment.php:690 inventory.php:468 -#: note.php:217 storage.php:359 +#: company.php:441 documents.php:802 equipment.php:707 inventory.php:470 +#: note.php:217 storage.php:379 #, php-format msgid "Record no. %d" msgstr "Datensatz Nr. %d" -#: company.php:438 +#: company.php:453 msgid "Company can not be deleted as there are equipment-references!" msgstr "Firma kann nicht gelöscht werden da Ausrüstung zugeordnet ist!" -#: company.php:442 +#: company.php:457 msgid "" "Deleting a company is final. There is no way back. Only delete if you are " "absolute sure." @@ -425,176 +455,185 @@ msgstr "Neuer GD Imagestream kann nicht initialisiert werden" msgid "Resource not found!" msgstr "Resource nicht gefunden!" -#: documents.php:13 index.php:380 task.php:326 globals.inc:1464 +#: documents.php:21 index.php:381 task.php:343 globals.inc:1516 msgid "Documents" msgstr "Dokumente" -#: documents.php:53 +#: documents.php:61 msgid "Invalid file upload parameters." msgstr "Ungültige Dateiupload-Einstellungen" -#: documents.php:58 +#: documents.php:66 msgid "Exceeded filesize limit." msgstr "Größenlimit für Datei überschritten" -#: documents.php:63 +#: documents.php:71 msgid "No file for upload submitted. Try again by selecting a file first." msgstr "" "Keine Datei für den Upload angegeben. Beim nächsten Versuch zuerst Datei " "auswählen." -#: documents.php:75 equipment.php:127 +#: documents.php:83 equipment.php:129 #, php-format msgid "Mimetype '%s' not allowed for upload." msgstr "Dateityp '%s' nicht zum Hochladen zugelassen." -#: documents.php:80 +#: documents.php:88 #, php-format msgid "Mimetype mismatch: '%s'." msgstr "Konflikt beim Dateityp: '%s'" -#: documents.php:95 +#: documents.php:103 msgid "Document already exists!" msgstr "Dokument existiert bereits!" -#: documents.php:101 equipment.php:135 +#: documents.php:109 equipment.php:137 #, php-format msgid "File to big: %s.%s" msgstr "Datei zu groß: %s.%s" -#: documents.php:169 +#: documents.php:156 documents.php:214 +msgid "User level allows no deletion!" +msgstr "Benutzerlevel erlaubt keine Löschungen!" + +#: documents.php:183 #, php-format msgid "Removed %d references" msgstr "%d Referenzen entfernt" -#: documents.php:174 +#: documents.php:188 #, php-format msgid "Deleted document %s" msgstr "Dokument %s gelöscht" -#: documents.php:180 +#: documents.php:194 #, php-format msgid "SQL-Error: %s" msgstr "SQL-Fehler: %s" -#: documents.php:211 +#: documents.php:222 msgid "Removed document reference" msgstr "Dokumentreferenz wurde entfernt" -#: documents.php:334 note.php:103 +#: documents.php:345 note.php:103 msgid "Reference" msgstr "Referenz" -#: documents.php:375 documents.php:523 documents.php:722 +#: documents.php:386 documents.php:534 documents.php:756 msgid "Filename" msgstr "Dateiname" -#: documents.php:377 +#: documents.php:388 msgid "Links" msgstr "Verknüpfungen" -#: documents.php:411 +#: documents.php:422 msgid "Add Document" msgstr "Dokument hinzufügen" -#: documents.php:423 +#: documents.php:434 msgid "Document" msgstr "Dokument" -#: documents.php:426 +#: documents.php:437 msgid "Clear selection" msgstr "Auswah leeren" -#: documents.php:462 +#: documents.php:473 msgid "View Document" msgstr "Dokument ansehen" -#: documents.php:467 documents.php:737 +#: documents.php:478 documents.php:771 msgid "Document type" msgstr "Dokumentenart" -#: documents.php:470 +#: documents.php:481 msgid "Preview" msgstr "Vorschau" -#: documents.php:504 globals.inc:512 +#: documents.php:515 globals.inc:531 msgid "Drawing" msgstr "Zeichnung" -#: documents.php:511 +#: documents.php:522 msgid "PDF" msgstr "" -#: documents.php:513 +#: documents.php:524 msgid "Download" msgstr "" -#: documents.php:513 +#: documents.php:524 #, php-format msgid "%d Pages" msgstr "%d Seiten" -#: documents.php:522 +#: documents.php:533 msgid "Mimetype" msgstr "" -#: documents.php:524 +#: documents.php:535 msgid "File size" msgstr "Dateigröße" -#: documents.php:525 +#: documents.php:536 msgid "Upload date" msgstr "Uploaddatum" -#: documents.php:546 +#: documents.php:557 msgid "Document references" msgstr "Dokumentreferenzen" -#: documents.php:590 +#: documents.php:613 msgid "Used by" msgstr "Benutzt von" -#: documents.php:608 +#: documents.php:633 msgid "Remove reference" msgstr "Referenz entfernen" -#: documents.php:615 +#: documents.php:640 msgid "Add new reference" msgstr "Neue Referenz hinzufügen" -#: documents.php:635 equipment.php:13 equipment_js.php:14 fuse.php:236 -#: index.php:358 inventory.php:448 maintenance.php:95 maintenance.php:179 +#: documents.php:654 equipment.php:13 equipment_js.php:14 fuse.php:236 +#: index.php:359 inventory.php:450 maintenance.php:95 maintenance.php:179 #: maintenance.php:225 maintenance.php:274 maintenance.php:348 #: measurement.php:281 measurement.php:312 measurement.php:358 search.php:52 -#: globals.inc:513 globals.inc:1459 +#: globals.inc:532 globals.inc:1496 msgid "Equipment" msgstr "Ausrüstung" -#: documents.php:691 globals.inc:547 +#: documents.php:700 inventory.php:314 inventory.php:321 inventory.php:425 +#: storage.php:155 globals.inc:522 +msgid "Box" +msgstr "Kiste" + +#: documents.php:725 globals.inc:569 msgid "Vessel" msgstr "Yacht" -#: documents.php:705 +#: documents.php:739 msgid "Edit Document" msgstr "Dokument bearbeiten" -#: documents.php:733 globals.inc:518 +#: documents.php:767 globals.inc:539 msgid "Generic" msgstr "Allgemein" -#: documents.php:734 manual.php:10 globals.inc:524 +#: documents.php:768 manual.php:10 globals.inc:546 msgid "Manual" msgstr "Handbuch" -#: documents.php:735 globals.inc:521 +#: documents.php:769 globals.inc:543 msgid "Invoice" msgstr "Rechnung" -#: documents.php:767 +#: documents.php:801 msgid "Delete Document" msgstr "Lösche Dokument" -#: documents.php:773 +#: documents.php:807 msgid "" "Deleting a document item is final. There is no way back. Only delete if you " "are absolute sure." @@ -606,9 +645,9 @@ msgstr "" msgid "Lists" msgstr "Listen" -#: dropdown.php:31 dropdown.php:149 equipment.php:353 equipment_js.php:65 +#: dropdown.php:31 dropdown.php:149 equipment.php:355 equipment_js.php:65 #: fuse.php:130 fuse.php:159 fuse.php:204 fuse.php:231 fuse.php:261 -#: provisions.php:179 tag.php:118 tag.php:160 tag.php:182 tag.php:261 +#: provisions.php:182 tag.php:118 tag.php:160 tag.php:182 tag.php:261 msgid "Description" msgstr "Beschreibung" @@ -645,169 +684,173 @@ msgstr "Liste anzeigen: %s" msgid "Short" msgstr "Kurzbez." -#: dropdown.php:189 equipment.php:331 equipment.php:457 -msgid "Flags" -msgstr "" - #: dropdown.php:223 #, php-format msgid "Edit List: %s" msgstr "Liste bearbeiten: %s" -#: dropdown.php:280 equipment_js.php:93 globals.inc:1060 +#: dropdown.php:280 equipment_js.php:93 globals.inc:1096 msgid "Add" msgstr "Hinzufügen" -#: equipment.php:102 +#: equipment.php:104 #, php-format msgid "Deleted equipment no. %d" msgstr "Lösche Ausrüstung Nr. %d" -#: equipment.php:104 +#: equipment.php:106 #, php-format msgid "%d document links were removed" msgstr "%d Dokumentverknüpfungen wurden entfernt." -#: equipment.php:112 +#: equipment.php:114 msgid "No files for upload submitted" msgstr "Keine Dateien zum Hochladen angegeben" -#: equipment.php:131 +#: equipment.php:133 msgid "Filetype not allowed for upload:" msgstr "Dateityp nicht zum Hochladen zugelassen:" -#: equipment.php:149 +#: equipment.php:151 #, php-format msgid "Image scaled down to %dx%d" msgstr "Bild herunterskaliert auf %dx%d" -#: equipment.php:167 +#: equipment.php:169 #, php-format msgid "Internal error: Unknown mimetype %s!" msgstr "Interner Fehler: Unbekannter Mimetype %s!" -#: equipment.php:175 +#: equipment.php:177 msgid "Storage limit exceeded. Image not uploaded!" msgstr "Speicherlimit überschritten. Bild wurde nicht hochgeladen!" -#: equipment.php:313 +#: equipment.php:315 msgctxt "male" msgid "― none ―" msgstr "― keiner ―" -#: equipment.php:320 equipment.php:410 equipment.php:455 equipment.php:668 -#: provisions.php:156 provisions.php:275 provisions.php:315 +#: equipment.php:322 equipment.php:423 equipment.php:468 equipment.php:681 +#: provisions.php:159 provisions.php:287 provisions.php:333 msgid "Category" msgstr "Kategorie" -#: equipment.php:321 equipment.php:354 equipment.php:411 equipment.php:446 -#: equipment.php:645 +#: equipment.php:323 equipment.php:356 equipment.php:424 equipment.php:459 +#: equipment.php:658 msgid "Manufacturer" msgstr "Hersteller" -#: equipment.php:322 equipment.php:454 equipment.php:667 +#: equipment.php:324 equipment.php:467 equipment.php:680 msgid "Supplier" msgstr "Lieferant" -#: equipment.php:325 +#: equipment.php:327 msgid "Text" msgstr "" -#: equipment.php:355 equipment.php:414 equipment.php:449 equipment.php:647 +#: equipment.php:357 equipment.php:427 equipment.php:462 equipment.php:660 #: equipment_js.php:67 equipment_js.php:109 equipment_js.php:138 -#: equipment_js.php:276 index.php:434 index.php:508 +#: equipment_js.php:276 index.php:441 index.php:505 msgid "Model" msgstr "Modell" -#: equipment.php:356 equipment.php:450 equipment.php:651 equipment_js.php:68 +#: equipment.php:358 equipment.php:463 equipment.php:664 equipment_js.php:68 #: equipment_js.php:113 equipment_js.php:139 equipment_js.php:280 msgid "Serial" msgstr "Seriennummer" -#: equipment.php:357 +#: equipment.php:359 msgid "Age" msgstr "Alter" -#: equipment.php:369 +#: equipment.php:371 #, php-format msgid "%dm" msgstr "" -#: equipment.php:371 +#: equipment.php:373 #, php-format msgid "%dy" msgstr "" -#: equipment.php:403 equipment_js.php:98 +#: equipment.php:382 globals.inc:554 +msgid "Ordered" +msgstr "Bestellt" + +#: equipment.php:388 globals.inc:561 +msgid "Removed" +msgstr "Entfernt" + +#: equipment.php:416 equipment_js.php:98 msgid "Add Equipment" msgstr "Ausrüstung hinzufügen" -#: equipment.php:452 inventory.php:380 +#: equipment.php:465 inventory.php:382 msgid "Price" msgstr "Preis" -#: equipment.php:453 equipment.php:663 inventory.php:381 inventory.php:430 +#: equipment.php:466 equipment.php:676 inventory.php:383 inventory.php:432 msgid "Purchase date" msgstr "Kaufdatum" -#: equipment.php:464 +#: equipment.php:477 msgid "Images and documents" msgstr "Bilder und Dokumente" -#: equipment.php:512 +#: equipment.php:525 msgid "No referenced documents" msgstr "Keine verknüpften Dokumente" -#: equipment.php:520 +#: equipment.php:533 msgid "Add Image" msgstr "Bild hinzufügen" -#: equipment.php:536 +#: equipment.php:549 msgid "Maintenances" msgstr "Wartungen" -#: equipment.php:550 +#: equipment.php:563 msgid "No maintenance records found." msgstr "Keine Wartungsdatensätze gefunden." -#: equipment.php:554 +#: equipment.php:567 msgid "Add maintenance" msgstr "Wartung hinzufügen" -#: equipment.php:558 index.php:408 measurement.php:23 +#: equipment.php:571 measurement.php:23 msgid "Measurements" msgstr "Maße/Messungen" -#: equipment.php:573 +#: equipment.php:586 msgid "No measurement records found." msgstr "Keine Maße/Messungen gefunden." -#: equipment.php:577 measurement.php:251 +#: equipment.php:590 measurement.php:251 msgid "Add measurement" msgstr "Messung/Maß hinzufügen" -#: equipment.php:581 +#: equipment.php:594 msgid "Spare parts" msgstr "Ersatzteile" -#: equipment.php:595 +#: equipment.php:608 msgid "No spare parts found." msgstr "Keine Ersatzteile gefunden." -#: equipment.php:634 equipment_js.php:265 +#: equipment.php:647 equipment_js.php:265 msgid "Edit Equipment" msgstr "Ausrüstung bearbeiten" -#: equipment.php:659 inventory.php:426 +#: equipment.php:672 inventory.php:428 #, php-format msgid "Price, %s" msgstr "Preis, %s" -#: equipment.php:688 +#: equipment.php:705 msgid "Delete equipment" msgstr "Ausrüstung löschen" -#: equipment.php:694 +#: equipment.php:711 msgid "" "Deleting an equipment item is final. There is no way back. Only delete if " "you are absolute sure." @@ -825,11 +868,11 @@ msgstr "Marke" msgid "%d records" msgstr "%d Datensätze" -#: equipment_js.php:249 globals.inc:1068 globals.inc:1093 +#: equipment_js.php:249 globals.inc:1104 globals.inc:1129 msgid "Delete" msgstr "Löschen" -#: fuse.php:12 index.php:410 +#: fuse.php:12 globals.inc:1544 msgid "Fuses" msgstr "Sicherungen" @@ -862,7 +905,7 @@ msgstr "Stromstärke, Ampere" msgid "View fuse" msgstr "Sicherung ansehen" -#: fuse.php:230 globals.inc:517 +#: fuse.php:230 globals.inc:538 msgid "Fuse" msgstr "Sicherung" @@ -882,162 +925,142 @@ msgstr "Die Sicherung ist ungenutzt" msgid "Ghost" msgstr "" -#: index.php:12 +#: index.php:13 msgid "Start" msgstr "Start" -#: index.php:34 +#: index.php:35 #, php-format msgid "Selected vessel %d: %s" msgstr "Ausgewähltes Boot %d: %s" -#: index.php:40 index.php:61 +#: index.php:41 index.php:62 msgid "Access denied. You are not the captain." msgstr "Zugriff verweigert. Sie sind nicht der Kapitän." -#: index.php:55 +#: index.php:56 #, php-format msgid "Selected new vessel %d" msgstr "Neues Boot %d ausgewählt" -#: index.php:103 +#: index.php:104 msgid "Yacht data" msgstr "Yachtdaten" -#: index.php:105 globals.inc:546 +#: index.php:106 globals.inc:568 msgid "User" msgstr "Benutzer" -#: index.php:150 +#: index.php:151 msgid "Select" msgstr "Auswählen" -#: index.php:151 +#: index.php:152 msgid "Add yacht" msgstr "Yacht hinzufügen" -#: index.php:163 +#: index.php:164 msgid "Custom-build" msgstr "Eigenbau" -#: index.php:168 +#: index.php:169 #, php-format msgid "Built by %s" msgstr "Gebaut von %s" -#: index.php:302 +#: index.php:303 msgid "Boat data" msgstr "Bootsdaten" -#: index.php:304 +#: index.php:305 msgid "Loa" msgstr "LüA" -#: index.php:305 +#: index.php:306 msgid "Lwl" msgstr "LWL" -#: index.php:306 index.php:520 +#: index.php:307 index.php:517 msgid "Beam" msgstr "Breite" -#: index.php:307 index.php:524 +#: index.php:308 index.php:521 msgid "Draught" msgstr "Tiefgang" -#: index.php:308 index.php:528 +#: index.php:309 index.php:525 msgid "Draught, min." msgstr "Tiefgang, min." -#: index.php:309 index.php:532 +#: index.php:310 index.php:529 msgid "Displacement" msgstr "Verdrängung" -#: index.php:310 index.php:536 +#: index.php:311 index.php:533 msgid "Ballast" msgstr "Ballast" -#: index.php:311 index.php:540 +#: index.php:312 index.php:537 msgid "Belt position aft" msgstr "Gurtposition achtern" -#: index.php:312 index.php:544 +#: index.php:313 index.php:541 msgid "Belt position bow" msgstr "Gurtposition vorne" -#: index.php:328 +#: index.php:329 msgid "Statistics" msgstr "Statistik" -#: index.php:344 +#: index.php:345 msgid "Storage type" msgstr "Stauraumart" -#: index.php:359 index.php:375 index.php:381 +#: index.php:360 index.php:376 index.php:382 msgid "Count" msgstr "Anzahl" -#: index.php:396 +#: index.php:397 msgid "Base data" msgstr "Stammdaten" -#: index.php:398 -msgid "Selection lists" -msgstr "Auswahllisten" - -#: index.php:399 inventory.php:263 tag.php:12 globals.inc:1101 -msgid "Tags" -msgstr "" - -#: index.php:401 -msgid "Companies" -msgstr "Firmen" - -#: index.php:404 +#: index.php:409 msgid "Additional modules" msgstr "Zusatzmodule" -#: index.php:406 settings.php:12 -msgid "Settings" -msgstr "Einstellungen" - -#: index.php:407 search.php:102 -msgid "Tasks" -msgstr "Aufgaben" - -#: index.php:425 +#: index.php:432 msgid "Add additional yacht" msgstr "Zusätzliche Yacht hinzufügen" -#: index.php:484 +#: index.php:481 msgid "― Custom-built ―" msgstr "― Eigenbau ―" -#: index.php:500 +#: index.php:497 msgid "Edit Yacht" msgstr "Yacht bearbeiten" -#: index.php:504 +#: index.php:501 msgid "Vesselname" msgstr "Yachtname" -#: index.php:512 +#: index.php:509 msgid "LoA" msgstr "LüA" -#: index.php:516 +#: index.php:513 msgid "LwL" msgstr "LWL" -#: index.php:552 +#: index.php:549 msgid "Shape file" msgstr "Rumpfform-Datei" -#: index.php:553 +#: index.php:550 msgid "Shipyard" msgstr "Werft" -#: index.php:554 +#: index.php:551 msgid "Default Storage" msgstr "Standard-Stauraum" @@ -1046,10 +1069,14 @@ msgstr "Standard-Stauraum" msgid "Deleted inventory no. %d" msgstr "Inventar Nr. %d gelöscht" -#: inventory.php:260 inventory.php:372 +#: inventory.php:260 inventory.php:374 msgid "Container" msgstr "Behälter" +#: inventory.php:263 tag.php:12 globals.inc:1137 globals.inc:1552 +msgid "Tags" +msgstr "" + #: inventory.php:281 msgid "No tags assigned" msgstr "Keine Tags zugeordnet" @@ -1058,33 +1085,28 @@ msgstr "Keine Tags zugeordnet" msgid "Add Inventory" msgstr "Inventar hinzufügen" -#: inventory.php:311 inventory.php:421 +#: inventory.php:311 inventory.php:423 msgid "Container type" msgstr "Behälterart" -#: inventory.php:313 inventory.php:319 inventory.php:423 storage.php:155 -#: globals.inc:503 -msgid "Box" -msgstr "Kiste" - -#: inventory.php:373 +#: inventory.php:375 #, php-format msgid "%s in %s" msgstr "" -#: inventory.php:377 +#: inventory.php:379 msgid "Location ID" msgstr "Position (x, y, z)" -#: inventory.php:404 +#: inventory.php:406 msgid "Edit Inventory" msgstr "Inventar bearbeiten" -#: inventory.php:467 +#: inventory.php:469 msgid "Delete Inventory" msgstr "Inventar löschen" -#: inventory.php:471 +#: inventory.php:473 msgid "" "Deleting an inventory item is final. There is no way back. Only delete if " "you are absolute sure." @@ -1105,7 +1127,7 @@ msgstr "Benutzername:" msgid "Password:" msgstr "Kennwort:" -#: login.php:68 globals.inc:211 +#: login.php:68 globals.inc:216 msgid "Error" msgstr "Fehler" @@ -1145,7 +1167,7 @@ msgstr "" msgid "New login" msgstr "Neue Anmeldung" -#: maintenance.php:12 globals.inc:1462 +#: maintenance.php:12 globals.inc:1508 msgid "Maintenance" msgstr "Wartung" @@ -1166,7 +1188,7 @@ msgstr "Wartung hinzufügen" msgid "View Maintenance" msgstr "Wartung anzeigen" -#: maintenance.php:263 globals.inc:500 +#: maintenance.php:263 globals.inc:519 msgid "n/a" msgstr "" @@ -1178,7 +1200,7 @@ msgstr "Serie" msgid "No documents found." msgstr "Keine Dokumente gefunden." -#: maintenance.php:306 search.php:124 task.php:303 +#: maintenance.php:306 search.php:124 task.php:320 msgid "Annotations" msgstr "Notizen" @@ -1186,7 +1208,7 @@ msgstr "Notizen" msgid "No annotations for this maintenance" msgstr "Keine Notizen für diese Wartung" -#: maintenance.php:326 task.php:323 +#: maintenance.php:326 task.php:340 msgid "Add note" msgstr "Notiz hinzufügen" @@ -1194,7 +1216,8 @@ msgstr "Notiz hinzufügen" msgid "Edit Maintenance" msgstr "Wartung bearbeiten" -#: maintenance.php:358 projects.php:400 task.php:219 task.php:297 task.php:373 +#: maintenance.php:358 projects.php:400 task.php:214 task.php:236 task.php:314 +#: task.php:390 msgid "Status" msgstr "Status" @@ -1214,11 +1237,11 @@ msgstr "" msgid "3D" msgstr "" -#: measurement.php:34 task.php:16 task.php:291 +#: measurement.php:34 task.php:16 task.php:308 msgid "unassigned" msgstr "nicht zugeordnet" -#: measurement.php:214 measurement.php:300 +#: measurement.php:214 measurement.php:300 globals.inc:1528 msgid "Measurement" msgstr "Messung" @@ -1232,8 +1255,8 @@ msgid "Measured" msgstr "Gemessen" #: measurement.php:217 measurement.php:279 measurement.php:304 -#: measurement.php:356 provisions.php:181 provisions.php:241 provisions.php:274 -#: provisions.php:314 +#: measurement.php:356 provisions.php:184 provisions.php:251 provisions.php:286 +#: provisions.php:332 msgid "Unit" msgstr "Einheit" @@ -1270,7 +1293,7 @@ msgstr "Datum" msgid "Edit measurement" msgstr "Messung/Maß bearbeiten" -#: note.php:67 task.php:104 +#: note.php:67 task.php:105 msgid "Note deleted." msgstr "Notiz gelöscht." @@ -1320,7 +1343,7 @@ msgstr "" "Löschen einer Notiz ist endgültig. Es gibt keinen Weg zurück. Nur löschen " "wenn Sie sich absolut sicher sind." -#: projects.php:12 globals.inc:1463 +#: projects.php:12 globals.inc:1512 msgid "Projects" msgstr "Projekte" @@ -1344,7 +1367,7 @@ msgstr "Aufgaben die keinem Projekt zugeordnet sind" msgid "Add Project" msgstr "Projekt hinzufügen" -#: projects.php:287 projects.php:311 projects.php:381 task.php:298 task.php:374 +#: projects.php:287 projects.php:311 projects.php:381 task.php:315 task.php:391 msgid "Responsible" msgstr "Verantwortlich" @@ -1364,8 +1387,8 @@ msgstr "Zugeordnete Aufgaben" msgid "No assigned tasks found." msgstr "Keine zugeordneten Aufgaben gefunden." -#: projects.php:337 task.php:12 task.php:216 task.php:265 task.php:290 -#: globals.inc:543 +#: projects.php:337 task.php:12 task.php:233 task.php:282 task.php:307 +#: globals.inc:565 globals.inc:1524 msgid "Task" msgstr "Aufgabe" @@ -1395,91 +1418,116 @@ msgstr "Kosten endgültig, %s" msgid "Delete Project" msgstr "Lösche Projekt" -#: provisions.php:12 globals.inc:1461 +#: provisions.php:12 globals.inc:1504 msgid "Provisions" msgstr "Proviant" -#: provisions.php:182 +#: provisions.php:185 msgid "Stored" msgstr "Eingelagert" -#: provisions.php:183 +#: provisions.php:186 msgid "Best before" msgstr "Haltbar bis" -#: provisions.php:230 +#: provisions.php:234 provisions.php:366 +msgid "Shopping list" +msgstr "Einkaufsliste" + +#: provisions.php:240 msgid "Add provisions" msgstr "Proviant hinzufügen" -#: provisions.php:243 provisions.php:276 provisions.php:318 +#: provisions.php:253 provisions.php:288 provisions.php:336 msgid "Storedate" msgstr "Einlagerdatum" -#: provisions.php:247 provisions.php:277 provisions.php:322 +#: provisions.php:257 provisions.php:289 provisions.php:340 msgid "Shelflife" msgstr "Haltbarkeitsdatum" -#: provisions.php:273 +#: provisions.php:283 provisions.php:320 +msgid "Target" +msgstr "Soll-Menge" + +#: provisions.php:285 msgid "Weight net" msgstr "Nettogewicht" -#: provisions.php:293 +#: provisions.php:307 msgid "Edit provision" msgstr "Proviant bearbeiten" -#: provisions.php:310 +#: provisions.php:328 msgid "Weight net, kg" msgstr "Nettogewicht, kg" -#: provisions.php:335 +#: provisions.php:358 msgid "Delete provisions" msgstr "Proviant löschen" -#: search.php:12 search.php:32 globals.inc:1287 +#: provisions.php:384 +msgid "Use" +msgstr "Benutzen" + +#: search.php:12 search.php:32 globals.inc:1323 msgid "Search" msgstr "Suche" -#: settings.php:75 +#: search.php:102 +msgid "Tasks" +msgstr "Aufgaben" + +#: settings.php:12 globals.inc:1556 +msgid "Settings" +msgstr "Einstellungen" + +#: settings.php:84 msgid "YYYY-MM-DD" msgstr "" -#: settings.php:76 +#: settings.php:85 msgid "YYYY/MM/DD" msgstr "" -#: settings.php:77 +#: settings.php:86 msgid "DD.MM.YYYY" msgstr "" -#: settings.php:78 +#: settings.php:87 msgid "DD/MM/YYYY" msgstr "" -#: settings.php:79 +#: settings.php:88 msgid "MM/DD/YYYY" msgstr "" -#: settings.php:100 +#: settings.php:109 msgid "for current user" msgstr "für aktuellen Benutzer" -#: settings.php:102 +#: settings.php:120 +#, php-format +msgid "Menu %d" +msgstr "" + +#: settings.php:123 msgid "Date format" msgstr "Datumsformat" -#: settings.php:105 +#: settings.php:126 msgid "Number of rows per page" msgstr "Anzahl Zeilen je Seite" -#: settings.php:112 +#: settings.php:133 msgid "global for all users" msgstr "global für alle Benutzer" -#: settings.php:114 +#: settings.php:135 msgid "Maximal image width" msgstr "Maximale Bildbreite" -#: settings.php:118 +#: settings.php:139 msgid "Maximal image height" msgstr "Maximale Bildhöhe" @@ -1508,7 +1556,7 @@ msgstr "Stauraum hinzufügen" msgid "Typ" msgstr "Art" -#: storage.php:229 storage.php:335 +#: storage.php:229 storage.php:355 msgid "Capacity" msgstr "Kapazität" @@ -1532,39 +1580,47 @@ msgstr "Kisten im Stauraum" msgid "No boxes contained" msgstr "Keine Kisten enthalten" -#: storage.php:260 +#: storage.php:261 +msgid "Inventory in storage" +msgstr "Inventar im Stauraum" + +#: storage.php:276 +msgid "No inventory contained" +msgstr "Kein Inventar enthalten" + +#: storage.php:280 msgid "Provisions in storage" msgstr "Proviant im Stauraum" -#: storage.php:277 +#: storage.php:297 msgid "No provisions contained" msgstr "Kein Proviant enthalten" -#: storage.php:283 +#: storage.php:303 msgid "Edit Storage" msgstr "Stauraum bearbeiten" -#: storage.php:303 +#: storage.php:323 msgid "Position (x, y, z) in mm" msgstr "Position (x, y, z) in mm" -#: storage.php:317 +#: storage.php:337 msgid "Width (x, y, z) in mm" msgstr "Maße (x, y, z) in mm" -#: storage.php:331 +#: storage.php:351 msgid "Angle, deg." msgstr "Winkel, Grad" -#: storage.php:338 +#: storage.php:358 msgid "Capacity Unit" msgstr "Kapazitätseinheit" -#: storage.php:357 +#: storage.php:377 msgid "Delete Storage" msgstr "Stauraum löschen" -#: storage.php:363 +#: storage.php:383 msgid "" "Deleting a storage is final. There is no way back. Only delete if you are " "absolute sure." @@ -1592,7 +1648,7 @@ msgstr "Tag-Nutzung" msgid "Related tags" msgstr "Zugeordnete Tags" -#: tag.php:240 task.php:327 +#: tag.php:240 task.php:344 msgid "Not yet implemented" msgstr "Noch nicht implementiert" @@ -1604,64 +1660,64 @@ msgstr "Tag bearbeiten" msgid "Delete tag" msgstr "Tag löschen" -#: task.php:102 +#: task.php:103 msgid "Task deleted" msgstr "Aufgabe gelöscht" -#: task.php:192 task.php:218 task.php:292 task.php:354 +#: task.php:205 task.php:235 task.php:309 task.php:371 msgid "Priority" msgstr "Priorität" -#: task.php:217 task.php:262 task.php:291 task.php:353 globals.inc:538 +#: task.php:234 task.php:279 task.php:308 task.php:370 globals.inc:560 msgid "Project" msgstr "Projekt" -#: task.php:255 +#: task.php:272 msgid "Add Task" msgstr "Aufgabe hinzufügen" -#: task.php:288 +#: task.php:305 msgid "View Task" msgstr "Aufgabe anzeigen" -#: task.php:292 +#: task.php:309 msgid "none" msgstr "keine" -#: task.php:293 task.php:357 +#: task.php:310 task.php:374 msgid "Plan date" msgstr "Plandatum" -#: task.php:294 task.php:361 +#: task.php:311 task.php:378 msgid "Due date" msgstr "Fälligkeitsdatum" -#: task.php:295 task.php:365 +#: task.php:312 task.php:382 msgid "Started at" msgstr "Gestartet am" -#: task.php:296 task.php:369 +#: task.php:313 task.php:386 msgid "Finished at" msgstr "Fertiggestellt am" -#: task.php:319 +#: task.php:336 msgid "No annotations for this task" msgstr "Keine Notizen für diese Aufgabe" -#: task.php:342 +#: task.php:359 msgid "Edit Task" msgstr "Aufgabe bearbeiten" -#: task.php:387 +#: task.php:404 msgid "Delete Task" msgstr "Aufgabe löschen" -#: task.php:388 +#: task.php:405 #, php-format msgid "Task no. %d" msgstr "Aufgabe Nr.: %d" -#: task.php:391 +#: task.php:408 msgid "" "Deleting a task item is final. There is no way back. Only delete if you are " "absolute sure." @@ -1669,252 +1725,260 @@ msgstr "" "Löschen einer Aufgabe ist endgültig. Es gibt keinen Weg zurück. Nur löschen " "wenn Sie sich absolut sicher sind." -#: globals.inc:132 +#: globals.inc:137 msgid "― unknown ―" msgstr "― unbekannt ―" -#: globals.inc:150 +#: globals.inc:155 msgid "Information" msgstr "" -#: globals.inc:189 +#: globals.inc:194 msgid "Success" msgstr "Erfolg" -#: globals.inc:200 +#: globals.inc:205 msgid "Warning" msgstr "Warnung" -#: globals.inc:261 +#: globals.inc:268 msgid "Username or password was empty" msgstr "Benutzername oder Kennwort war leer" -#: globals.inc:272 +#: globals.inc:279 msgid "User account does not exist" msgstr "Benutzer existiert nicht" -#: globals.inc:281 +#: globals.inc:288 msgid "Username or password invalid" msgstr "Benutzername oder Kennwort ungültig" -#: globals.inc:304 +#: globals.inc:311 msgid "User not logged in" msgstr "Benutzer ist nicht angemeldet" -#: globals.inc:501 +#: globals.inc:520 msgid "Active" msgstr "Aktiv" -#: globals.inc:502 +#: globals.inc:521 msgid "Bad" msgstr "Schlecht" -#: globals.inc:505 +#: globals.inc:524 msgid "Catamaran" msgstr "Katamaran" -#: globals.inc:506 +#: globals.inc:525 msgid "Completed" msgstr "erledigt" -#: globals.inc:507 +#: globals.inc:526 msgid "Closed" msgstr "Geschlossen" -#: globals.inc:509 +#: globals.inc:528 msgid "Defect" msgstr "Defekt" -#: globals.inc:510 -msgid "Deleted" -msgstr "Gelöscht" - -#: globals.inc:511 +#: globals.inc:530 msgid "Done" msgstr "Fertig" -#: globals.inc:514 +#: globals.inc:533 msgid "Estimated" msgstr "Geschätzt" -#: globals.inc:515 +#: globals.inc:534 +msgid "Excellent" +msgstr "Sehr gut" + +#: globals.inc:535 +msgid "Fair" +msgstr "Normal" + +#: globals.inc:536 msgid "Finished" msgstr "Fertig" -#: globals.inc:516 +#: globals.inc:537 msgid "Fixed" msgstr "Fixiert" -#: globals.inc:519 +#: globals.inc:540 msgid "Good" msgstr "Gut" -#: globals.inc:520 +#: globals.inc:541 msgid "High" msgstr "Hoch" -#: globals.inc:522 +#: globals.inc:542 +msgid "Historic" +msgstr "Historisch" + +#: globals.inc:544 msgid "Locked" msgstr "Gesperrt" -#: globals.inc:523 +#: globals.inc:545 msgid "Low" msgstr "Niedrig" -#: globals.inc:525 +#: globals.inc:547 msgid "Medium" msgstr "Mittel" -#: globals.inc:526 +#: globals.inc:548 msgid "Monohull" msgstr "" -#: globals.inc:527 +#: globals.inc:549 msgid "New" msgstr "Neu" -#: globals.inc:528 +#: globals.inc:550 msgid "None" msgstr "Keine" -#: globals.inc:529 +#: globals.inc:551 msgid "Normal" msgstr "Normal" -#: globals.inc:530 +#: globals.inc:552 msgid "Ongoing" msgstr "Laufend" -#: globals.inc:531 +#: globals.inc:553 msgid "Open" msgstr "Offen" -#: globals.inc:532 -msgid "Ordered" -msgstr "Bestellt" - -#: globals.inc:533 +#: globals.inc:555 msgid "Paused" msgstr "Pausiert" -#: globals.inc:534 +#: globals.inc:556 msgid "Pending" msgstr "Ausstehend" -#: globals.inc:535 +#: globals.inc:557 msgid "Picture" msgstr "Bild" -#: globals.inc:536 +#: globals.inc:558 msgid "Planned" msgstr "Geplant" -#: globals.inc:537 +#: globals.inc:559 msgid "Precise" msgstr "Präzise" -#: globals.inc:539 -msgid "Removed" -msgstr "Entfernt" - -#: globals.inc:540 +#: globals.inc:562 msgid "Repairable" msgstr "Reparierbar" -#: globals.inc:541 +#: globals.inc:563 msgid "Rough" msgstr "Grob" -#: globals.inc:544 +#: globals.inc:566 msgid "Trimaran" msgstr "" -#: globals.inc:545 +#: globals.inc:567 msgid "Unknown" msgstr "Unbekannt" -#: globals.inc:548 +#: globals.inc:570 msgid "waiting" msgstr "wartend" -#: globals.inc:945 +#: globals.inc:971 msgid "No default storage defined for current vessel" msgstr "Kein Standardstauraum für die aktuelle Yacht definiert" -#: globals.inc:960 +#: globals.inc:986 #, php-format msgid "Selected fallback storage '%s'" msgstr "Ausgewählter Stauraum als Fallback '%s'" -#: globals.inc:1104 +#: globals.inc:1140 msgid "Tag assignment" msgstr "Tag-Zuordnung" -#: globals.inc:1108 +#: globals.inc:1144 msgid "(Separate by comma)" msgstr "(Getrennt mit Komma)" -#: globals.inc:1190 +#: globals.inc:1226 #, php-format msgid "%d B" msgstr "" -#: globals.inc:1192 +#: globals.inc:1228 #, php-format msgid "%.1f kB" msgstr "" -#: globals.inc:1194 +#: globals.inc:1230 #, php-format msgid "%.1f MB" msgstr "" -#: globals.inc:1199 globals.inc:1208 +#: globals.inc:1235 globals.inc:1244 #, php-format msgid "%d Byte" msgstr "" -#: globals.inc:1201 +#: globals.inc:1237 #, php-format msgid "%.1f kByte" msgstr "" -#: globals.inc:1203 +#: globals.inc:1239 #, php-format msgid "%.1f MByte" msgstr "" -#: globals.inc:1210 +#: globals.inc:1246 #, php-format msgid "approx. %.1f kByte" msgstr "ca. %.1f kByte" -#: globals.inc:1212 +#: globals.inc:1248 #, php-format msgid "approx. %.1f MByte" msgstr "ca. %.1f MByte" -#: globals.inc:1315 globals.inc:1318 +#: globals.inc:1351 globals.inc:1354 msgid "First" msgstr "Erster" -#: globals.inc:1316 globals.inc:1319 +#: globals.inc:1352 globals.inc:1355 msgid "Previous" msgstr "Zurück" -#: globals.inc:1353 globals.inc:1356 +#: globals.inc:1389 globals.inc:1392 msgid "Next" msgstr "Vor" -#: globals.inc:1354 globals.inc:1357 +#: globals.inc:1390 globals.inc:1393 msgid "Last" msgstr "Letzter" -#: globals.inc:1371 +#: globals.inc:1407 #, php-format msgid "Records %d to %d of %d" msgstr "Datensätze %d bis %d von %d" -#: globals.inc:1373 +#: globals.inc:1409 msgid "No records found" msgstr "Keine Datensätze gefunden." + +#: globals.inc:1520 +msgid "Companies" +msgstr "Firmen" + +#: globals.inc:1560 +msgid "Selection lists" +msgstr "Auswahllisten" diff --git a/webgui/locale/de_DE/LC_MESSAGES/yms.mo b/webgui/locale/de_DE/LC_MESSAGES/yms.mo index 3b86591..a2fd9cb 100644 Binary files a/webgui/locale/de_DE/LC_MESSAGES/yms.mo and b/webgui/locale/de_DE/LC_MESSAGES/yms.mo differ diff --git a/webgui/manifest.json b/webgui/manifest.json new file mode 100644 index 0000000..f83e089 --- /dev/null +++ b/webgui/manifest.json @@ -0,0 +1,20 @@ +{ + "name": "Shopping list", + "short_name": "Shopping", + "start_url": "/", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#0d6efd", + "icons": [ + { + "src": "img/pwa-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "img/pwa-512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/webgui/manual.php b/webgui/manual.php index b84c9f3..80e7f3f 100644 --- a/webgui/manual.php +++ b/webgui/manual.php @@ -134,7 +134,8 @@ Es handelt sich um die Eingabemöglichkeit in ein einzelnes Textfeld.

Benutzer können nicht über die Web-GUI eingerichtet werden.

Eine Kennwortänderung ist ebenfalls nicht über die Web-GUI möglich.

Es gibt die Berechtigungsebenen Kapitän (captain), -Steuermann (helmsman) und Matrose (sailor). +Steuermann (helmsman) und Matrose (sailor).

+

Jeder Benutzer kann das Hauptmenü entsprechend seinen Anforderungen einstellen.

Stammdaten

Diese Daten ändern sich nicht sehr häufig, sind aber für den Betrieb diff --git a/webgui/provisions.php b/webgui/provisions.php index 3e0a8f7..c866aa9 100644 --- a/webgui/provisions.php +++ b/webgui/provisions.php @@ -1,7 +1,7 @@ ', "\n"; echo "\n"; echo "

\n"; - echo "\n"; + echo '\n"; echo "\n"; echo "\n"; echo "\n"; @@ -224,6 +229,11 @@ echo $pagination; form_add_button($g_scriptname); +// Shopping list button +echo '
', "\n"; +echo ' ',_('Shopping list'), "\n"; +echo "
\n"; + elseif ($action == ACT_ADD): // ========== VARIANT: add record ============================================= @@ -258,7 +268,8 @@ echo '

', _('Add provisions'), "

\n"; elseif ($action == ACT_VIEW): // ========== VARIANT: view single record ===================================== -$sql = "SELECT provname, provcat, number, unit, weight, weight_net, storedate, shelflife, sid " +$sql = "SELECT provname, provcat, number, target, unit, weight, weight_net," + . " storedate, shelflife, sid, remarks " . "FROM provisions " . "WHERE provid=?"; $sth = $pdo->prepare($sql); @@ -269,13 +280,15 @@ echo '

', $prov->provname, "

\n"; echo '
", get_enum($ref['reftype']), "
", $i; echo '', "\n"; + // icons for some flags + $flags = explode(',', $row['flags']); + if (in_array('ordered', $flags)) { + echo ''; + } + if (in_array('deleted', $flags)) { + echo ''; + } + if (in_array('removed', $flags)) { + echo ''; + } echo "", $row['ename'], "", ($opt_manufacturer[$row['manufacturer']] ?? ''), "
', _('Box type'),"", $inventory->contty // Container with link echo '
', $inventory->conttype == 'storage' ? _('Storage') : _('Container'); echo '', sprintf(_('%s in %s'), $box['label'], $storagename); -// TODO insert link +// link to box +if ($inventory->conttype == 'box') { + echo '', "\n"; +} echo "
", _('Location ID'), "", $inventory->locationid, "
", ! isset($row['sid']) ? ' ' : '', $row['provname'], "", $row['number'], "', $row['number']; + if ($row['target']) echo ' (', $row['target'], ')'; + echo "", $opt_unit[$row['unit']], "", $row['storedate'], "", $row['shelflife'], "
', "\n"; echo '\n"; +echo "\n"; echo "\n"; echo "\n"; echo '\n"; echo '\n"; echo '\n"; -echo '\n"; +echo '\n"; echo '\n"; +echo '\n"; echo "
', _('Number'),"", $prov->number, "
", _('Target'), "", $prov->target, "
", _('Weight'), "", format_float($prov->weight, 2, 'kg'), "
", _('Weight net'), "", format_float($prov->weight_net, 2, 'kg'), "
', _('Unit'),"", $opt_unit[$prov->unit], "
', _('Category'),"", $opt_category[$prov->provcat] ?? 'n/a', "
', _('Storedate'),"", $prov->storedate, "
', _('Shelflife'),"$prov->shelflife
', _('Shelflife'),"", $prov->shelflife, "
', _('Storage'),"", ($opt_storage[$prov->sid] ?? ''), "
', _('Remarks'),"", nl2br($prov->remarks), "
\n"; form_view_buttons($g_scriptname, $id); @@ -283,7 +296,8 @@ form_view_buttons($g_scriptname, $id); elseif ($action == ACT_EDIT): // ========== VARIANT: edit single record ===================================== -$sql = "SELECT provname, provcat, number, weight, weight_net, unit, storedate, shelflife, sid " +$sql = "SELECT provname, provcat, number, target, unit, weight, weight_net," + . " storedate, shelflife, sid, remarks " . "FROM provisions " . "WHERE provid=?"; $sth = $pdo->prepare($sql); @@ -302,6 +316,10 @@ echo '

', _('Edit provision'), "

\n";
+
+ + +
@@ -324,7 +342,12 @@ form_create_select('provcat', _('Category'), $g_opt_none + $opt_category, $prov-
sid); - +?> +
+ + +
+\n"; @@ -334,6 +357,34 @@ elseif ($action == ACT_DELETE): echo '

', _('Delete provisions'), "

\n"; +?> +

Not yet implemented!

+', _('Shopping list'), "\n"; + +$sql = "SELECT provid, provname, unit, target - number AS buy " + . "FROM provisions " + . "WHERE target IS NOT NULL AND number < target " + . "ORDER BY provcat, provname"; +$sth = $pdo->query($sql); +$res = $sth->fetchAll(); +echo "
";
+foreach ($res as $row) {
+    echo $row['provname'];
+    echo ' ';
+    echo $row['buy'];
+    echo ' ';
+    echo $opt_unit[$row['unit']], "\n";
+}
+echo "
"; +echo '
', "\n"; +echo ' ',_('Use'), "\n"; +echo ' ',_('Back'), "\n"; +echo "
\n"; + else: // ========== ERROR UNKNOWN VARIANT =========================================== diff --git a/webgui/shapes/bavaria34.svg b/webgui/shapes/bavaria34.svg index 5916743..5644535 100644 --- a/webgui/shapes/bavaria34.svg +++ b/webgui/shapes/bavaria34.svg @@ -7,7 +7,9 @@ xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" - xmlns:svg="http://www.w3.org/2000/svg"> + Bavaria 34 + Etap 23Etap 23Etap 23Thomas Hooge + d="M 141.09882,38.437352 H 64.500753" + id="path1051-5-20-3-5-3-6-7-5-6-2-9" /> diff --git a/webgui/shopping.php b/webgui/shopping.php new file mode 100644 index 0000000..f425a62 --- /dev/null +++ b/webgui/shopping.php @@ -0,0 +1,75 @@ + +query($sql); +$res = $sth->fetchAll(PDO::FETCH_ASSOC); + +// aktuelle Einkaufsliste laden +// localStorage.setItem("liste", JSON.stringify(meineListe)); +// let liste = JSON.parse(localStorage.getItem("liste")); +//$liste = getEinkaufsliste(); +?> + + +Shopping list + + + + + + + + + +

YMS Einkaufsliste

+ + + +

Offen

+
+Loading ... +
+ +

Erledigt

+
+Empty. +
+ + + diff --git a/webgui/storage.php b/webgui/storage.php index 8ddaa18..a054b91 100644 --- a/webgui/storage.php +++ b/webgui/storage.php @@ -222,7 +222,7 @@ $sql = "SELECT sid, sname, stype, capacity, capaunit, x, y, z, wx, wy, wz, angle $sth = $pdo->prepare($sql); $sth->execute([$id]); $storage = $sth->fetch(PDO::FETCH_OBJ); -echo '

', $storage->sname, "

\n"; +echo '

', _('Storage'), ': ', $storage->sname, "

\n"; echo '', "\n"; echo '\n"; @@ -257,6 +257,26 @@ if (count($res) > 0) { echo '

', _('No boxes contained'), "

\n"; } +// show assigned inventory here +echo '

', _('Inventory in storage'), "

\n"; +$sql = "SELECT invid, invname FROM inventory WHERE conttype='storage' and sid=?"; +$sth = $pdo->prepare($sql); +$sth->execute([$id]); +$res = $sth->fetchall(); +if (count($res) > 0) { + echo '
', _('Typ'),"", $opt_stype[$storage->stype], "
'; + foreach ($res as $row) { + echo ""; + echo '"; + echo ''; + echo "\n"; + } + echo "
', $row['invname'], "
\n"; +} else { + echo '

', _('No inventory contained'), "

\n"; +} + +// show assigned provisions here echo '

', _('Provisions in storage'), "

\n"; $sql = "SELECT provid, provname, number, unit, storedate, shelflife FROM provisions WHERE sid=?"; diff --git a/webgui/task.php b/webgui/task.php index 449f58b..439da43 100644 --- a/webgui/task.php +++ b/webgui/task.php @@ -31,8 +31,9 @@ switch ($submit = form_get_action()) { case 'filter': $flt = array(); $flt['prio'] = gpc_get_enum($_POST, 'flt_prio', array_merge(array_keys($opt_priority), ['-2', '-1'])); - $flt['stat'] = gpc_get_enum($_POST, 'flt_stat', array_merge(array_keys($opt_state), ['-2', '-1'])); $flt['txt'] = gpc_get_string($_POST, 'flt_txt'); + $allowed = db_load_enum('task', 'taskstate'); + $flt['stat'] = gpc_get_set($_POST, 'flt_stat', $allowed); db_save_filter($flt, 206); $action = ACT_DEFAULT; break; @@ -138,10 +139,22 @@ if (strlen($flt->prio) > 2 ) { } elseif ($flt->prio == -1) { $w[] = 'priority IS NULL'; } -if (strlen($flt->stat) > 2 ) { +/*if (strlen($flt->stat) > 2 ) { $w[] = 'taskstate=:taskstate'; $p[':taskstate'] = $flt->stat; +} */ +$parts = ["taskstate=''", 'taskstate IS NULL']; +foreach ($flt->stat as $f) { + $parts[] = "FIND_IN_SET('$f', taskstate)"; } +if (!empty($parts)) { + if (count($parts) > 1) { + $w[] = '(' . join(' OR ', $parts) . ')'; + } else { + $w[] = $parts[0]; + } +} + $where = join(' AND ', $w); $order = ' ORDER BY t.taskid'; @@ -190,12 +203,16 @@ $res = $sth->fetchAll();
prio); -filter_create_select('flt_stat', _('State'), $g_opt_all + $opt_state, $flt->stat); +//filter_create_select('flt_stat', _('State'), $g_opt_all + $opt_state, $flt->stat); ?>
+stat); +?>