Improve database schema and install components
This commit is contained in:
@@ -1,7 +1,14 @@
|
|||||||
YMS - Yacht Management System
|
YMS - Open Source Yacht Management System
|
||||||
Prototype
|
Preview Version
|
||||||
|
|
||||||
Many features are incomplete, buggy or missing.
|
Free, self-hosted software for managing your boat's equipment,
|
||||||
|
inventory, documents, maintenance and tasks.
|
||||||
|
|
||||||
|
Your boat. Your data. Your software.
|
||||||
|
|
||||||
|
|
||||||
|
This is work in progress:
|
||||||
|
Many features can be incomplete, buggy or missing.
|
||||||
Use at your own risk!
|
Use at your own risk!
|
||||||
|
|
||||||
If inserting a new user you have also to insert a setting value
|
If inserting a new user you have also to insert a setting value
|
||||||
@@ -9,8 +16,8 @@ to assign boat 0.
|
|||||||
|
|
||||||
To set your own passwords via console there is a helper script
|
To set your own passwords via console there is a helper script
|
||||||
ymspass.py
|
ymspass.py
|
||||||
|
|
||||||
Use it to get an SQL-statement for changing passwords.
|
Use it to get an SQL-statement for changing passwords.
|
||||||
|
|
||||||
For further information go to https://computerclub.hoogi.de/yms
|
For further information go to https://computerclub.hoogi.de/yms
|
||||||
(currently german only)
|
(currently german only)
|
||||||
|
|
||||||
|
|||||||
+109
-39
@@ -5,8 +5,10 @@
|
|||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
- check all values if unsigned can be used or not
|
- check all values if unsigned can be used or not
|
||||||
- implement foreign keys where possible
|
- implement foreign keys where missing and possible
|
||||||
|
- add referential actions where appropriate
|
||||||
- rename provisions to provision(?)
|
- rename provisions to provision(?)
|
||||||
|
- review defaults
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* User
|
/* User
|
||||||
@@ -125,9 +127,17 @@ CREATE TABLE storage (
|
|||||||
angle smallint(4) NOT NULL DEFAULT 0,
|
angle smallint(4) NOT NULL DEFAULT 0,
|
||||||
color char(6) DEFAULT NULL,
|
color char(6) DEFAULT NULL,
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
PRIMARY KEY (sid)
|
PRIMARY KEY (sid),
|
||||||
|
FOREIGN KEY fk_storage_vessel (vid)
|
||||||
|
REFERENCES vessel(vid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
/* intentionally after storage creation */
|
||||||
|
ALTER TABLE vessel
|
||||||
|
ADD CONSTRAINT fk_vessel_storage
|
||||||
|
FOREIGN KEY (sid_default)
|
||||||
|
REFERENCES storage(sid);
|
||||||
|
|
||||||
CREATE TABLE tag (
|
CREATE TABLE tag (
|
||||||
tagid smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT,
|
tagid smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
tagname varchar(20) NOT NULL,
|
tagname varchar(20) NOT NULL,
|
||||||
@@ -141,7 +151,10 @@ CREATE TABLE tagref (
|
|||||||
tagid smallint(6) UNSIGNED NOT NULL,
|
tagid smallint(6) UNSIGNED NOT NULL,
|
||||||
objid int(10) UNSIGNED NOT NULL,
|
objid int(10) UNSIGNED NOT NULL,
|
||||||
objtype enum('equip','inv','prov','doc', 'proj', 'task', 'maint') NOT NULL,
|
objtype enum('equip','inv','prov','doc', 'proj', 'task', 'maint') NOT NULL,
|
||||||
PRIMARY KEY (tagid, objid, objtype)
|
PRIMARY KEY (tagid, objid, objtype),
|
||||||
|
FOREIGN KEY fk_tagref_tag (tagid)
|
||||||
|
REFERENCES tag(tagid)
|
||||||
|
ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
/* TODO Boxes can be nested via parent
|
/* TODO Boxes can be nested via parent
|
||||||
@@ -157,7 +170,9 @@ CREATE TABLE box (
|
|||||||
weight float(5,2) UNSIGNED DEFAULT NULL,
|
weight float(5,2) UNSIGNED DEFAULT NULL,
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
PRIMARY KEY (boxid),
|
PRIMARY KEY (boxid),
|
||||||
INDEX ix_label (label)
|
INDEX ix_label (label),
|
||||||
|
FOREIGN KEY fk_box_storage (sid)
|
||||||
|
REFERENCES storage(sid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE TABLE equipment (
|
CREATE TABLE equipment (
|
||||||
@@ -165,7 +180,7 @@ CREATE TABLE equipment (
|
|||||||
vid smallint(6) NOT NULL DEFAULT 1,
|
vid smallint(6) NOT NULL DEFAULT 1,
|
||||||
ename varchar(80) NOT NULL,
|
ename varchar(80) NOT NULL,
|
||||||
shortname varchar(20) DEFAULT NULL,
|
shortname varchar(20) DEFAULT NULL,
|
||||||
model varchar(40),
|
model varchar(40) DEFAULT NULL,
|
||||||
ecat tinyint(3) DEFAULT NULL,
|
ecat tinyint(3) DEFAULT NULL,
|
||||||
serial varchar(30) DEFAULT NULL,
|
serial varchar(30) DEFAULT NULL,
|
||||||
supplier smallint(6) DEFAULT NULL,
|
supplier smallint(6) DEFAULT NULL,
|
||||||
@@ -175,25 +190,21 @@ CREATE TABLE equipment (
|
|||||||
weight float(5,2) UNSIGNED DEFAULT NULL,
|
weight float(5,2) UNSIGNED DEFAULT NULL,
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
flags set('ordered','removed','deleted') DEFAULT NULL,
|
flags set('ordered','removed','deleted') DEFAULT NULL,
|
||||||
PRIMARY KEY(eid)
|
PRIMARY KEY(eid),
|
||||||
|
FOREIGN KEY fk_equipment_vessel (vid)
|
||||||
|
REFERENCES vessel(vid)
|
||||||
|
ON DELETE RESTRICT,
|
||||||
|
FOREIGN KEY fk_equipment_supplier (supplier)
|
||||||
|
REFERENCES company(compid)
|
||||||
|
ON DELETE RESTRICT
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
/*
|
|
||||||
convert to
|
|
||||||
sid SMALLINT UNSIGNED NULL,
|
|
||||||
boxid SMALLINT UNSIGNED NULL,
|
|
||||||
CHECK (
|
|
||||||
(sid IS NOT NULL AND boxid IS NULL)
|
|
||||||
OR
|
|
||||||
(sid IS NULL AND boxid IS NOT NULL)
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
CREATE TABLE inventory (
|
CREATE TABLE inventory (
|
||||||
invid int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
invid int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
invname varchar(80) NOT NULL,
|
invname varchar(80) NOT NULL,
|
||||||
conttype enum('storage','box') NOT NULL DEFAULT 'storage',
|
conttype enum('storage','box') NOT NULL DEFAULT 'storage',
|
||||||
sid smallint(6) UNSIGNED NOT NULL DEFAULT 1,
|
sid smallint(6) UNSIGNED DEFAULT NULL,
|
||||||
boxid smallint(6) UNSIGNED NOT NULL DEFAULT 1,
|
boxid smallint(6) UNSIGNED DEFAULT NULL,
|
||||||
eid smallint(6) UNSIGNED DEFAULT NULL,
|
eid smallint(6) UNSIGNED DEFAULT NULL,
|
||||||
number smallint(6) UNSIGNED NOT NULL DEFAULT 1,
|
number smallint(6) UNSIGNED NOT NULL DEFAULT 1,
|
||||||
weight float(5,2) UNSIGNED DEFAULT NULL,
|
weight float(5,2) UNSIGNED DEFAULT NULL,
|
||||||
@@ -203,7 +214,18 @@ CREATE TABLE inventory (
|
|||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
flags set('ordered','removed','deleted') DEFAULT NULL,
|
flags set('ordered','removed','deleted') DEFAULT NULL,
|
||||||
PRIMARY KEY (invid),
|
PRIMARY KEY (invid),
|
||||||
INDEX ix_invname (invname)
|
INDEX ix_invname (invname),
|
||||||
|
FOREIGN KEY fk_inventory_storage (sid)
|
||||||
|
REFERENCES storage(sid),
|
||||||
|
FOREIGN KEY fk_inventory_box (boxid)
|
||||||
|
REFERENCES box(boxid),
|
||||||
|
FOREIGN KEY fk_inventory_equipment (eid)
|
||||||
|
REFERENCES equipment(eid)
|
||||||
|
CHECK (
|
||||||
|
(sid IS NOT NULL AND boxid IS NULL)
|
||||||
|
OR
|
||||||
|
(sid IS NULL AND boxid IS NOT NULL)
|
||||||
|
)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE TABLE cable (
|
CREATE TABLE cable (
|
||||||
@@ -222,7 +244,13 @@ CREATE TABLE cable (
|
|||||||
cablecond enum('unknown','new','excellent','good','fair','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,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
PRIMARY KEY (cableid),
|
PRIMARY KEY (cableid),
|
||||||
INDEX ix_cablename (vid, cablename)
|
INDEX ix_cablename (vid, cablename),
|
||||||
|
FOREIGN KEY fk_cable_vessel (vid)
|
||||||
|
REFERENCES vessel(vid),
|
||||||
|
FOREIGN KEY fk_cable_supplier (supplier)
|
||||||
|
REFERENCES company(compid),
|
||||||
|
FOREIGN KEY fk_cable_manufacturer (manufacturer)
|
||||||
|
REFERENCES company(compid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE table fuse (
|
CREATE table fuse (
|
||||||
@@ -237,7 +265,13 @@ CREATE table fuse (
|
|||||||
description varchar(60) DEFAULT NULL,
|
description varchar(60) DEFAULT NULL,
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
PRIMARY KEY (fuseid),
|
PRIMARY KEY (fuseid),
|
||||||
UNIQUE INDEX ix_fusenumber (vid, fnumber)
|
UNIQUE INDEX ix_fusenumber (vid, fnumber),
|
||||||
|
FOREIGN KEY fk_fuse_vessel (vid)
|
||||||
|
REFERENCES vessel(vid),
|
||||||
|
FOREIGN KEY fk_fuse_cable (cableid)
|
||||||
|
REFERENCES cable(cableid),
|
||||||
|
FOREIGN KEY fk_fuse_equipment (eid)
|
||||||
|
REFERENCES equipment(eid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
-- change vals to decimal(12,4)?
|
-- change vals to decimal(12,4)?
|
||||||
@@ -245,6 +279,7 @@ CREATE TABLE measurement (
|
|||||||
mid smallint(6) NOT NULL AUTO_INCREMENT,
|
mid smallint(6) NOT NULL AUTO_INCREMENT,
|
||||||
mname varchar(80) NOT NULL,
|
mname varchar(80) NOT NULL,
|
||||||
vid smallint(6) NOT NULL DEFAULT 1,
|
vid smallint(6) NOT NULL DEFAULT 1,
|
||||||
|
eid smallint(6) UNSIGNED DEFAULT NULL,
|
||||||
nval tinyint(1) UNSIGNED NOT NULL DEFAULT 1,
|
nval tinyint(1) UNSIGNED NOT NULL DEFAULT 1,
|
||||||
val1 int(10) NOT NULL,
|
val1 int(10) NOT NULL,
|
||||||
val2 int(10) DEFAULT NULL,
|
val2 int(10) DEFAULT NULL,
|
||||||
@@ -253,8 +288,11 @@ CREATE TABLE measurement (
|
|||||||
accuracy enum('unknown','precise','normal','rough','estimated') NOT NULL DEFAULT 'unknown',
|
accuracy enum('unknown','precise','normal','rough','estimated') NOT NULL DEFAULT 'unknown',
|
||||||
mdate date DEFAULT NULL,
|
mdate date DEFAULT NULL,
|
||||||
note varchar(80) DEFAULT NULL,
|
note varchar(80) DEFAULT NULL,
|
||||||
eid smallint(6) UNSIGNED DEFAULT NULL,
|
PRIMARY KEY (mid),
|
||||||
PRIMARY KEY (mid)
|
FOREIGN KEY fk_measurement_vessel (vid)
|
||||||
|
REFERENCES vessel(vid),
|
||||||
|
FOREIGN KEY fk_measurement_equipment (eid)
|
||||||
|
REFERENCES equipment(eid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE TABLE provisions (
|
CREATE TABLE provisions (
|
||||||
@@ -273,7 +311,11 @@ CREATE TABLE provisions (
|
|||||||
shelflife date DEFAULT NULL,
|
shelflife date DEFAULT NULL,
|
||||||
price decimal(12,2) DEFAULT NULL,
|
price decimal(12,2) DEFAULT NULL,
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
PRIMARY KEY (provid)
|
PRIMARY KEY (provid),
|
||||||
|
FOREIGN KEY fk_provisions_storage (sid)
|
||||||
|
REFERENCES storage(sid),
|
||||||
|
FOREIGN KEY fk_provisions_box (boxid)
|
||||||
|
REFERENCES box(boxid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
@@ -322,9 +364,17 @@ CREATE TABLE maintenance (
|
|||||||
eid smallint(6) UNSIGNED DEFAULT NULL,
|
eid smallint(6) UNSIGNED DEFAULT NULL,
|
||||||
series smallint(6) DEFAULT NULL,
|
series smallint(6) DEFAULT NULL,
|
||||||
activities varchar(40) NOT NULL,
|
activities varchar(40) NOT NULL,
|
||||||
|
plan_date DATE DEFAULT NULL,
|
||||||
|
completion_date DATE DEFAULT NULL,
|
||||||
|
interval_hours smallint(6) DEFAULT NULL,
|
||||||
|
last_hours int(10) DEFAULT NULL,
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
maintstate enum('new','planned','ongoing','done') NOT NULL DEFAULT 'new',
|
maintstate enum('new','planned','ongoing','done') NOT NULL DEFAULT 'new',
|
||||||
PRIMARY KEY (maintid)
|
PRIMARY KEY (maintid),
|
||||||
|
FOREIGN KEY fk_maintenance_vessel (vid)
|
||||||
|
REFERENCES vessel(vid),
|
||||||
|
FOREIGN KEY fk_maintenance_equipment (eid)
|
||||||
|
REFERENCES equipment(eid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
/* TODO? time recording */
|
/* TODO? time recording */
|
||||||
@@ -340,9 +390,14 @@ CREATE TABLE project (
|
|||||||
costs_final decimal(12,2) DEFAULT NULL,
|
costs_final decimal(12,2) DEFAULT NULL,
|
||||||
remarks varchar(150) DEFAULT NULL,
|
remarks varchar(150) DEFAULT NULL,
|
||||||
projstate enum('new','plan','ongoing','paused','finished') NOT NULL DEFAULT 'new',
|
projstate enum('new','plan','ongoing','paused','finished') NOT NULL DEFAULT 'new',
|
||||||
PRIMARY KEY (projid)
|
PRIMARY KEY (projid),
|
||||||
|
FOREIGN KEY fk_project_vessel (vid)
|
||||||
|
REFERENCES vessel(vid),
|
||||||
|
FOREIGN KEY fk_project_user (responsible)
|
||||||
|
REFERENCES user(userid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
/* TODO executed_by : company or user? or both? */
|
||||||
CREATE TABLE task (
|
CREATE TABLE task (
|
||||||
taskid int(10) NOT NULL AUTO_INCREMENT,
|
taskid int(10) NOT NULL AUTO_INCREMENT,
|
||||||
vid smallint(6) DEFAULT NULL,
|
vid smallint(6) DEFAULT NULL,
|
||||||
@@ -356,10 +411,13 @@ CREATE TABLE task (
|
|||||||
started datetime DEFAULT NULL,
|
started datetime DEFAULT NULL,
|
||||||
finished datetime DEFAULT NULL,
|
finished datetime DEFAULT NULL,
|
||||||
responsible smallint(6) NOT NULL,
|
responsible smallint(6) NOT NULL,
|
||||||
/* TODO executed_by : company or user? or both? */
|
|
||||||
PRIMARY KEY (taskid),
|
PRIMARY KEY (taskid),
|
||||||
FOREIGN KEY fk_task_user (responsible)
|
FOREIGN KEY fk_task_user (responsible)
|
||||||
REFERENCES user(userid)
|
REFERENCES user(userid),
|
||||||
|
FOREIGN KEY fk_task_vessel (vid)
|
||||||
|
REFERENCES vessel(vid),
|
||||||
|
FOREIGN KEY fk_task_project (projid)
|
||||||
|
REFERENCES project(projid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
/* Notes can be assigned to tasks, maintenances and equipment */
|
/* Notes can be assigned to tasks, maintenances and equipment */
|
||||||
@@ -376,28 +434,38 @@ CREATE TABLE checklist (
|
|||||||
title varchar(30) NOT NULL,
|
title varchar(30) NOT NULL,
|
||||||
parent smallint(6) DEFAULT NULL,
|
parent smallint(6) DEFAULT NULL,
|
||||||
clstate enum('new','open','closed') NOT NULL DEFAULT 'new',
|
clstate enum('new','open','closed') NOT NULL DEFAULT 'new',
|
||||||
PRIMARY KEY (clid)
|
PRIMARY KEY (clid),
|
||||||
|
FOREIGN KEY fk_checklist_parent (parent)
|
||||||
|
REFERENCES checklist(clid)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
CREATE TABLE checkgroup (
|
||||||
|
groupid smallint(6) UNSIGNED NOT NULL,
|
||||||
|
title varchar(30) NOT NULL,
|
||||||
|
PRIMARY KEY (groupid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE TABLE checkitem (
|
CREATE TABLE checkitem (
|
||||||
checkid int(10) NOT NULL AUTO_INCREMENT,
|
checkid int(10) NOT NULL AUTO_INCREMENT,
|
||||||
checkname varchar(60) NOT NULL,
|
checkname varchar(60) NOT NULL,
|
||||||
groupid tinyint(3) DEFAULT NULL,
|
groupid smallint(6) UNSIGNED DEFAULT NULL,
|
||||||
checkresult enum('unchecked','checked','unused') NOT NULL DEFAULT 'unused',
|
checkresult enum('unchecked','checked','unused') NOT NULL DEFAULT 'unused',
|
||||||
PRIMARY KEY (checkid)
|
PRIMARY KEY (checkid),
|
||||||
|
FOREIGN KEY fk_checkitem_group (groupid)
|
||||||
|
REFERENCES checkgroup(groupid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE TABLE checkref (
|
CREATE TABLE checkref (
|
||||||
clid smallint(6) NOT NULL,
|
clid smallint(6) NOT NULL,
|
||||||
checkid int(10) NOT NULL,
|
checkid int(10) NOT NULL,
|
||||||
sort smallint(6) DEFAULT NULL,
|
sort smallint(6) DEFAULT NULL,
|
||||||
PRIMARY KEY (clid, checkid)
|
PRIMARY KEY (clid, checkid),
|
||||||
) ENGINE=InnoDB;
|
FOREIGN KEY fk_checkref_checklist (clid)
|
||||||
|
REFERENCES checklist(clid)
|
||||||
CREATE TABLE checkgroup (
|
ON DELETE CASCADE,
|
||||||
groupid int(10) NOT NULL,
|
FOREIGN KEY fk_checkref_checkitem (checkid)
|
||||||
title varchar(30) NOT NULL,
|
REFERENCES checkitem(checkid)
|
||||||
PRIMARY KEY (groupid)
|
ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
/* Expansion for future use: signalk mapping (just an idea) */
|
/* Expansion for future use: signalk mapping (just an idea) */
|
||||||
@@ -410,5 +478,7 @@ CREATE TABLE signalk (
|
|||||||
skpath varchar(255) NOT NULL,
|
skpath varchar(255) NOT NULL,
|
||||||
PRIMARY KEY (skid),
|
PRIMARY KEY (skid),
|
||||||
UNIQUE KEY ix_signalk
|
UNIQUE KEY ix_signalk
|
||||||
(vid, objtype, objid, datatype)
|
(vid, objtype, objid, datatype),
|
||||||
|
FOREIGN KEY fk_signalk_vessel (vid)
|
||||||
|
REFERENCES vessel(vid)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ BINDIR="${PREFIX}/bin"
|
|||||||
DESKTOPDIR="${PREFIX}/share/applications"
|
DESKTOPDIR="${PREFIX}/share/applications"
|
||||||
ICONDIR="${PREFIX}/share/icons/hicolor"
|
ICONDIR="${PREFIX}/share/icons/hicolor"
|
||||||
DOCDIR="${PREFIX}/share/doc/yms"
|
DOCDIR="${PREFIX}/share/doc/yms"
|
||||||
|
MANDIR="${PREFIX}/usr/local/share/man/man1"
|
||||||
LOCALEDIR="${PREFIX}/share/locale"
|
LOCALEDIR="${PREFIX}/share/locale"
|
||||||
|
|
||||||
SOURCEDIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
SOURCEDIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||||
@@ -76,6 +77,9 @@ install -m 0644 \
|
|||||||
install -m 0644 \
|
install -m 0644 \
|
||||||
"${SOURCEDIR}/COPYING" \
|
"${SOURCEDIR}/COPYING" \
|
||||||
"${DOCDIR}/COPYING"
|
"${DOCDIR}/COPYING"
|
||||||
|
install -m 0644 \
|
||||||
|
"${SOURCEDIR}/yms.1" \
|
||||||
|
"${MANDIR}/yms.1"
|
||||||
|
|
||||||
echo "Installing translations..."
|
echo "Installing translations..."
|
||||||
make translation
|
make translation
|
||||||
|
|||||||
+14
-9
@@ -783,7 +783,7 @@ function db_get_options($ddid, $orderby = '', $short = False, $default = NULL) {
|
|||||||
$sth = $pdo->prepare($sql);
|
$sth = $pdo->prepare($sql);
|
||||||
$sth->execute([$ddid]);
|
$sth->execute([$ddid]);
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
||||||
$list[$rec[0]] = $rec[1];
|
$list[$rec[0]] = h($rec[1]);
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
@@ -793,7 +793,7 @@ function db_get_opt_vessel() {
|
|||||||
$list = array();
|
$list = array();
|
||||||
$sth = $pdo->query("SELECT vid, vesselname, model FROM vessel ORDER BY vid");
|
$sth = $pdo->query("SELECT vid, vesselname, model FROM vessel ORDER BY vid");
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
||||||
$list[$rec[0]] = $rec[1];
|
$list[$row[0]] = h($row[1]);
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
@@ -811,7 +811,7 @@ function db_get_opt_storage($vid) {
|
|||||||
$g_error->Add($e->getMessage());
|
$g_error->Add($e->getMessage());
|
||||||
}
|
}
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
||||||
$list[$rec[0]] = $rec[1];
|
$list[$rec[0]] = h($rec[1]);
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
@@ -832,7 +832,7 @@ function db_get_opt_box($vid, $exclude=[]) {
|
|||||||
}
|
}
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
||||||
if (! in_array($rec[0], $exclude)) {
|
if (! in_array($rec[0], $exclude)) {
|
||||||
$list[$rec[0]] = $rec[1] . ($rec[2] ? ' - '. $rec[2] : '');
|
$list[$rec[0]] = h($rec[1]) . ($rec[2] ? ' - '. h($rec[2]) : '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
@@ -855,7 +855,7 @@ function db_get_opt_equip($vid, $default=NULL, $exclude=[]) {
|
|||||||
}
|
}
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
||||||
if (! in_array($rec[0], $exclude)) {
|
if (! in_array($rec[0], $exclude)) {
|
||||||
$list[$rec[0]] = $rec[1];
|
$list[$rec[0]] = h($rec[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
@@ -871,7 +871,7 @@ function db_get_opt_manuf($default=NULL) {
|
|||||||
$sql = "SELECT compid, compname FROM company WHERE comptype=2 ORDER BY compname";
|
$sql = "SELECT compid, compname FROM company WHERE comptype=2 ORDER BY compname";
|
||||||
$sth = $pdo->query($sql);
|
$sth = $pdo->query($sql);
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
||||||
$list[$row[0]] = $row[1];
|
$list[$row[0]] = h($row[1]);
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
@@ -886,7 +886,7 @@ function db_get_opt_supp($default=NULL) {
|
|||||||
$sql = "SELECT compid, compname FROM company WHERE comptype=1 ORDER BY compname";
|
$sql = "SELECT compid, compname FROM company WHERE comptype=1 ORDER BY compname";
|
||||||
$sth = $pdo->query($sql);
|
$sth = $pdo->query($sql);
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
||||||
$list[$row[0]] = $row[1];
|
$list[$row[0]] = h($row[1]);
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
@@ -901,7 +901,7 @@ function db_get_opt_user($userid, $default=NULL) {
|
|||||||
$sql = "SELECT userid, displayname FROM user WHERE userid>0 ORDER BY displayname";
|
$sql = "SELECT userid, displayname FROM user WHERE userid>0 ORDER BY displayname";
|
||||||
$sth = $pdo->query($sql);
|
$sth = $pdo->query($sql);
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
||||||
$list[$row[0]] = $row[1];
|
$list[$row[0]] = h($row[1]);
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
@@ -931,7 +931,7 @@ function db_get_opt_proj($vid, $exclude=[], $default=NULL) {
|
|||||||
$g_error->Add($e->getMessage());
|
$g_error->Add($e->getMessage());
|
||||||
}
|
}
|
||||||
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
foreach ($sth->fetchAll(PDO::FETCH_NUM) as $rec) {
|
||||||
$list[$rec[0]] = $rec[1];
|
$list[$rec[0]] = h($rec[1]);
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
@@ -1296,6 +1296,11 @@ function format_measurement($n, $unit, $v1, $v2, $v3) {
|
|||||||
|
|
||||||
// ========== COMMON FUNCTIONS ================================================
|
// ========== COMMON FUNCTIONS ================================================
|
||||||
|
|
||||||
|
function h($value) {
|
||||||
|
// escape value coming from db for safe html output
|
||||||
|
return htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
|
||||||
|
}
|
||||||
|
|
||||||
function header_location($location, $message=NULL) {
|
function header_location($location, $message=NULL) {
|
||||||
if (is_array($message)) {
|
if (is_array($message)) {
|
||||||
$valid_keys = array('succ', 'info', 'warn', 'err');
|
$valid_keys = array('succ', 'info', 'warn', 'err');
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ $opt_special = array(
|
|||||||
-2 => _('― all ―'),
|
-2 => _('― all ―'),
|
||||||
);
|
);
|
||||||
foreach ($opt_special + $opt_invcond as $k => $v) {
|
foreach ($opt_special + $opt_invcond as $k => $v) {
|
||||||
echo '<option value="', $k,'"';
|
echo '<option value="', h($k), '"';
|
||||||
if ($k == $flt->cond) {
|
if ($k == $flt->cond) {
|
||||||
echo ' selected';
|
echo ' selected';
|
||||||
}
|
}
|
||||||
@@ -237,7 +237,7 @@ foreach ($opt_special + $opt_invcond as $k => $v) {
|
|||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-nowrap gap-2">
|
<div class="d-flex flex-nowrap gap-2">
|
||||||
<label for="flt_txt">Text</label>
|
<label for="flt_txt">Text</label>
|
||||||
<input type="text" class="form-control" name="flt_txt" size="15" maxlength="30" value="<?=$flt->txt ?>">
|
<input type="text" class="form-control" name="flt_txt" size="15" maxlength="30" value="<?=h($flt->txt)?>">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
.TH YMS 1 "August 2026" "YMS 0.2" "User Commands"
|
||||||
|
.SH NAME
|
||||||
|
yms - Yacht Management Software
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B yms
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B YMS
|
||||||
|
(Yacht Management Software) is free and open-source software for
|
||||||
|
managing yachts, sailboats and their equipment.
|
||||||
|
|
||||||
|
YMS is designed for managing yachts and sailboats, including
|
||||||
|
equipment, inventory, storage locations, documents, maintenance,
|
||||||
|
tasks, projects, provisions and technical data.
|
||||||
|
|
||||||
|
The application uses MariaDB for structured application data.
|
||||||
|
User-managed photos and documents are stored in the local filesystem.
|
||||||
|
.SH FEATURES
|
||||||
|
YMS provides the following functionality:
|
||||||
|
.TP
|
||||||
|
.B Equipment and inventory management
|
||||||
|
Manage equipment and inventory belonging to the yacht.
|
||||||
|
.TP
|
||||||
|
.B Storage locations
|
||||||
|
Organize equipment and inventory by physical storage location.
|
||||||
|
.TP
|
||||||
|
.B Documents and manuals
|
||||||
|
Manage documents and manuals associated with the yacht and its
|
||||||
|
equipment.
|
||||||
|
.TP
|
||||||
|
.B Maintenance and service history
|
||||||
|
Record maintenance activities and service history.
|
||||||
|
.TP
|
||||||
|
.B Tasks and projects
|
||||||
|
Manage tasks and projects related to the yacht.
|
||||||
|
.TP
|
||||||
|
.B Provisions and consumables
|
||||||
|
Manage provisions, supplies and consumable items.
|
||||||
|
.TP
|
||||||
|
.B Technical data and measurements
|
||||||
|
Store technical information, measurements and other data associated
|
||||||
|
with the yacht.
|
||||||
|
.SH DATABASE
|
||||||
|
YMS uses MariaDB to store its structured application data.
|
||||||
|
|
||||||
|
The MariaDB server must be available to the YMS application when
|
||||||
|
the application is running.
|
||||||
|
.SH FILES
|
||||||
|
.TP
|
||||||
|
.I ~/.config/ymsgui.conf
|
||||||
|
Per-user configuration file for the YMS graphical user interface.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.I /var/local/yms/
|
||||||
|
Persistent storage for files managed by YMS.
|
||||||
|
|
||||||
|
The directory contains photos, documents and other media associated
|
||||||
|
with the managed yacht. Supported file formats include JPEG, PNG,
|
||||||
|
SVG and PDF.
|
||||||
|
.SH BACKUP
|
||||||
|
YMS stores application data in two separate locations.
|
||||||
|
|
||||||
|
The directory
|
||||||
|
.I /var/local/yms/
|
||||||
|
contains user-managed photos and documents and should be included
|
||||||
|
in regular backups.
|
||||||
|
|
||||||
|
The structured application data is stored in MariaDB and must be
|
||||||
|
backed up using an appropriate MariaDB backup procedure.
|
||||||
|
|
||||||
|
.SH REQUIREMENTS
|
||||||
|
YMS requires a graphical desktop environment with GTK3 support.
|
||||||
|
|
||||||
|
The application requires Python and the GTK3 Python bindings.
|
||||||
|
A MariaDB server is required for database access.
|
||||||
|
|
||||||
|
.SH OPEN SOURCE
|
||||||
|
YMS is free and open-source software.
|
||||||
|
|
||||||
|
The source code is available from the YMS Git repository:
|
||||||
|
.UR https://git.hoogi.de/thooge/YMS
|
||||||
|
.UE
|
||||||
|
.SH VERSION
|
||||||
|
This manual describes YMS version 0.2.
|
||||||
|
.SH PROJECT
|
||||||
|
The YMS project homepage is available at:
|
||||||
|
.UR https://yms.hoogi.de/
|
||||||
|
.UE
|
||||||
|
|
||||||
|
A live demonstration is available at:
|
||||||
|
.UR https://www.hoogi.de/ymsdemo
|
||||||
|
.UE
|
||||||
|
|
||||||
|
German-language documentation is available at:
|
||||||
|
.UR https://computerclub.hoogi.de/yms
|
||||||
|
.UE
|
||||||
|
.SH BUGS
|
||||||
|
Please report bugs and contribute improvements through thread in Segeln-Forum or
|
||||||
|
by submitting a mail
|
||||||
|
.SH AUTHOR
|
||||||
|
YMS is developed by Thomas Hooge / thomas@hoogi.de.
|
||||||
|
.SH COPYRIGHT
|
||||||
|
YMS is free and open-source software. See the project repository for
|
||||||
|
license and copyright information.
|
||||||
Reference in New Issue
Block a user