From cb80ba6559314c9e407e9790af4ca2f8ca540927 Mon Sep 17 00:00:00 2001 From: Wilson Gomez Date: Tue, 3 Jan 2023 13:01:34 -0500 Subject: [PATCH] define format and aling in table modify class FastReport to Report --- app/commons/dialogs.py | 3 +- app/commons/forms.py | 4 +- app/commons/model.py | 18 ++++++--- app/commons/table.py | 2 +- app/dialogs.py | 19 ++++----- app/main.py | 88 ++++++++++++++---------------------------- app/proxy.py | 57 ++++++++++++++++++--------- 7 files changed, 93 insertions(+), 98 deletions(-) diff --git a/app/commons/dialogs.py b/app/commons/dialogs.py index 45e900c..a856510 100644 --- a/app/commons/dialogs.py +++ b/app/commons/dialogs.py @@ -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) diff --git a/app/commons/forms.py b/app/commons/forms.py index 31f088f..49c1a18 100644 --- a/app/commons/forms.py +++ b/app/commons/forms.py @@ -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_) diff --git a/app/commons/model.py b/app/commons/model.py index 0847c49..c020d35 100644 --- a/app/commons/model.py +++ b/app/commons/model.py @@ -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. """ diff --git a/app/commons/table.py b/app/commons/table.py index c462cd2..123deb1 100644 --- a/app/commons/table.py +++ b/app/commons/table.py @@ -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): diff --git a/app/dialogs.py b/app/dialogs.py index bb4bf6b..b81334a 100644 --- a/app/dialogs.py +++ b/app/dialogs.py @@ -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] diff --git a/app/main.py b/app/main.py index 6e3bf56..73dcd13 100644 --- a/app/main.py +++ b/app/main.py @@ -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 diff --git a/app/proxy.py b/app/proxy.py index 189c83e..ba40d84 100644 --- a/app/proxy.py +++ b/app/proxy.py @@ -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)