From f55dddc80b0e3d9db445c74957b2785d3ffebc31 Mon Sep 17 00:00:00 2001 From: Oscar Alvarez Date: Tue, 2 Feb 2021 20:52:03 -0500 Subject: [PATCH] Add report delivery man --- app/dialogs.py | 25 ++++++++++++++++++++----- app/main.py | 35 ++++++++++++++++++++++++++++++++--- app/reporting.py | 40 +++++++++++++++++++++------------------- test_printer.py | 2 +- 4 files changed, 74 insertions(+), 28 deletions(-) diff --git a/app/dialogs.py b/app/dialogs.py index 4fffbfd..8179fc5 100644 --- a/app/dialogs.py +++ b/app/dialogs.py @@ -45,6 +45,14 @@ WIZARDS = { 'values': [('', ''), ('1', '1'), ('2', '2'), ('3', '3')], }), ], + }, + 'delivery_report': { + 'fields': [ + ('date', { + 'name': 'FECHA', + 'type': 'date', + }), + ], } } @@ -104,23 +112,30 @@ class DialogReports(QuickDialog): self.setWindowTitle('REPORTES') self.add_widget(vbox) - def open_wizard(self, report): + def open_wizard(self, report, add_fields=None, open_print=False): vbox = QVBoxLayout() wiz_report = WIZARDS[report] - report_name = wiz_report['name'] - fields = OrderedDict(wiz_report['fields']) + fields = wiz_report['fields'] + print(fields) + if add_fields: + fields.append(add_fields) + fields = OrderedDict(fields) self.form = GridForm(self, fields, col=2) vbox.addLayout(self.form) dialog = QuickDialog(self, 'action', widgets=[vbox]) result = dialog.exec() store = self.form.getStore() values = {} - for cf in wiz_report['ctx_fields']: + for cf in wiz_report.get('ctx_fields', []): values[cf] = self.parent.ctx[cf] values.update(store) if result == 1: - self.open_report(report_name, values) + if open_print: + return values + else: + report_name = wiz_report['name'] + self.open_report(report_name, values) def open_report(self, report_name, data): report = FastReport(self.parent.ctx) diff --git a/app/main.py b/app/main.py index 3a8d597..029757c 100644 --- a/app/main.py +++ b/app/main.py @@ -1322,9 +1322,38 @@ class AppWindow(FrontWindow): return result def action_delivery_report(self): - print('action_print_delivery_report...') - # data = self.Sale.get_delivery_report(args) - # result = self.receipt_order.print_delivery_report(data) + _parties = {dp['id']: dp['rec_name'] for dp in self.delivery_parties} + print(self.delivery_parties) + add_fields = ('delivery_party', { + 'name': 'DOMICILIARIO', + 'type': 'selection', + 'values': _parties.items(), + }) + args = self.dialog_reports.open_wizard( + 'delivery_report', add_fields, True + ) + print(args) + print(_parties) + sales = self.Sale.find([ + ('sale_date', '=', args['date']), + ('delivery_party', '=', args['delivery_party']), + ('shop', '=', self.shop['id']), + ]) + data = { + 'name': _parties[int(args['delivery_party'])], + 'sale_date': str(args['date']), + 'sales': [], + } + total = 0 + for sale in sales: + total_amount = sale['total_amount'] + data['sales'].append({ + 'number': sale['invoice_number'], + 'total': total_amount, + }) + total += total_amount + data['total'] = total + self.receipt_sale.print_delivery_report(data) def action_send_order(self, sale_id=None, reversion=False, init_view=True): if self.model_sale_lines.rowCount() == 0: diff --git a/app/reporting.py b/app/reporting.py index a17b1b7..6c40a93 100755 --- a/app/reporting.py +++ b/app/reporting.py @@ -155,7 +155,7 @@ class Receipt(object): self._profile = printer['profile'] def set_printer(self): - try: + if 1: #try: if self._interface == 'usb': if os.name == 'posix': self._printer = printer.File(self._device, profile=self._profile) @@ -171,11 +171,12 @@ class Receipt(object): self.conn = cups.Connection() self._file = open(TEMP_INVOICE_FILE, 'w') self._printer = CupsPrinter(self._file, self._row_characters) + print('xxxxxxx', self._printer) if not self._printer: self.logger.info("Warning: Can not found Printer!") return self.logger.info("Info: Printer is OK!") - except: + else: #except: self.logger.info("Warning: Printer error or device not found!") def print_sale(self, sale, type_doc=None, open_box=False): @@ -239,25 +240,26 @@ class Receipt(object): def print_delivery_report(self, data): self.set_printer() + self._printer.set(align='center') self._printer.text('REPORTE DE ENTREGA DE DOMICILIARIOS') self.print_enter() - for journal in data['journals']: - self.print_enter() - self.print_horinzontal_line() - name = journal['name'] - self._printer.text(f'MEDIO DE PAGO: ${name}') - self.print_enter() - self.print_horinzontal_line() - self.print_enter() - for sale in journal.get('sales', None): - sale_total = money(sale['total']) - self.print_split(sale['number'], sale_total) - self.print_enter() - - total = journal['total'] - self.print_enter() - self._printer.text(f'TOTAL: ${total}') - + self.print_enter() + self.print_horinzontal_line() + self._printer.set(align='left') + name = data['name'] + sale_date = data['sale_date'] + self._printer.text(f'DOMICILIARIO: {name}') + self.print_enter() + self._printer.text(f'FECHA: {sale_date}') + self.print_enter() + self.print_horinzontal_line() + self.print_enter() + for sale in data['sales']: + sale_total = money(sale['total']) + self.print_split(sale['number'], sale_total) + self.print_enter() + total = money(data['total']) + self._printer.text(f'TOTAL: {total}') self.print_enter() self._printer.cut() self.print_enter() diff --git a/test_printer.py b/test_printer.py index 7d8301a..f2d20fc 100644 --- a/test_printer.py +++ b/test_printer.py @@ -68,7 +68,7 @@ if __name__ == '__main__': receipt = Receipt(ctx_printing) if 1: #try: - receipt.set_printer(printer_test) + receipt.config_printer(printer_test) receipt.test_printer() # except: # print('Printing failed...!')