Native gui: implement data lists for all modules
This commit is contained in:
+111
-49
@@ -27,6 +27,33 @@ class BaseView(View):
|
||||
#self.topwidget = builder.get_object("topobject")
|
||||
#gtkutils.init_named_controls(self, builder)
|
||||
|
||||
# company types
|
||||
self.db.cur.execute("SELECT ddval, ddtext FROM dropdown WHERE ddid=2 ORDER BY ddval")
|
||||
self.comptype = dict(self.db.cur.fetchall())
|
||||
combobox.load_from_dict(self.combo['flt_type'], {-2: _("─── all ───")} | self.comptype, -1)
|
||||
|
||||
# companies
|
||||
self.lst_companies = Gtk.ListStore(int, str, str, str)
|
||||
self.db.cur.execute("SELECT compid, compname, comptype, remarks FROM company ORDER BY compname")
|
||||
for row in self.db.cur.fetchall():
|
||||
self.lst_companies.append((row[0], row[1], self.comptype[row[2]], row[3]))
|
||||
treeview.add_column(self.tree['companies'], _('ID'), 0)
|
||||
treeview.add_column(self.tree['companies'], _('Name'), 1)
|
||||
treeview.add_column(self.tree['companies'], _('Type'), 2)
|
||||
treeview.add_column(self.tree['companies'], _('Remarks'), 3)
|
||||
self.tree['companies'].set_model(self.lst_companies)
|
||||
|
||||
# combos
|
||||
roles = {'captain': 'Captain', 'helmsman': 'Helmsman', 'sailor': 'Sailor'}
|
||||
combobox.load_from_dict(self.combo['user_role'], roles)
|
||||
langs = {'de': 'Deutsch', 'en': 'English'}
|
||||
combobox.load_from_dict(self.combo['user_lang'], langs)
|
||||
|
||||
# shipyard
|
||||
self.db.cur.execute("SELECT compid, compname FROM company WHERE comptype=3 ORDER BY compname")
|
||||
shipyards = dict(self.db.cur.fetchall())
|
||||
combobox.load_from_dict(self.combo['shipyard'], {-1: _("─── none ───")} | shipyards)
|
||||
|
||||
# get current vessel data
|
||||
self.db.cur.execute("SELECT valint FROM settings WHERE userid=0 AND sno=1")
|
||||
row = self.db.cur.fetchone()
|
||||
@@ -38,11 +65,20 @@ class BaseView(View):
|
||||
else:
|
||||
self.context.vessel.vid = row[0]
|
||||
|
||||
# default storage for current vessel
|
||||
sql = "SELECT sid, sname FROM storage WHERE stype=0 AND vid=%s ORDER BY sname"
|
||||
self.db.cur.execute(sql, (self.context.vessel.vid,))
|
||||
storages = dict(self.db.cur.fetchall())
|
||||
combobox.load_from_dict(self.combo['storage'], {-1: _("─── none ───")} | storages)
|
||||
|
||||
# get list of vessels
|
||||
vessellist = {}
|
||||
self.db.dcur.execute("SELECT vid, vesselname, model FROM vessel ORDER BY vid")
|
||||
for row in self.db.dcur.fetchall():
|
||||
vessellist[row['vid']] = row['vesselname'] + " - " + row['model']
|
||||
vessellist[row['vid']] = (
|
||||
row['vesselname'] if row['model'] is None
|
||||
else row['vesselname'] + " - " + row['model']
|
||||
)
|
||||
combobox.load_from_dict(self.combo['vessel'], vessellist, self.context.vessel.vid)
|
||||
# vessel load triggered from combobox init
|
||||
|
||||
@@ -73,39 +109,6 @@ class BaseView(View):
|
||||
treeview.add_column(self.tree['ddlists'], _('Records'), 2)
|
||||
self.tree['ddlists'].set_model(self.lst_lists)
|
||||
|
||||
# company types
|
||||
self.db.cur.execute("SELECT ddval, ddtext FROM dropdown WHERE ddid=2 ORDER BY ddval")
|
||||
self.comptype = dict(self.db.cur.fetchall())
|
||||
combobox.load_from_dict(self.combo['flt_type'], {-1: _("─── all ───")} | self.comptype, -1)
|
||||
|
||||
# companies
|
||||
self.lst_companies = Gtk.ListStore(int, str, str, str)
|
||||
self.db.cur.execute("SELECT compid, compname, comptype, remarks FROM company ORDER BY compname")
|
||||
for row in self.db.cur.fetchall():
|
||||
self.lst_companies.append((row[0], row[1], self.comptype[row[2]], row[3]))
|
||||
treeview.add_column(self.tree['companies'], _('ID'), 0)
|
||||
treeview.add_column(self.tree['companies'], _('Name'), 1)
|
||||
treeview.add_column(self.tree['companies'], _('Type'), 2)
|
||||
treeview.add_column(self.tree['companies'], _('Remarks'), 3)
|
||||
self.tree['companies'].set_model(self.lst_companies)
|
||||
|
||||
# combos
|
||||
roles = {'captain': 'Captain', 'helmsman': 'Helmsman', 'sailor': 'Sailor'}
|
||||
combobox.load_from_dict(self.combo['user_role'], roles)
|
||||
langs = {'de': 'Deutsch', 'en': 'English'}
|
||||
combobox.load_from_dict(self.combo['user_lang'], langs)
|
||||
|
||||
# shipyard
|
||||
self.db.cur.execute("SELECT compid, compname FROM company WHERE comptype=3 ORDER BY compname")
|
||||
shipyards = dict(self.db.cur.fetchall())
|
||||
combobox.load_from_dict(self.combo['shipyard'], shipyards)
|
||||
|
||||
# default storage
|
||||
self.lst_storage_dfl = Gtk.ListStore(int, str)
|
||||
self.db.cur.execute("SELECT sid, sname FROM storage WHERE stype=0 ORDER BY sname")
|
||||
storages = dict(self.db.cur.fetchall())
|
||||
combobox.load_from_dict(self.combo['storage'], storages)
|
||||
|
||||
# load shape of vessel if available
|
||||
if self.context.vessel.vid > 0:
|
||||
self.db.cur.execute("SELECT shapefile FROM vessel WHERE vid=%s", (self.context.vessel.vid, ))
|
||||
@@ -125,23 +128,50 @@ class BaseView(View):
|
||||
# WIP generic remarks handling
|
||||
self.text['vessel_remarks'].set_size_request(200, 70)
|
||||
|
||||
def load_dropdowns(self):
|
||||
# non static dropdown (re-)load feature
|
||||
# default storage for current vessel
|
||||
sql = "SELECT sid, sname FROM storage WHERE stype=0 AND vid=%s ORDER BY sname"
|
||||
self.db.cur.execute(sql, (self.context.vessel.vid,))
|
||||
storages = dict(self.db.cur.fetchall())
|
||||
combobox.refresh_dict(self.combo['storage'], {-1: _("─── none ───")} | storages)
|
||||
|
||||
def on_cmb_vessel_changed(self, widget):
|
||||
self.context.vessel.load(combobox.get_list_value(widget))
|
||||
print(self.context.vessel)
|
||||
sql = ("UPDATE settings SET valint=%s WHERE userid=0 AND sno=1")
|
||||
self.db.cur.execute(sql, (self.context.vessel.vid,))
|
||||
self.db.conn.commit()
|
||||
# Refresh dependent data
|
||||
self.load_dropdowns()
|
||||
# Show data
|
||||
self.entry['vesselname'].set_text(self.context.vessel.vesselname)
|
||||
self.entry['model'].set_text(self.context.vessel.model)
|
||||
self.text['vessel_remarks'].get_buffer().set_text(self.context.vessel.remarks or '')
|
||||
self.spin['loa'].set_value(9.80)
|
||||
self.display_vessel(self.context.vessel)
|
||||
|
||||
def on_but_vessel_add_clicked(self, widget):
|
||||
print("Add vessel")
|
||||
answer = gtkutils.questionbox(
|
||||
_("Add new vessel.\n"
|
||||
"Are you sure?"
|
||||
), title="YMS")
|
||||
if answer == False:
|
||||
return
|
||||
self.context.vessel.create()
|
||||
|
||||
def on_but_vessel_save_clicked(self, widget):
|
||||
print("Save vessel")
|
||||
vessel = self.context.vessel
|
||||
vessel.vesselname = self.entry['vesselname'].get_text()
|
||||
vessel.model = self.entry['model'].get_text()
|
||||
vessel.year_built = self.spin['year_built'].get_value_as_int()
|
||||
vessel.loa = self.spin['loa'].get_value()
|
||||
vessel.lwl = self.spin['lwl'].get_value()
|
||||
vessel.beam = self.spin['beam'].get_value()
|
||||
vessel.draught = self.spin['draught'].get_value()
|
||||
vessel.draught_min = self.spin['draught_min'].get_value()
|
||||
vessel.displacement = self.spin['displacement'].get_value_as_int()
|
||||
vessel.ballast = self.spin['ballast'].get_value_as_int()
|
||||
|
||||
txtbuf = self.text['vessel_remarks'].get_buffer()
|
||||
vessel.remarks = txtbuf.get_text(txtbuf.get_start_iter(), txtbuf.get_end_iter(), True)
|
||||
vessel.save()
|
||||
|
||||
def on_but_comp_new_clicked(self, widget):
|
||||
print("New company")
|
||||
@@ -158,20 +188,52 @@ class BaseView(View):
|
||||
def on_but_comp_cancel_clicked(self, widget):
|
||||
pass
|
||||
|
||||
def user_display(self):
|
||||
self.entry['user_login'].set_text(self.context.user.login)
|
||||
self.entry['user_displayname'].set_text(self.context.user.displayname)
|
||||
combobox.activate_row(self.combo['user_role'], self.context.user.role)
|
||||
combobox.activate_row(self.combo['user_lang'], self.context.user.language)
|
||||
self.check['user_locked'].set_active('locked' in self.context.user.flags)
|
||||
self.check['user_deleted'].set_active('deleted' in self.context.user.flags)
|
||||
def display_vessel(self, vessel):
|
||||
print("Display vessel")
|
||||
self.entry['vesselname'].set_text(vessel.vesselname)
|
||||
self.entry['model'].set_text(vessel.model or '')
|
||||
self.spin['year_built'].set_value(vessel.year_built or 0)
|
||||
self.spin['loa'].set_value(vessel.loa or 0)
|
||||
self.spin['lwl'].set_value(vessel.lwl or 0)
|
||||
self.spin['beam'].set_value(vessel.beam or 0)
|
||||
self.spin['draught'].set_value(vessel.draught or 0)
|
||||
self.spin['draught_min'].set_value(vessel.draught_min or 0)
|
||||
self.spin['displacement'].set_value(vessel.displacement or 0)
|
||||
self.spin['ballast'].set_value(vessel.ballast or 0)
|
||||
self.text['vessel_remarks'].get_buffer().set_text(vessel.remarks or '')
|
||||
combobox.activate_row(self.combo['shipyard'], vessel.shipyard or -1)
|
||||
combobox.activate_row(self.combo['storage'], vessel.sid_default or -1)
|
||||
|
||||
def display_user(self, user):
|
||||
self.entry['user_login'].set_text(user.login)
|
||||
self.entry['user_displayname'].set_text(user.displayname)
|
||||
combobox.activate_row(self.combo['user_role'], user.role)
|
||||
combobox.activate_row(self.combo['user_lang'], user.language)
|
||||
self.check['user_locked'].set_active('locked' in user.flags)
|
||||
self.check['user_deleted'].set_active('deleted' in user.flags)
|
||||
self.entry['user_pass'].set_text('')
|
||||
|
||||
def display_company(self, company):
|
||||
self.entry['compname'].set_text(company.compname)
|
||||
# Type
|
||||
# Type2
|
||||
self.entry['shortname'].set_text(company.shortname)
|
||||
self.entry['street'].set_text(company.street)
|
||||
self.entry['zip'].set_text(company.zip)
|
||||
self.entry['city'].set_text(company.city)
|
||||
self.entry['country'].set_text(company.country)
|
||||
self.entry['contact'].set_text(company.contact)
|
||||
self.entry['phone'].set_text(company.phone)
|
||||
self.entry['email'].set_text(company.email)
|
||||
self.entry['web'].set_text(company.web)
|
||||
self.entry['customerno'].set_text(company.customerno)
|
||||
self.entry['contractno'].set_text(company.contractno)
|
||||
|
||||
def on_tvw_user_row_activated(self, widget, path, column):
|
||||
# load selected user
|
||||
self.context.user.user_id = treeview.get_value(widget, 0)
|
||||
self.context.user.load()
|
||||
self.user_display()
|
||||
self.display_user(self.context.user)
|
||||
|
||||
def on_but_user_new_clicked(self, widget):
|
||||
# get first free user id and create a new record with name "user<nnn>"
|
||||
@@ -193,7 +255,7 @@ class BaseView(View):
|
||||
# TODO Select some other user from new list selection
|
||||
self.context.user.user_id = treeview.get_value(self.tree['user'])
|
||||
self.context.user.load()
|
||||
self.user_display()
|
||||
self.display_user(self.context.user)
|
||||
|
||||
def on_but_user_newpass_clicked(self, widget):
|
||||
self.entry['user_pass'].set_text(self.context.user.genpass())
|
||||
|
||||
Reference in New Issue
Block a user