diff --git a/sofos/database.py b/sofos/database.py index 98c795f..c27c30a 100644 --- a/sofos/database.py +++ b/sofos/database.py @@ -103,7 +103,10 @@ 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): @@ -111,7 +114,8 @@ def table_object(self, 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""" diff --git a/sofos/models.py b/sofos/models.py index c47647c..d1cf164 100644 --- a/sofos/models.py +++ b/sofos/models.py @@ -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): diff --git a/sofos/qt.py b/sofos/qt.py index d414afa..e73ee68 100644 --- a/sofos/qt.py +++ b/sofos/qt.py @@ -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('') @@ -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(), @@ -495,7 +495,7 @@ 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]) @@ -503,7 +503,7 @@ 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 @@ -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) @@ -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() @@ -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: @@ -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() @@ -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''' @@ -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 @@ -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 @@ -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: @@ -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: diff --git a/sofos/templates/main.py b/sofos/templates/main.py index eea70af..e64c68c 100644 --- a/sofos/templates/main.py +++ b/sofos/templates/main.py @@ -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()