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

View File

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