diff --git a/INSTALL b/INSTALL index 72c916d..64462c0 100644 --- a/INSTALL +++ b/INSTALL @@ -14,6 +14,7 @@ Yacht Management Software (YMS) Installation 1.2 Native GUI - Python GTK3 - python3-gi + - python3-pyudev - gir1.2-gtk-3.0 - gir1.2-rsvg-2.0 @@ -77,7 +78,7 @@ group (here as example 'yms'). The user which runs the local gui (here usermod -aG yms guiuser chgrp yms /var/local/lib/yms chgrp yms /var/local/lib/yms/thumb - chmod -R 770 /var/local/yms + chmod -R 770 /var/local/lib/yms 4. Setup local GUI diff --git a/db/mariadb.sql b/db/mariadb.sql index 08fd26c..7dce1a9 100644 --- a/db/mariadb.sql +++ b/db/mariadb.sql @@ -484,6 +484,18 @@ CREATE TABLE note ( ON DELETE RESTRICT ) ENGINE=InnoDB; +/* generic key value store for main objects */ +CREATE TABLE property ( + propid int(10) NOT NULL AUTO_INCREMENT, + objid int(10) UNSIGNED NOT NULL, + objtype enum('vessel','equip','inv','proj','maint'), + keyname varchar(32) NOT NULL, + valstr varchar(200) DEFAULT NULL, + valint int(10) DEFAULT NULL, + PRIMARY KEY (propid), + INDEX ix_prop_obj (objid, objtype) +); + CREATE TABLE checklist ( clid smallint(6) NOT NULL AUTO_INCREMENT, title varchar(30) NOT NULL, diff --git a/db/minimal.sql b/db/minimal.sql index 325305b..9276c4b 100644 --- a/db/minimal.sql +++ b/db/minimal.sql @@ -30,7 +30,9 @@ INSERT INTO settings (userid, sno, valstr) VALUES (-1, 4, 'currency symbol e.g. €, $, £, ¥'), (-1, 5, 'signalk connection'), (-1, 6, 'nmea2000 connection'), -(-1, 7, 'usb backup device uuid'), +(-1, 7, 'usb backup device serial'), +(-1, 8, 'usb backup partition uuid'), +(-1, 9, 'last backup'), (-1, 10, 'rows in table'), (-1, 20, 'maximum image width'), (-1, 21, 'maximum image height'), @@ -76,7 +78,8 @@ INSERT INTO dropdown (ddid, ddval, ddtext) VALUES (0, 10, 'Sicherungsblöcke'), -- fuse locations (0, 11, 'Kabeltypen'), (0, 12, 'Technische Kabel-Bezeichnung'), -(0, 13, 'Inventarkategorien'); +(0, 13, 'Inventarkategorien'), +(0, 14, 'BBN vessel.data Felder'); INSERT INTO dropdown (ddid, ddval, ddtext, flags) VALUES (2, 1, 'Lieferant', 'fixed'), diff --git a/db/minimal_en.sql b/db/minimal_en.sql index 8cb5296..3ab23d4 100644 --- a/db/minimal_en.sql +++ b/db/minimal_en.sql @@ -29,7 +29,9 @@ INSERT INTO settings (userid, sno, valstr) VALUES (-1, 4, 'currency symbol e.g. €, $, £, ¥'), (-1, 5, 'signalk connection'), (-1, 6, 'nmea2000 connection'), -(-1, 7, 'usb backup device uuid'), +(-1, 7, 'usb backup device serial'), +(-1, 8, 'usb backup partition uuid'), +(-1, 9, 'last backup'), (-1, 10, 'rows in table'), (-1, 20, 'maximum image width'), (-1, 21, 'maximum image height'), @@ -75,7 +77,8 @@ INSERT INTO dropdown (ddid, ddval, ddtext) VALUES (0, 10, 'fuse blocks'), (0, 11, 'cable types'), (0, 12, 'cable desc. technical'), -(0, 13, 'inventory category'); +(0, 13, 'inventory category'), +(0, 14, 'BBN vessel.data fields'); INSERT INTO dropdown (ddid, ddval, ddtext, flags) VALUES (2, 1, 'Supplier', 'fixed'), diff --git a/debian/control b/debian/control index 9d36c4d..f831913 100644 --- a/debian/control +++ b/debian/control @@ -18,6 +18,7 @@ Depends: gir1.2-rsvg-2.0, python3-mysqldb, python3-bcrypt, + python3-pyudev, php (>= 8.0), php-mysql, php-xml, diff --git a/webgui/equipment.php b/webgui/equipment.php index 066e783..465a3d8 100644 --- a/webgui/equipment.php +++ b/webgui/equipment.php @@ -478,6 +478,21 @@ if (!empty($equipment->x)) { } echo '', _('Remarks'),"", h($equipment->remarks, br:true), "\n"; echo '', _('Flags'),"", $equipment->flags, "\n"; + +// Custom properties +$sql = "SELECT keyname, valstr, valint FROM property WHERE objtype='equip' AND objid=?"; +$sth = $pdo->prepare($sql); +$sth->execute([$id]); +foreach ($sth->fetchAll() as $row) { + echo "{$row['keyname']}"; + if (isset($row['valstr'])) { + echo $row['valstr']; + } else { + echo $row['valint']; + } + echo "\n"; +} + echo "\n"; echo ''; // Column break diff --git a/webgui/inventory.php b/webgui/inventory.php index 4e5d163..a5005df 100644 --- a/webgui/inventory.php +++ b/webgui/inventory.php @@ -406,6 +406,20 @@ echo "", _('Remarks'), "", h($inventory->remarks, br:true), "prepare($sql); +$sth->execute([$id]); +foreach ($sth->fetchAll() as $row) { + echo "{$row['keyname']}"; + if (isset($row['valstr'])) { + echo $row['valstr']; + } else { + echo $row['valint']; + } + echo "\n"; +} + echo "\n"; form_view_buttons($g_scriptname, $id); diff --git a/webgui/maintenance.php b/webgui/maintenance.php index e743cbe..e442977 100644 --- a/webgui/maintenance.php +++ b/webgui/maintenance.php @@ -290,6 +290,21 @@ echo '', _('Last'),"", $maint->last_hours, "\n"; echo '', _('Plan date'),"", format_date($maint->plan_date), "\n"; echo '', _('Completion date'),"", format_date($maint->completion_date), "\n"; echo '', _('State'),"", get_enum($maint->maintstate), "\n"; + +// Custom properties +$sql = "SELECT keyname, valstr, valint FROM property WHERE objtype='maint' AND objid=?"; +$sth = $pdo->prepare($sql); +$sth->execute([$id]); +foreach ($sth->fetchAll() as $row) { + echo "{$row['keyname']}"; + if (isset($row['valstr'])) { + echo $row['valstr']; + } else { + echo $row['valint']; + } + echo "\n"; +} + echo "\n"; echo ''; // Column break diff --git a/webgui/projects.php b/webgui/projects.php index d178a60..f842e62 100644 --- a/webgui/projects.php +++ b/webgui/projects.php @@ -316,6 +316,21 @@ echo '', _('Costs plan'),"", format_currency($proje echo '', _('Costs final'),"", format_currency($project->costs_final), "\n"; echo '', _('State'),"", get_enum($project->projstate), "\n"; echo '', _('Remarks'),"", h($project->remarks, br:true), "\n"; + +// Custom properties go here +$sql = "SELECT keyname, valstr, valint FROM property WHERE objtype='proj' AND objid=?"; +$sth = $pdo->prepare($sql); +$sth->execute([$id]); +foreach ($sth->fetchAll() as $row) { + echo "{$row['keyname']}"; + if (isset($row['valstr'])) { + echo $row['valstr']; + } else { + echo $row['valint']; + } + echo "\n"; +} + echo "\n"; form_view_buttons($g_scriptname, $id);