90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from datetime import datetime
|
|
import MySQLdb.cursors
|
|
|
|
class Vessel():
|
|
|
|
def __init__(self, dbconn, vessel_id=None):
|
|
self.conn = dbconn
|
|
self.dcur = dbconn.cursor(MySQLdb.cursors.DictCursor)
|
|
self.fields = ('vid', 'vtype', 'vesselname', 'model', 'loa', 'lwl',
|
|
'beam', 'draught', 'draught_min', 'displacement', 'ballast',
|
|
'beltpos_aft', 'beltpos_bow', 'shapefile', 'remarks')
|
|
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
|