add expenses editable

This commit is contained in:
oscar 2021-03-17 13:34:12 -05:00
parent 515d18647d
commit 0daaf393c8
3 changed files with 60 additions and 32 deletions

View File

@ -45,10 +45,11 @@ class TableEdit(QAbstractTableModel):
return True
def flags(self, index):
if index.column() == 1:
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
else:
col = index.column()
if self._fields[col].get('readonly'):
return Qt.ItemIsEnabled
else:
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
def headerData(self, section, orientation, role):
""" Set the headers to be displayed. """
@ -60,6 +61,13 @@ class TableEdit(QAbstractTableModel):
return self._fields[i]['label']
return None
def add_record(self, rec):
length = len(self._data)
self.beginInsertRows(QModelIndex(), length, length)
self._data.append(rec)
self.endInsertRows()
return rec
class TableModel(QAbstractTableModel):

View File

@ -7,13 +7,13 @@ STRETCH = QHeaderView.Stretch
class TableView(QTableView):
def __init__(self, name, model, col_sizes=[], method_selected_row=None,
selection_edit=False):
editable=False):
super(TableView, self).__init__()
self.setObjectName(name)
self.verticalHeader().hide()
self.setGridStyle(Qt.DotLine)
self.setAlternatingRowColors(True)
if not selection_edit:
if not editable:
self.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.setSelectionBehavior(QAbstractItemView.SelectRows)
self.setSelectionMode(QAbstractItemView.SingleSelection)
@ -23,11 +23,13 @@ class TableView(QTableView):
self.doubleClicked.connect(self.on_selected_row)
self.clicked.connect(self.selected_clicked)
self.setWordWrap(False)
self.selected_rows = []
if model:
self.setModel(model)
header = self.horizontalHeader()
header.setStretchLastSection(True)
if col_sizes:
for i, size in enumerate(col_sizes):
if type(size) == int:

View File

@ -800,15 +800,14 @@ class DialogMoneyCount(QuickDialog):
self.kind = None
width, height = get_screen()
grid = QGridLayout()
col_sizes = [160, 120, 240]
_sizes = [160, 120, 240]
fields = [
{'label': 'MONEDA', 'type': 'integer'},
{'label': 'MONEDA', 'type': 'integer', 'readonly': True},
{'label': 'CANTIDAD', 'type': 'integer', 'change': 'get_subtotal'},
{'label': 'SUBTOTAL', 'type': 'integer'},
{'label': 'SUBTOTAL', 'type': 'integer', 'readonly': True},
]
self.model_money_count = TableEdit(self, MONEY, fields)
table = TableView('model_money_count', self.model_money_count,
col_sizes, selection_edit=True)
self.model = TableEdit(self, MONEY, fields)
table = TableView('model', self.model, _sizes, editable=True)
table.setFixedSize(width * 0.35, height * 0.4)
grid.addWidget(table, 1, 0, 1, 2)
@ -837,7 +836,6 @@ class DialogMoneyCount(QuickDialog):
grid.setSpacing(10)
super(DialogMoneyCount, self).__init__(parent, 'action',
widgets=[grid])
# self.setGeometry(0, 0, width * 0.4, height * 0.5)
self.setWindowTitle('CONTEO DE DINERO')
def exec(self, kind):
@ -845,7 +843,7 @@ class DialogMoneyCount(QuickDialog):
self.exec_()
def get_subtotal(self, row):
_row = self.model_money_count._data[row]
_row = self.model._data[row]
money, value = _row[0], _row[1]
_row[2] = int(value) * int(money)
self.field_total_money.setText(str(self.get_sum()))
@ -856,12 +854,12 @@ class DialogMoneyCount(QuickDialog):
if self.kind == 'open':
self.parent.open_statement_accepted(val)
else:
values = self.model_money_count._data
values = self.model._data
self.parent.close_statement_accepted(values)
def clear(self):
new_data = [[d[0], 0, 0] for d in self.model_money_count._data]
self.model_money_count._data = new_data
new_data = [[d[0], 0, 0] for d in self.model._data]
self.model._data = new_data
self.field_total_money.setText('0')
def action_print_count_money(self):
@ -869,7 +867,7 @@ class DialogMoneyCount(QuickDialog):
if self.kind == 'open':
kind = 'APERTURA'
_data = [(str(d[0]), str(d[1]), str(d[2])) for d in self.model_money_count._data]
_data = [(str(d[0]), str(d[1]), str(d[2])) for d in self.model._data]
data = {
'type': kind,
'total': self.field_total_money.text(),
@ -878,7 +876,7 @@ class DialogMoneyCount(QuickDialog):
self.parent.action_print_count_money(data)
def get_sum(self):
return sum([int(d[2]) for d in self.model_money_count._data])
return sum([int(d[2]) for d in self.model._data])
class DialogExpenses(QuickDialog):
@ -887,38 +885,58 @@ class DialogExpenses(QuickDialog):
width, height = get_screen()
grid = QGridLayout()
col_sizes = [150, 270, 210, 150]
self.screen_size = parent.screen_size
self.button_add = CustomButton(
self,
id='button_add_expense',
size='small',
icon=get_icon('plus'),
title='AGREGAR',
method='action_add_expense',
name_style='mini_button',
)
grid.addWidget(self.button_add, 1, 0)
_sizes = [140, 290, 210, 150]
fields = [
{'label': 'FACTURA', 'type': 'char'},
{'label': 'DESCRIPCION', 'type': 'char'},
{'label': 'REFERENCIA', 'type': 'char'},
{'label': 'VALOR', 'type': 'integer'},
]
self.model_expenses = TableEdit(self, parent.data_expenses, fields)
table = TableView('model_expenses', self.model_expenses,
col_sizes, selection_edit=True)
table.setFixedSize(width * 0.4, height * 0.4)
grid.addWidget(table, 1, 0, 1, 2)
self.model = TableEdit(self, parent.data_expenses, fields)
table = TableView('model_expenses', self.model, _sizes, editable=True)
grid.addWidget(table, 2, 0, 1, 2)
label_total = QLabel('TOTAL:')
label_total.setObjectName('label_total_expenses')
label_total.setAlignment(alignCenter)
grid.addWidget(label_total, 2, 0)
grid.addWidget(label_total, 3, 0)
self.field_total = FieldMoney(self, 'field_total_expenses')
self.field_total.setObjectName('field_total_expenses')
self.field_total.setAlignment(alignLeft)
grid.addWidget(self.field_total, 2, 1)
grid.setRowStretch(0, 0)
grid.addWidget(self.field_total, 3, 1)
grid.setSpacing(10)
super(DialogExpenses, self).__init__(parent, 'action', widgets=[grid])
self.setGeometry(0, 0, width * 0.4, height * 0.6)
self.setGeometry(0, 0, width * 0.5, height * 0.7)
self.setWindowTitle('GASTOS')
# self.accepted.connect(self.dialog_expenses_accepted)
#
# def dialog_expenses_accepted(self):
# return True
def action_add_expense(self):
print('XXXXXXXXXXXXXX')
# value = self.model.insertRow(1)
record = ['', '', '', 0]
rec = self.model.add_record(record)
print(rec)
def get_sum(self):
return sum([int(d[3]) for d in self.model._data])
def clear(self):
new_data = [[d[0], 0, 0] for d in self.model._data]
self.model._data = new_data
self.field_total.setText('0')
class DialogTaxes(QuickDialog):