Files
YMS/yms/vessel.py
2026-07-16 15:18:21 +02:00

91 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
from datetime import datetime
import MySQLdb.cursors
class Vessel():
fields = ('vid', 'vtype', 'vesselname', 'model', 'loa', 'lwl',
'beam', 'draught', 'draught_min', 'displacement', 'ballast',
'beltpos_aft', 'beltpos_bow', 'shapefile', 'remarks')
def __init__(self, dbconn, vessel_id=None):
self.conn = dbconn
self.dcur = dbconn.cursor(MySQLdb.cursors.DictCursor)
if vessel_id:
self.vid = long(vessel_id)
self.load()
else:
self.vid = None
self.vtype = None
self.model = None
self.loa = None
self.lwl = None
self.beam = None
self.draught = None
self.draught_min = None
self.displacement = None
self.ballast = None
self.beltpos_aft = None
self.beltpos_bow = None
self.shapefile = None
self.remarks = None
self.data = {} # for old/new checks
def load(self):
sql = (
"SELECT {}".format(', '.join(self.fields))
"FROM vessel "
"WHERE vessel_id=%s"
)
self.dcur.execute(sql, (self.vid,))
self.data = self.dcur.fetchone()
# TODO
self.parent_id = self.data['parent_id']
def save(self):
last_row_id = None
self.last_update = datetime.now()
if self.vid:
# record already available
sqlfield = []
values = []
for field in self.fields:
newdata = getattr(self, field)
if self.data[field] != newdata:
sqlfield.append("{}=%s".format(field))
values.append(newdata)
self.data[field] = newdata
if values:
# only save ich there are changes
sql = (
"UPDATE vessel SET " + ",".join(sqlfield) +
" WHERE vidid=%s"
)
values.append(self.vid)
self.dcur.execute(sql, values)
# TODO check sql result
last_row_id = self.vid
else:
# new record
sql = (
"INSERT INTO risk (" + ",".join(self.fields) +
") VALUES (" + ",".join(["%s"] * len(self.fields)) + ")"
)
values = []
for field in self.fields:
newdata = getattr(self, field)
values.append(newdata)
self.data[field] = newdata
self.dcur.execute(sql, values)
last_row_id = self.dcur.lastrowid
self.vid = last_row_id
def delete(self, vessel_id):
sql = "DELETE FROM vessel WHERE vid=%s"
self.cur.execute(sql, (self.vid,))
def __str__(self):
out = "Vessel({})".format(self.vid)
return out