define format and aling in table

modify class FastReport to Report
This commit is contained in:
Wilson Gomez 2023-01-03 13:01:34 -05:00
parent 2796adc5ca
commit cb80ba6559
7 changed files with 93 additions and 98 deletions

View File

@ -222,9 +222,8 @@ class QuickDialog(QDialog):
def set_simple_model(self):
self.data_model = QStandardItemModel(0, len(self.data['heads']), self)
# _horizontal = Qt.Horizontal
# print('simple model')
map(self.data_model.setHeaderData, enumerate(self.data['heads'], 0))
# _horizontal = Qt.Horizontal
# for i, h in enumerate(self.data['heads'], 0):
# self.data_model.setHeaderData(i, _horizontal, h)

View File

@ -193,10 +193,10 @@ class FieldDate(QCalendarWidget):
self.form.setState(self.key, value.get('default'))
def get_value(self):
return self.selectedDate().toPyDate()
return self.selectedDate().toPython()
def on_change(self):
date_ = self.selectedDate().toPyDate()
date_ = self.selectedDate().toPython()
if self.form:
self.form.setState(self.key, date_)

View File

@ -22,7 +22,13 @@ class TableEdit(QAbstractTableModel):
val = self._data[row][col]
if self._fields[col]['type'] == 'integer':
return int(val)
elif self._fields[col]['type'] == 'float':
return "{:,.2f}".format(val)
return val
elif role == Qt.TextAlignmentRole:
col = index.column()
if self._fields[col]['type'] in ['integer', 'float']:
return Qt.AlignRight
def rowCount(self, index):
return len(self._data)
@ -48,6 +54,8 @@ class TableEdit(QAbstractTableModel):
col = index.column()
if self._fields[col]['type'] == 'integer':
value = int(value)
elif self._fields[col]['type'] == 'float':
value = "{:,.2f}".format(value)
self._data[row][col] = value
on_change = self._fields[col].get('change')
if on_change:
@ -56,11 +64,11 @@ class TableEdit(QAbstractTableModel):
return True
def flags(self, index):
col = index.column()
if self._fields[col].get('readonly'):
return Qt.ItemIsEnabled
else:
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
field = self._fields[index.column()]
flags = Qt.ItemIsEnabled
if not field.get('readonly'):
flags |= Qt.ItemIsSelectable | Qt.ItemIsEditable
return flags
def headerData(self, section, orientation, role):
""" Set the headers to be displayed. """

View File

@ -76,7 +76,7 @@ class TableView(QTableView):
selected_idx = self.currentIndex()
if selected_idx:
data_row = self.model.get_data(selected_idx)
if data_row:
if data_row and self.method_selected_row:
self.method_selected_row(data_row)
def rowsInserted(self, index, start, end):

View File

@ -1,6 +1,6 @@
from decimal import Decimal
from datetime import datetime
from operator import itemgetter
from operator import itemgetter, attrgetter
from .commons.dialogs import HelpDialog, QuickDialog
# from PyQt5.QtCore import Qt, QSize
# from PyQt5.QtWidgets import (
@ -13,7 +13,7 @@ from PySide6.QtWidgets import (
QScrollArea, QHBoxLayout, QDoubleSpinBox, QLabel, QMessageBox
)
from .proxy import FastReport
from .proxy import Report
from .buttonpad import ButtonsFunction
from .constants import alignCenter, alignLeft, FRACTIONS, TYPE_VEHICLE, MONEY
from .commons.forms import FieldMoney, ComboBox, GridForm
@ -43,7 +43,6 @@ __all__ = [
WIZARDS = {
'square_box_report': {
'name': 'sale_pos_frontend.sale_square_box_report',
'ctx_fields': ('company', 'shop'),
'fields': [
('date', {
'name': 'FECHA',
@ -149,9 +148,6 @@ class DialogReports(QuickDialog):
result = dialog.exec()
store = self.form.getStore()
values = {}
for cf in wiz_report.get('ctx_fields', []):
values[cf] = self.parent.ctx[cf]
values.update(store)
report_name = wiz_report.get('name')
if result == 1:
@ -161,7 +157,7 @@ class DialogReports(QuickDialog):
self.open_report(report_name, values)
def open_report(self, report_name, data):
report = FastReport(self.parent.ctx)
report = Report(self.parent.ctx)
values = {
'report_name': report_name,
'args': data,
@ -1008,7 +1004,7 @@ class DialogExpenses(QuickDialog):
{'name': 'invoice_number', 'label': 'FACTURA', 'type': 'char'},
{'name': 'description', 'label': 'DESCRIPCION', 'type': 'char'},
{'name': 'reference', 'label': 'REFERENCIA', 'type': 'char'},
{'name': 'amount', 'label': 'VALOR', 'type': 'integer', 'change': 'set_total'},
{'name': 'amount', 'label': 'VALOR', 'type': 'float', 'change': 'set_total'},
)
self.model = TableEdit(self, [], fields)
self.table = TableView('model_expenses', self.model, _sizes, editable=True)
@ -1032,6 +1028,11 @@ class DialogExpenses(QuickDialog):
self.id_count = -1
self.load()
def exec(self):
self.clear()
self.load()
super(DialogExpenses, self).exec()
def load(self):
if not self.parent.data_expenses:
return
@ -1067,7 +1068,7 @@ class DialogExpenses(QuickDialog):
rec = self.parent.Expenses.create(args)
for d in self.model._data:
if obj_id == d[0]:
d[0] = rec['id']
d[0] = rec[0]
def action_add_expense(self):
record = [self.id_count, '', '', '', 0]

View File

@ -752,15 +752,15 @@ class AppWindow(FrontWindow):
self.salesman = {}
self.order_front.hide()
self.start_front.show()
if hasattr(self, 'WidgetOffline'):
self.WidgetOffline.show()
if hasattr(self, 'WidgetShop'):
self.WidgetShop.show()
self.set_state('disabled')
self.buttons_stacked.hide()
self._sale = {}
else:
self.start_front.hide()
if hasattr(self, 'WidgetOffline'):
self.WidgetOffline.hide()
if hasattr(self, 'WidgetShop'):
self.WidgetShop.hide()
self.order_front.show()
self.buttons_stacked.show()
@ -1227,7 +1227,7 @@ class AppWindow(FrontWindow):
def action_expenses(self):
if self.set_expenses():
self.dialog_expenses.exec_()
self.dialog_expenses.exec()
def action_open_statement(self):
self.dialog_money_count.exec('open')
@ -1636,8 +1636,8 @@ class AppWindow(FrontWindow):
}
orders, sale_number = self.Sale.get_reversion(args)
self.receipt_order.print_orders(orders, reversion=True)
except:
logging.error('Printing order reversion fail!')
except Exception as e:
logging.error('Printing order reversion fail!', e)
def _print_order(self, sale_id, kind, reversion=False):
result = False
@ -1653,12 +1653,19 @@ class AppWindow(FrontWindow):
self.store.set({'number': sale_number})
self.order_number.setText(sale_number)
if self.enviroment != 'restaurant' and self.device['shop']['order_copies'] :
result = self.receipt_sale.print_orders(orders, reversion, kind)
if self.enviroment != 'restaurant' and \
self.device['shop']['order_copies']:
result = self.receipt_sale.print_orders(
orders,
reversion,
kind)
elif self.enviroment == 'restaurant':
result = self.receipt_order.print_orders(orders, reversion, kind)
except:
logging.error('Printing order fail!')
result = self.receipt_order.print_orders(
orders,
reversion,
kind)
except Exception as e:
logging.error('Printing order fail!', e)
return result
def action_delivery_report(self):
@ -2037,20 +2044,6 @@ class AppWindow(FrontWindow):
# return records
def get_product_by_categories_dash(self):
# self.allow_categories = {
# pc['id']: pc for pc in self.product_categories \
# if not pc['parent'] and not pc['accounting']
# }
# get_products = self._get_products_by_category_dash
# find = self.Product.find
# for cat in self.allow_categories:
# cat['icon'] = get_icon(cat['name_icon'])
# if cat.get('childs.'):
# for child in cat.get('childs.'):
# get_products(child, find)
# else:
# get_products(cat, find)
values = self.Sale.get_product_by_categories(
{
'categories': self.allow_categories_ids
@ -2058,21 +2051,21 @@ class AppWindow(FrontWindow):
return values
def action_square_box_report(self):
try:
values, report_name = self.dialog_reports.open_wizard('square_box_report', open_print=False)
except:
values = {}
values, report_name = self.dialog_reports.open_wizard('square_box_report', open_print=False)
if not values.get('turn'):
return
shop, company = self.shop['id'], self.company
statements = self.Statement.find([
('turn', '=', values['turn']),
('state', '=', 'draft'),
('date', '=', values['date']),
('company', '=', values['company']),
('sale_device.shop', '=', values['shop'])
])
('company', '=', company),
('sale_device.shop', '=', shop)
], fields=['id'])
if statements:
return
values['company'] = company
values['shop'] = shop
self.dialog_reports.open_report(report_name, values)
def action_terminal_journal_report(self):
@ -2096,32 +2089,6 @@ class AppWindow(FrontWindow):
}
return res
# def get_category_items(self, records):
# records_by_category = {}
# def _get_tree_categories(cat):
# sub_categories = {}
# if not cat['childs']:
# sub_categories[cat['name']] = records_by_category.get(
# cat['id']) or []
# else:
# for child in cat['childs']:
# sub_categories.update(_get_tree_categories(
# self.target_categories[child]['obj']))
# return sub_categories
# for record in records:
# cat_id = record.get('template.account_category')
# if cat_id not in records_by_category.keys():
# records_by_category[cat_id] = []
# records_by_category[cat_id].append(record)
# res = {}
# for ac in self.allow_categories:
# res[ac['name']] = _get_tree_categories(ac)
# return res
def on_selected_product(self):
if self.dialog_search_products.current_row:
self._current_line_id = None
@ -2654,9 +2621,10 @@ class AppWindow(FrontWindow):
])
if statements:
self.statement_cash = statements[0]
self.data_expenses = self.Expenses.find([
expenses = self.Expenses.find([
('statement', '=', self.statement_cash['id']),
], fields=['reference', 'invoice_number', 'description', 'amount'])
self.data_expenses = expenses
return True
else:
self.statement_cash = None

View File

@ -46,7 +46,7 @@ class Model(object):
self.port = ctx['params']['port']
self.host = ctx['params']['server']
self.db = ctx['params']['database']
self.api = 'http://localhost:8010/ZIRUS'
# self.api = 'http://localhost:8010/ZIRUS'
if ctx['params']['mode'] == 'http':
self.conn = HTTPConnection
else:
@ -76,6 +76,7 @@ class Model(object):
'fields_names': fields,
'context': self.ctx,
}
print(args_, self.model)
res = self.get_connection('POST', '/search', args_)
return res
# route = self.get_route('search')
@ -147,9 +148,9 @@ class Model(object):
# res = requests.post(route, data=data)
# return res.json()
def get_route(self, target):
route = self.api + '/' + target
return route
# def get_route(self, target):
# route = self.api + '/' + target
# return route
def get_connection(self, method, target, data=None):
url = '/' + self.db + target
@ -186,28 +187,46 @@ class Model(object):
# return response
class FastReport(object):
class Report(object):
def __init__(self, ctx):
self.ctx = ctx
api_url = ctx['params']['api_url']
db = ctx['params']['database']
self.api = '/'.join(['http:/', api_url, db])
self.port = ctx['params']['port']
self.host = ctx['params']['server']
self.db = ctx['params']['database']
if ctx['params']['mode'] == 'http':
self.conn = HTTPConnection
else:
self.conn = HTTPSConnection
def get_route(self, target):
route = self.api + '/' + target
return route
def get_connection(self, method, target, data=None):
url = '/' + self.db + target
if data:
payload = json.dumps(data, default=encoder)
else:
payload = None
conn = self.conn(self.host, port=self.port)
conn.request(method, url, body=payload, headers=HEADERS)
response = conn.getresponse()
res = json.loads(response.read())
conn.close()
return res
# def get_route(self, target):
# route = self.api + '/' + target
# return route
def get(self, values):
route = self.get_route('report')
args_ = {
'report': values['report_name'],
'args': values['args'],
'context': self.ctx['params'],
'data': values['args'],
'context': self.ctx,
}
data = json.dumps(args_, default=encoder)
res = requests.post(route, data=data)
return res.json()
res = self.get_connection('POST', '/report', args_)
return res
# route = self.get_route('report')
# data = json.dumps(args_, default=encoder)
# res = requests.post(route, data=data)
def open(self, args):
oext = args['oext']
@ -237,7 +256,7 @@ if __name__ == "__main__":
}
if test_model:
model = {'model': 'sale.sale'}
test_model = FastModel(model, ctx)
test_model = Model(model, ctx)
id = 180
data = {
'reference': 'OC-02874',
@ -254,6 +273,6 @@ if __name__ == "__main__":
'shop': 1,
},
}
report = FastReport(ctx)
report = Report(ctx)
res = report.get(data)
report.open(res)