define format and aling in table
modify class FastReport to Report
This commit is contained in:
parent
2796adc5ca
commit
cb80ba6559
|
@ -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)
|
||||
|
||||
|
|
|
@ -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_)
|
||||
|
||||
|
|
|
@ -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. """
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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]
|
||||
|
|
88
app/main.py
88
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
|
||||
|
|
57
app/proxy.py
57
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)
|
||||
|
|
Loading…
Reference in New Issue