add option print invoice in short form

This commit is contained in:
wilsongomez 2022-06-17 11:18:02 -05:00
parent b83ccbfc7c
commit 999f616d59
2 changed files with 142 additions and 171 deletions

View File

@ -1005,6 +1005,7 @@ class AppWindow(FrontWindow):
data = self.Sale.get_data(args) data = self.Sale.get_data(args)
if not data: if not data:
return return
# set type_doc
for i in range(copies): for i in range(copies):
self.receipt_sale.print_sale(data, type_doc, open_box) self.receipt_sale.print_sale(data, type_doc, open_box)
@ -1453,10 +1454,13 @@ class AppWindow(FrontWindow):
def action_print_sale(self): def action_print_sale(self):
number = self.field_invoice_number.text() number = self.field_invoice_number.text()
type_doc = 'invoice'
if not number: if not number:
type_doc = 'order'
number = self.field_number.text() number = self.field_number.text()
if number: if number:
self.field_invoice_number_ask.setText(number) self.field_invoice_number_ask.setText(number)
self.field_type_ask.set_from_id(type_doc)
res = self.dialog_print_invoice.exec_() res = self.dialog_print_invoice.exec_()
if res == DIALOG_REPLY_NO: if res == DIALOG_REPLY_NO:
return return
@ -1756,9 +1760,7 @@ class AppWindow(FrontWindow):
response = dialog.exec_() response = dialog.exec_()
if response == DIALOG_REPLY_NO: if response == DIALOG_REPLY_NO:
return return
print('va a cancelar')
self.Sale.cancel_sale({'id': self._sale['id']}) self.Sale.cancel_sale({'id': self._sale['id']})
print('paso')
self.field_password_for_cancel_ask.setText('') self.field_password_for_cancel_ask.setText('')
self.set_state('cancel') self.set_state('cancel')
self.clear_right_panel() self.clear_right_panel()
@ -1846,7 +1848,6 @@ class AppWindow(FrontWindow):
('shop', '=', shop_id), ('shop', '=', shop_id),
('create_date', '>=', delta), ('create_date', '>=', delta),
] ]
print(_type, 'this type')
if _type == 'cash': if _type == 'cash':
dom.append(['payment_term', '=', self.default_payment_term['id']]) dom.append(['payment_term', '=', self.default_payment_term['id']])
dom.append(['reservation', '!=', True]) dom.append(['reservation', '!=', True])
@ -1857,7 +1858,6 @@ class AppWindow(FrontWindow):
dom.append(('reservation', '=', True)) dom.append(('reservation', '=', True))
# dom.append(['payment_method', '!=', 'all_paid']) # dom.append(['payment_method', '!=', 'all_paid'])
fields = self.dialog_search_sales.fields_names fields = self.dialog_search_sales.fields_names
print(dom, 'dom', _type)
sales = self.Sale.find(dom, fields=fields, order=[('id', 'DESC')]) sales = self.Sale.find(dom, fields=fields, order=[('id', 'DESC')])
self.dialog_search_sales.set_from_values(sales) self.dialog_search_sales.set_from_values(sales)
if self.enviroment == 'retail': if self.enviroment == 'retail':

View File

@ -152,9 +152,7 @@ class Receipt(object):
pass pass
self.print_enter() self.print_enter()
self.print_header() self.print_header()
self.print_enter() self._printer.ln(3)
self.print_enter()
self.print_enter()
self._printer.cut() self._printer.cut()
self._printer.cashdraw(2) self._printer.cashdraw(2)
# self._printer.beep() # self._printer.beep()
@ -228,16 +226,20 @@ class Receipt(object):
self.logger.info("Warning: Printer error or device not found!") self.logger.info("Warning: Printer error or device not found!")
def _print_sale(self, sale, type_doc=None, open_box=False): def _print_sale(self, sale, type_doc=None, open_box=False):
self.print_header() short = sale['short_invoice']
self.print_body(sale, type_doc) self.print_header(short)
if sale.get('cufe'): self.print_body(sale, type_doc, short)
self._printer.text('CUFE: ' + sale['cufe']) if not short:
try: if sale.get('cufe'):
if sale.get('qr_code'): self._printer.text('CUFE: ' + sale['cufe'])
self.print_qrcode(sale['qr_code']) try:
except: if sale.get('qr_code'):
pass self.print_qrcode(sale['qr_code'])
self.print_footer(open_box) except:
pass
self.print_footer(open_box)
else:
self._printer.cut()
# self.print_extra_info(sale) # self.print_extra_info(sale)
if self._interface == 'cups': if self._interface == 'cups':
self._file.close() self._file.close()
@ -250,12 +252,9 @@ class Receipt(object):
self.print_header_sale_verification(sale) self.print_header_sale_verification(sale)
self.print_sale_lines(sale) self.print_sale_lines(sale)
self.print_totals(sale) self.print_totals(sale)
self.print_enter() self._printer.ln(3)
self.print_enter()
self.print_enter()
self._printer.cut() self._printer.cut()
self.print_enter() self._printer.ln(2)
self.print_enter()
self._printer.close() self._printer.close()
def print_line(self, *args): def print_line(self, *args):
@ -276,8 +275,7 @@ class Receipt(object):
self.set_printer() self.set_printer()
self._printer.set(align='center') self._printer.set(align='center')
self._printer.text('REPORTE DE ENTREGA DE DOMICILIARIOS') self._printer.text('REPORTE DE ENTREGA DE DOMICILIARIOS')
self.print_enter() self._printer.ln(2)
self.print_enter()
self.print_horinzontal_line() self.print_horinzontal_line()
self._printer.set(align='left') self._printer.set(align='left')
name = data['name'] name = data['name']
@ -297,14 +295,12 @@ class Receipt(object):
address = address[:character_address] address = address[:character_address]
address = self.word_space(address, character_address, 'left') address = self.word_space(address, character_address, 'left')
self.print_line(sale_number, address, sale_total) self.print_line(sale_number, address, sale_total)
self.print_enter() self._printer.ln(2)
self.print_enter()
total = money(data['total']) total = money(data['total'])
self._printer.text(f'TOTAL: {total}') self._printer.text(f'TOTAL: {total}')
self.print_enter() self.print_enter()
self._printer.cut() self._printer.cut()
self.print_enter() self._printer.ln(2)
self.print_enter()
self._printer.close() self._printer.close()
def print_count_money(self, data): def print_count_money(self, data):
@ -312,8 +308,7 @@ class Receipt(object):
self._printer.set(align='center') self._printer.set(align='center')
self.print_enter() self.print_enter()
self._printer.text('REPORTE DE DINERO EN CAJA') self._printer.text('REPORTE DE DINERO EN CAJA')
self.print_enter() self._printer.ln(2)
self.print_enter()
self.print_horinzontal_line() self.print_horinzontal_line()
self._printer.set(align='left') self._printer.set(align='left')
type_ = data['type'] type_ = data['type']
@ -342,27 +337,23 @@ class Receipt(object):
self._printer.text(f'TOTAL: {_total}') self._printer.text(f'TOTAL: {_total}')
self.print_enter() self.print_enter()
self._printer.cut() self._printer.cut()
self.print_enter() self._printer.ln(2)
self.print_enter()
self._printer.close() self._printer.close()
def print_header_sale_verification(self, sale): def print_header_sale_verification(self, sale):
title = 'VERIFICACION DE CUENTA' title = 'VERIFICACION DE CUENTA'
msg = """ESTIMADO CLIENTE UNA VEZ REALICE EL \n PAGO DE LA CUENTA POR \n FAVOR EXIJA SU RESPECTIVA FACTURA""" msg = """ESTIMADO CLIENTE UNA VEZ REALICE EL \n PAGO DE LA CUENTA POR \n FAVOR EXIJA SU RESPECTIVA FACTURA"""
self.print_enter() self._printer.ln(2)
self.print_enter()
self._printer.set(custom_size=True, width=2, height=2, align='center') self._printer.set(custom_size=True, width=2, height=2, align='center')
self._printer.text(title) self._printer.text(title)
self.print_enter() self.print_enter()
self.print_horinzontal_line('big') self.print_horinzontal_line('big')
self.print_enter() self._printer.ln(2)
self.print_enter()
self._printer.set(align='center') self._printer.set(align='center')
self._printer.text(msg) self._printer.text(msg)
self.print_enter() self.print_enter()
self._printer.set(align='left') self._printer.set(align='left')
self.print_enter() self._printer.ln(2)
self.print_enter()
create_date = sale.get('create_date') create_date = sale.get('create_date')
if create_date: if create_date:
self._printer.text(f'FECHA: {create_date}') self._printer.text(f'FECHA: {create_date}')
@ -401,17 +392,15 @@ class Receipt(object):
self._printer.qr(qrcode, center=True, size=5) self._printer.qr(qrcode, center=True, size=5)
self.print_enter() self.print_enter()
def print_header(self): def print_header(self, short=False):
if self._img_logo: if not short:
self.print_logo() if self._img_logo:
self._printer.set(align='center') self.print_logo()
if self._header != '' and self._header is not None: self._printer.set(align='center')
self._printer.textln(self._header) if self._header != '' and self._header is not None:
# self.print_enter() self._printer.textln(self._header)
self._printer.textln(self._company) self._printer.textln(self._company)
# self.print_enter()
self._printer.textln(self._shop) self._printer.textln(self._shop)
# self.print_enter()
if self._id_number: if self._id_number:
self._printer.text('NIT:' + self._id_number) self._printer.text('NIT:' + self._id_number)
if self._regime_tax: if self._regime_tax:
@ -419,26 +408,23 @@ class Receipt(object):
self.print_enter() self.print_enter()
if self._street: if self._street:
self._printer.textln(self._street) self._printer.textln(self._street)
# self.print_enter() if not short:
if self._city:
self._printer.text(self._city)
if self._phone:
if self._city: if self._city:
self._printer.text(' ') self._printer.text(self._city)
self._printer.text('Telefono:' + self._phone) if self._phone:
if self._city or self._phone: if self._city:
self.print_enter() self._printer.text(' ')
self._printer.text('Telefono:' + self._phone)
if self._city or self._phone:
self.print_enter()
self._printer.ln(2) self._printer.ln(2)
# self.print_enter()
# self.print_enter()
def print_horinzontal_line(self, size=None): def print_horinzontal_line(self, size=None):
if size == 'big': if size == 'big':
row_characters = '-' * int(self._row_characters / 2) row_characters = '-' * int(self._row_characters / 2)
else: else:
row_characters = '-' * self._row_characters row_characters = '-' * self._row_characters
self._printer.text(row_characters) self._printer.textln(row_characters)
self.print_enter()
def print_horinzontal_double_line(self): def print_horinzontal_double_line(self):
self._printer.text('=' * self._row_characters) self._printer.text('=' * self._row_characters)
@ -455,7 +441,8 @@ class Receipt(object):
right = right.decode("utf-8") right = right.decode("utf-8")
left += (len_left - len(left) + 1) * ' ' left += (len_left - len(left) + 1) * ' '
self._printer.text(left) self._printer.text(left)
self._printer.text(right + '\n') self._printer.text(right)
self.print_enter()
def print_sale_lines(self, sale): def print_sale_lines(self, sale):
self.print_enter() self.print_enter()
@ -508,7 +495,7 @@ class Receipt(object):
if line['discount'] and Decimal(line['discount']) and self._show_discount: if line['discount'] and Decimal(line['discount']) and self._show_discount:
self.print_split(initial, discount) self.print_split(initial, discount)
def print_totals(self, sale): def print_totals(self, sale, short):
untaxed_amount = sale['untaxed_amount'] untaxed_amount = sale['untaxed_amount']
total_amount = sale['total_amount'] total_amount = sale['total_amount']
self.print_split('', '----------------') self.print_split('', '----------------')
@ -516,28 +503,25 @@ class Receipt(object):
self.print_split('Impuesto:', money(sale['tax_amount'])) self.print_split('Impuesto:', money(sale['tax_amount']))
self.print_split('', '----------------') self.print_split('', '----------------')
self.print_split('Total:', money(total_amount)) self.print_split('Total:', money(total_amount))
self.print_enter()
net_amount = sale['total_amount'] net_amount = sale['total_amount']
delivery_amount = sale.get('delivery_amount', 0) if not short:
if delivery_amount and delivery_amount > 0: self.print_enter()
net_amount = net_amount + delivery_amount delivery_amount = sale.get('delivery_amount', 0)
if delivery_amount and delivery_amount > 0:
net_amount = net_amount + delivery_amount
tip_amount = sale.get('tip_amount', 0) tip_amount = sale.get('tip_amount', 0)
if tip_amount and tip_amount > 0: if tip_amount and tip_amount > 0:
net_amount = net_amount + tip_amount net_amount = net_amount + tip_amount
if tip_amount: if tip_amount:
self.print_split('Propina:', money(tip_amount)) self.print_split('Propina:', money(tip_amount))
if delivery_amount: if delivery_amount:
self.print_split('Domicilio:', money(delivery_amount)) self.print_split('Domicilio:', money(delivery_amount))
if tip_amount or delivery_amount: if tip_amount or delivery_amount:
self.print_split('Valor Neto:', money(net_amount)) self.print_split('Valor Neto:', money(net_amount))
self.print_enter()
# if self._show_discount:
# self.print_split('Descuento:', money(sale['discount']))
self.print_enter()
if sale['cash_received']: if sale['cash_received']:
self.print_split('Recibido:', money(sale['cash_received'])) self.print_split('Recibido:', money(sale['cash_received']))
else: else:
@ -547,14 +531,12 @@ class Receipt(object):
msg_residual = 'Pendiente:' msg_residual = 'Pendiente:'
else: else:
msg_residual = 'Cambio:' msg_residual = 'Cambio:'
self.print_split(msg_residual, money(change)) self.print_split(msg_residual, money(change))
self.print_enter() self.print_enter()
if not short:
order = sale.get('order') order = sale.get('order')
if order: if order:
self._printer.text(f'CODIGO: {order}') self._printer.textln(f'CODIGO: {order}')
self.print_enter()
def _print_info_consumer(self, sale): def _print_info_consumer(self, sale):
consumer = sale.get('consumer', None) consumer = sale.get('consumer', None)
@ -566,15 +548,12 @@ class Receipt(object):
self.print_horinzontal_line() self.print_horinzontal_line()
self.print_enter() self.print_enter()
self._printer.set(align='center') self._printer.set(align='center')
self._printer.text('========== INFO CONSUMIDOR ==========') self._printer.textln('========== INFO CONSUMIDOR ==========')
self.print_enter() self.print_enter()
self._printer.set(align='left') self._printer.set(align='left')
self._printer.text('NOMBRE: %s' % consumer_name) self._printer.textln('NOMBRE: %s' % consumer_name)
self.print_enter() self._printer.textln('DIRECCION: %s' % consumer_address)
self._printer.text('DIRECCION: %s' % consumer_address) self._printer.textln('TELEFONO: %s' % consumer_phone)
self.print_enter()
self._printer.text('TELEFONO: %s' % consumer_phone)
self.print_enter()
if payment_method and payment_method == 'terminal': if payment_method and payment_method == 'terminal':
payment_method = '- PAGA CON DATAFONO' payment_method = '- PAGA CON DATAFONO'
elif payment_method and payment_method == 'all_paid': elif payment_method and payment_method == 'all_paid':
@ -584,14 +563,12 @@ class Receipt(object):
else: else:
payment_method = '- PAGA EN EFECTIVO' payment_method = '- PAGA EN EFECTIVO'
self._printer.text(f'MEDIO DE PAGO: {payment_method}') self._printer.text(f'MEDIO DE PAGO: {payment_method}')
self.print_enter() self._printer.ln(2)
self.print_enter()
delivery_amount = money(sale.get('delivery_amount', 0)) delivery_amount = money(sale.get('delivery_amount', 0))
self._printer.text(f'Domicilio: {delivery_amount}') self._printer.text(f'Domicilio: {delivery_amount}')
self.print_enter() self._printer.ln(2)
self.print_enter()
def print_body(self, sale, type_doc='invoice'): def print_body(self, sale, type_doc='invoice', short=False):
self._printer.set(font=_FONT_B) self._printer.set(font=_FONT_B)
kind_string = sale.get('kind_string', None) kind_string = sale.get('kind_string', None)
if type_doc != 'invoice' and kind_string and self._environment != 'retail': if type_doc != 'invoice' and kind_string and self._environment != 'retail':
@ -599,8 +576,7 @@ class Receipt(object):
height=2, align='center') height=2, align='center')
kind = f'- - - {kind_string} - - -' kind = f'- - - {kind_string} - - -'
self._printer.text(kind) self._printer.text(kind)
self.print_enter() self._printer.ln(2)
self.print_enter()
self._printer.set(custom_size=False) self._printer.set(custom_size=False)
self._printer.set(align='left') self._printer.set(align='left')
if type_doc == 'invoice': if type_doc == 'invoice':
@ -618,10 +594,11 @@ class Receipt(object):
if sale.get('invoice_time'): if sale.get('invoice_time'):
self._printer.text(' Hora:%s' % sale['invoice_time']) self._printer.text(' Hora:%s' % sale['invoice_time'])
self.print_enter() self.print_enter()
if sale.get('turn') and sale['turn'] != 0: if not short:
self._printer.text('Turno: %s - ' % str(sale['turn'])) if sale.get('turn') and sale['turn'] != 0:
self.print_enter() self._printer.text('Turno: %s - ' % str(sale['turn']))
self.print_horinzontal_line() self.print_enter()
self.print_horinzontal_line()
party_name = 'Cliente: %s ' % sale['party'] party_name = 'Cliente: %s ' % sale['party']
party_id_number = 'Id: %s' % sale.get('party_id_number', '') party_id_number = 'Id: %s' % sale.get('party_id_number', '')
if len(party_name + party_id_number) > self._row_characters: if len(party_name + party_id_number) > self._row_characters:
@ -630,23 +607,24 @@ class Receipt(object):
self._printer.text(party_id_number) self._printer.text(party_id_number)
else: else:
self._printer.text(party_name + party_id_number) self._printer.text(party_name + party_id_number)
if sale.get('party_address'): if not short:
self.print_enter() if sale.get('party_address'):
self._printer.text('Direccion: %s' % sale['party_address']) self.print_enter()
if sale.get('party_phone'): self._printer.text('Direccion: %s' % sale['party_address'])
self.print_enter() if sale.get('party_phone'):
self._printer.text('Telefono: %s' % sale['party_phone']) self.print_enter()
if sale.get('payment_term'): self._printer.text('Telefono: %s' % sale['party_phone'])
self.print_enter() if sale.get('payment_term'):
self._printer.text('Forma de Pago: %s' % sale['payment_term']) self.print_enter()
self._printer.text('Forma de Pago: %s' % sale['payment_term'])
self.print_enter() self.print_enter()
self._print_info_consumer(sale) self._print_info_consumer(sale)
self.print_sale_lines(sale) self.print_sale_lines(sale)
self.print_totals(sale) self.print_totals(sale, short)
if not short:
self.print_horinzontal_line() self.print_horinzontal_line()
self.print_enter() self.print_enter()
self._printer.set(align='left') self._printer.set(align='left')
self._printer.text('DETALLE DE IMPUESTOS') self._printer.text('DETALLE DE IMPUESTOS')
self.print_enter() self.print_enter()
@ -664,63 +642,59 @@ class Receipt(object):
self.print_col( self.print_col(
str(int(taxes[tax]['tax'])), self.taxes_col_width3) str(int(taxes[tax]['tax'])), self.taxes_col_width3)
self.print_enter() self.print_enter()
if not short:
self.print_enter()
self.print_horinzontal_line()
if sale.get('payments'):
self.print_enter()
self.print_col('MEDIO PAGO', self.payments_col_width1)
self.print_col('# APROB', self.payments_col_width2)
self.print_col('VALOR', self.payments_col_width3)
self.print_enter()
payments = sale['payments']
for p in payments:
self.print_col(str(p['name']) + ' ', self.payments_col_width1)
self.print_col(str(p['voucher']) + ' ',
self.payments_col_width2)
self.print_col(str(int(p['amount'])), self.payments_col_width3)
self.print_enter() self.print_enter()
self.print_horinzontal_line() self.print_horinzontal_line()
no_products = 'No ITEMS: %s' % str(sale['num_products']) if sale.get('payments'):
self._printer.text(no_products) self.print_enter()
self.print_enter() self.print_col('MEDIO PAGO', self.payments_col_width1)
self.print_col('# APROB', self.payments_col_width2)
self.print_col('VALOR', self.payments_col_width3)
self.print_enter()
payments = sale['payments']
for p in payments:
self.print_col(str(p['name']) + ' ', self.payments_col_width1)
self.print_col(str(p['voucher']) + ' ',
self.payments_col_width2)
self.print_col(str(int(p['amount'])), self.payments_col_width3)
comment = sale.get('comment') self.print_enter()
if comment: self.print_horinzontal_line()
self.print_horinzontal_line() no_products = 'No ITEMS: %s' % str(sale['num_products'])
self._printer.text(no_products)
self.print_enter() self.print_enter()
self._printer.text(f'NOTAS: {comment}')
comment = sale.get('comment')
if comment:
self.print_horinzontal_line()
self.print_enter()
self._printer.text(f'NOTAS: {comment}')
self.print_enter()
self.print_horinzontal_line()
register = 'CAJA No. %s' % self._sale_device
self._printer.text(register)
self.print_enter() self.print_enter()
self.print_horinzontal_line()
# if type_doc == 'invoice': self._printer.text('CAJERO: %s' % self._user)
# self._printer.text('No PEDIDO: ' + sale['order'])
# self.print_enter()
register = 'CAJA No. %s' % self._sale_device
self._printer.text(register)
self.print_enter()
self._printer.text('CAJERO: %s' % self._user)
self.print_enter() self.print_enter()
if sale.get('salesman'): if sale.get('salesman'):
self._printer.text('VENDEDOR: %s' % sale['salesman']) self._printer.text('VENDEDOR: %s' % sale['salesman'])
self.print_enter() self.print_enter()
if not short:
if sale.get('channel'):
self._printer.text('CANAL DE VENTA: %s' % sale['channel'])
self.print_enter()
if sale.get('channel'): if sale.get('delivery_party'):
self._printer.text('CANAL DE VENTA: %s' % sale['channel']) self._printer.text('DOMICILIARIO: %s' % sale['delivery_party'])
self.print_enter() self.print_enter()
print(self._show_position, sale['position'], '*************')
if self._show_position:
self._printer.text('POSICION: %s' % str(sale['position']))
self.print_enter()
if sale.get('delivery_party'): self.print_horinzontal_line()
self._printer.text('DOMICILIARIO: %s' % sale['delivery_party'])
self.print_enter()
print(self._show_position, sale['position'], '*************')
if self._show_position:
self._printer.text('POSICION: %s' % str(sale['position']))
self.print_enter()
self.print_horinzontal_line()
auth_kind = sale.get('auth_kind', None) auth_kind = sale.get('auth_kind', None)
if auth_kind and sale['state'] not in ['draft']: if auth_kind and sale['state'] not in ['draft']:
@ -730,10 +704,9 @@ class Receipt(object):
elif self._gta_info and sale['state'] not in ['draft']: elif self._gta_info and sale['state'] not in ['draft']:
self._printer.text(self._gta_info) self._printer.text(self._gta_info)
self.print_enter() self.print_enter()
self._printer.text('Fecha de creacion: %s' % sale["create_date"]) if not short:
self._printer.text('Fecha de creacion: %s' % sale["create_date"])
self.print_enter() self._printer.ln(2)
self.print_enter()
def print_extra_info(self, sale): def print_extra_info(self, sale):
if sale.get('pos_notes'): if sale.get('pos_notes'):
@ -838,8 +811,7 @@ class Receipt(object):
turn = order.get('turn') turn = order.get('turn')
if turn: if turn:
self._printer.text('TURNO: %s' % str(turn)) self._printer.text('TURNO: %s' % str(turn))
self.print_enter() self._printer.ln(2)
self.print_enter()
if self._environment != 'retail': if self._environment != 'retail':
kind = order.get('kind', 'delivery') kind = order.get('kind', 'delivery')
if kind == 'take_away': if kind == 'take_away':
@ -947,8 +919,7 @@ class Receipt(object):
if order['comment']: if order['comment']:
self._printer.text(str(order['comment'])) self._printer.text(str(order['comment']))
self.print_enter() self.print_enter()
self.print_enter() self._printer.ln(2)
self.print_enter()
# if self._environment != 'retail': # if self._environment != 'retail':
# self._printer.set(custom_size=True, width=2, height=2, align='center') # self._printer.set(custom_size=True, width=2, height=2, align='center')
# title = f'+ + + {_kind} + + +' # title = f'+ + + {_kind} + + +'