Skip to content

Commit

Permalink
Refactoring dbf
Browse files Browse the repository at this point in the history
  • Loading branch information
tedlaz committed Feb 9, 2018
1 parent ad784fd commit 872bb05
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 27 deletions.
8 changes: 6 additions & 2 deletions sofos/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,15 +103,19 @@ def table_objects(self):
table_dict = {}
for tbl in tables:
model = getattr(self.models, tbl)
table_dict[model.table_name()] = getattr(self.models, tbl)
table_object = getattr(self.models, tbl)
# injecting database file name to table model here
table_object.__dbf__ = self.dbf
table_dict[model.table_name()] = table_object
return table_dict

def table_object(self, table_name):
"""Returns table object by table name
:param table_name: table name
"""
return self.table_objects().get(table_name, None)
tableobject = self.table_objects().get(table_name, None)
return tableobject

def table_names(self):
"""Returns table names"""
Expand Down
1 change: 1 addition & 0 deletions sofos/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ def validate(self, value):
class Model():
"""This class represents table. Most of the time it is used as meta class
"""
__dbf__ = 'jj'

@classmethod
def table_name(cls):
Expand Down
46 changes: 23 additions & 23 deletions sofos/qt.py
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ def populate(self):
2.fill Combo
3.set current index to initial value
"""
vlist = self._model.select_all_deep(self._parent._dbf)
vlist = self._model.select_all_deep(self._model.__dbf__)
self.index2id = {}
self.id2index = {}
self.addItem('')
Expand All @@ -452,11 +452,11 @@ def populate(self):


class AutoForm(Qw.QDialog):
def __init__(self, dbf, model, idv=None, parent=None):
def __init__(self, model, idv=None, parent=None):
super().__init__(parent)
self.setAttribute(Qc.Qt.WA_DeleteOnClose)
self._parent = parent
self._dbf = dbf
# self._dbf = dbf
self._id = idv
self.model = model
self.setWindowTitle('{}: {}'.format(model.table_label(),
Expand Down Expand Up @@ -495,15 +495,15 @@ def _create_fields(self):
self.widgets[fld])

def _fill(self):
self.vals = self.model.search_by_id(self._dbf, self._id)
self.vals = self.model.search_by_id(self.model.__dbf__, self._id)
for key in self.vals:
self.widgets[key].set(self.vals[key])

def _save(self):
data = {}
for fld in self.widgets:
data[fld] = self.widgets[fld].get()
status, lid = self.model.save(self._dbf, data)
status, lid = self.model.save(self.model.__dbf__, data)
if status:
if lid:
msg = 'New record saved with Νο: %s' % lid
Expand All @@ -520,8 +520,9 @@ def _save(self):


class FindForm(AutoForm):
def __init__(self, dbf, table, parent=None):
super().__init__(dbf, table, parent=parent)
"""Use this form to search each fields values"""
def __init__(self, model, parent=None):
super().__init__(model, parent=parent)
self.bsave.setText('Search')
self.bsave.setFocusPolicy(Qc.Qt.StrongFocus)

Expand All @@ -532,18 +533,18 @@ def _save(self):
if wval:
ast.append(wval)
ast = ' '.join(ast)
formgrid = AutoFormTableFound(self._dbf, self._table, ast, self)
formgrid = AutoFormTableFound(self._table, ast, self)
if formgrid.exec_() == Qw.QDialog.Accepted:
print(formgrid.id)


class AutoFormTable(Qw.QDialog):
def __init__(self, dbf, model, parent=None):
def __init__(self, model, parent=None):
super().__init__(parent)
# self.setAttribute(Qc.Qt.WA_DeleteOnClose)
self.resize(550, 400)
self._parent = parent
self._dbf = dbf
# self._dbf = dbf
self.model = model
self.setWindowTitle('{}'.format(self.model.table_label()))
self._create_gui()
Expand Down Expand Up @@ -578,7 +579,7 @@ def keyPressEvent(self, ev):
Qw.QDialog.keyPressEvent(self, ev)

def _new_record(self):
dialog = AutoForm(self._dbf, self.model, parent=self)
dialog = AutoForm(self.model, parent=self)
if dialog.exec_() == Qw.QDialog.Accepted:
self._populate()
else:
Expand All @@ -589,14 +590,14 @@ def id(self):
return self.tbl.item(self.tbl.currentRow(), 0).text()

def _edit_record(self):
dialog = AutoForm(self._dbf, self.model, self.id, parent=self)
dialog = AutoForm(self.model, self.id, parent=self)
if dialog.exec_() == Qw.QDialog.Accepted:
self._populate()
else:
return False

def _get_data(self):
return self.model.select_all_deep(self._dbf)
return self.model.select_all_deep(self.model.__dbf__)

def _populate(self):
data = self._get_data()
Expand Down Expand Up @@ -674,14 +675,14 @@ def table_label(self):


class AutoFormTableFound(AutoFormTable):
def __init__(self, dbf, model, search_string, parent=None):
def __init__(self, model, search_string, parent=None):
self.search_string = search_string
super().__init__(dbf, model, parent)
super().__init__(model, parent)
self.tbl.cellDoubleClicked.disconnect(self._edit_record)
self.tbl.cellDoubleClicked.connect(self.accept)

def _get_data(self):
return self.model.search_deep(self._dbf, self.search_string)
return self.model.search_deep(self.model.__dbf__, self.search_string)

def keyPressEvent(self, ev):
'''use enter or return for fast selection'''
Expand All @@ -707,7 +708,7 @@ def __init__(self, idv, model, parent):
"""parent must have ._dbf"""
super().__init__(parent)
self._parent = parent
self._dbf = parent._dbf
# self._dbf = parent._dbf
self._model = model
self.txt_initial = ''
# Create Gui
Expand All @@ -720,7 +721,7 @@ def set(self, idv):
self.idv = ''
self._set_state(0)
return
dicval = self._model.search_by_id_deep(self._dbf, idv)
dicval = self._model.search_by_id_deep(self._model.__dbf__, idv)
self._set_state(1 if dicval else 0)
self.txt_initial = self._rpr(dicval)
self.rpr = self.txt_initial
Expand Down Expand Up @@ -763,7 +764,7 @@ def _text_changed(self):
def _button_clicked(self):
self.button.setFocus()
# vals = self._model.select_all(self._dbf)
ffind = AutoFormTableFound(self._parent._dbf, self._model, '', self)
ffind = AutoFormTableFound(self._model, '', self)
if ffind.exec_() == Qw.QDialog.Accepted:
self.set(ffind.id)
else:
Expand All @@ -779,12 +780,11 @@ def _find(self, text):
"""
:param text: text separated by space multi-search values 'va1 val2 ..'
"""
vals = self._model.search_deep(self._dbf, text)
vals = self._model.search_deep(self._model.__dbf__, text)
if vals['rownum'] == 1:
self.set(vals['rows'][0][0])
self.set(vals['rows'][0][0]) # Assuming first val is id
elif vals['rownum'] > 1:
ffind = AutoFormTableFound(self._parent._dbf, self._model,
text, self)
ffind = AutoFormTableFound(self._model, text, self)
if ffind.exec_() == Qw.QDialog.Accepted:
self.set(ffind.id)
else:
Expand Down
3 changes: 1 addition & 2 deletions sofos/templates/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,7 @@ def updateWindowMenu(self):
self.windowMapper.setMapping(action, window)

def createAutoFormTbl(self, table):
child = qt.AutoFormTable(
self.database.dbf, self.database.table_object(table))
child = qt.AutoFormTable(self.database.table_object(table))
self.mdiArea.addSubWindow(child)
child.show()

Expand Down

0 comments on commit 872bb05

Please sign in to comment.