def gen_footer_col2(self): w = self.usable_width / 2 h = self.usable_height s = self footer_totals_data = [["Subtotal", "000"]] def get_data(): return [[ "Subtotal", s._format_moneda(s.subtotales[s.drawn_items - 1]) ]] tbl = RestrictTable(footer_totals_data, w, h, get_data, [w - 70, 70]) tablestyle = TableStyle([('ALIGN', (-1, 0), (-1, -1), 'RIGHT'), ('BOTTOMPADDING', (0, 0), (-1, -1), 2), ('TOPPADDING', (0, -1), (-1, -1), 8), ('TEXTCOLOR', (0, 0), (-1, -1), (.3, .3, .3)), ('FONTNAME', (0, -1), (-1, -1), _baseFontNameB), ('FONTSIZE', (0, 0), (-1, -1), 8)]) tbl.setStyle(tablestyle) return [VSpace(), tbl, VSpace()]
def gen_footer_col1_last_page(self): w = self.usable_width / 2 h = self.usable_height if self.cbte.cae: # Chequeo de existencia de archivo filename = os.path.join(settings.MEDIA_ROOT, self.cbte.codigo_barras.name) if not os.path.isfile(filename): genera_codigo_barra(self.cbte) return [ VSpace(), RestrictParagraph( self.f(""" <b>CAE Nº:</b> {cae}<br/> <b>Vto. CAE:</b> {fecha_vto_cae}<br/> """), w, h, styles["header_normal"]), VSpace(), CenterRestrictImage(self.cbte.codigo_barras.path, w, 30, 8), RestrictParagraph(self.cbte.codigo_barras_nro, w, h, styles['header_small_center']), VSpace(), ] else: return [ VSpace(), RestrictParagraph("""No válido como factura""", w, h, styles["header_big"]), VSpace(), ]
def gen_footer_observaciones(self): w = self.usable_width h = self.usable_height if self.cbte.observaciones: return [ VSpace(), RestrictParagraph( "<b>Observaciones: </b> " + self.cbte.observaciones, w, h, styles['header_small']), VSpace() ] else: return []
def gen_header_row3(self): w = self.usable_width h = self.usable_height if self.cbte_data["tipo_cbte"]["letra"] == "E": data = """ <b>Divisa:</b> {moneda[nombre]} <b>Destino:</b> {pais_destino[nombre]} """ if self.cbte_data.get("forma_pago", False): data = data + "<b>Forma de pago:</b>: {forma_pago}" if self.cbte_data.get("incoterms", False): data = data + "<b>Incoterms:</b>: {incoterms}" if self.cbte_data.get("cbte_asoc", False): data = data + "<b>Asociado a</b>: {cbte_asoc[tipo_cbte][nombre]} {cbte_asoc[tipo_cbte][letra]} {cbte_asoc[pp_numero]}" if self.cbte_data.get("fecha_pago", False): data = data + "<b>Fecha Pago</b>: {fecha_pago}" return [ VSpace(), RestrictParagraph( self.f(data).replace(" ", " "), w, h, styles["header_small"]), VSpace(), ] if self.cbte_data["cliente"]['nro_doc'] == '0': data = "" else: data = "<b>{cliente[tipo_doc]}: </b> {cliente[nro_doc_formatted]} " data += """ <b>IVA: </b> {cliente[condicion_iva]} <b>Remito: </b> {remito_nro} <b>Vto. Pago: </b> {fecha_venc_pago} <b>Cond. Venta: </b> {condicion_venta}""" return [ VSpace(), RestrictParagraph( self.f(data).replace(" ", " "), w, h, styles["header_small"]), VSpace(), ]
def gen_header2(self, copy_number): nro_prefix = "Nº " w = self.header_col_width h = self.usable_height if self.cbte.cae: if copy_number == 1: invoice_copy_number_desc = "Original" if copy_number == 2: invoice_copy_number_desc = "Duplicado" elif copy_number == 3: invoice_copy_number_desc = "Triplicado" ret = [ VSpace(), RestrictParagraph( self.f("{tipo_cbte[nombre]}") if self.cbte.cae else "No válido como factura", w, h, styles["header_big"]), VSpace(), RestrictParagraph( invoice_copy_number_desc if self.cbte.cae else "", w, h, styles["header_big"]), VSpace(), RestrictParagraph( self.f(nro_prefix + "{pp_numero}").format( nro_prefix, self.cbte_data), w, h, styles["header_medium"]), VSpace(), RestrictParagraph( self.f("<b>Orden de Compra:</b> {}<br/>").format( self.cbte.orden_compra.nro) if self.cbte.orden_compra else "" + self. f(""" <b>Fecha de emision:</b> {fecha_emision}<br/> <b>CUIT:</b> {empresa[nro_doc_formatted]}<br/>""" + self.gen_header_iibb() + """<b>Fecha de inicio actividad:</b> {empresa[fecha_serv_desde]} """), w, h, styles["header_normal"]), VSpace(), ] return ret
def gen_header_row2(self): w = self.usable_width h = self.usable_height if self.cbte_data["tipo_cbte"]["letra"] == "E": return [ VSpace(), RestrictParagraph( self.f(""" <b>Sres:</b> {cliente[nombre]} <b>Domicilio:</b> {cliente[domicilio]} <b>Localidad:</b> {cliente[localidad]} <b>Cuit Pais:</b> {pais_destino[cuit]}""").replace(" ", " "), w, h, styles["header_small"]), VSpace(), ] if self.cbte_data["cliente"]['nro_doc'] == '0': return [ VSpace(), RestrictParagraph("<b>Consumidor Final</b>", w, h, styles["header_small"]), VSpace(), ] return [ VSpace(), RestrictParagraph( self.f(""" <b>Sres:</b> {cliente[nombre]} <b>Domicilio:</b> {cliente[domicilio]} <b>Localidad:</b> {cliente[localidad]} <b>Telefono:</b> {cliente[telefono]}""").replace(" ", " "), w, h, styles["header_small"]), VSpace(), ]
def gen_footer_legend(self): w = self.usable_width h = self.usable_height s = self def get_data(): return "Página {} de {}".format(s.page_number, len(s.paged_detail_items)) return [ RestrictParagraph( "Esta factura electrónica fue confeccionada con el sistema de Facturación Electrónica Pirra. " "La información contenida en éste documento es privilegiada y confidencial, para uso exclusivo " "de los destinatarios de la misma y/o de quienes hayan sido autorizados específicamente para leerla.", w, h, styles['legend_xs']), VSpace(), PageCounterParagraph("Página 1 de 1", get_data, w, h, styles['legend_xs']) ]
def gen_header1(self): w = self.header_col_width h = self.usable_height items = [] if self.cbte.empresa.logo: items = items + [ VSpace(), CenterRestrictImage(self.cbte.empresa.logo.path, w, 50), VSpace(), RestrictParagraph(self.f("{empresa[nombre]}"), w, h, styles["header_company_name"]), ] else: items = items + [ VSpace(), RestrictParagraph(self.f("{empresa[nombre]}"), w, h, styles["header_company_name_large"]), VSpace(18), ] items = items + [ # if LOGO else styles[ "header_company_name_large"]) VSpace(), RestrictParagraph( self.f(""" <b>Domicilio:</b> {empresa[domicilio]}<br/> <b>Localidad:</b> {empresa[localidad]}<br/> <b>Email:</b> {empresa[email]}<br/> <b>Condicion frente al IVA:</b> {empresa[condicion_iva]} """), w, h, styles["header_normal"]), VSpace(), ] return items
def gen_footer_col2_last_page(self): w = self.usable_width / 2 h = self.usable_height data = [] descuento = float(self.cbte_data.get( "descuento", 0)) if self.cbte_data.get("descuento", 0) else 0 if self.cbte.muestra_subtotales( ) or descuento > 0 or self.cbte.muestra_tributos(): data.append( ["Subtotal", self._format_moneda(self.cbte_data["subtotal"])]) if descuento > 0: desc_title = "Descuento" desc_title += " {:.2f} %".format(float( self.cbte_data["descuento"])) data.append([ desc_title, self._format_moneda(self.cbte_data["importe_descuento"]) ]) if self.cbte.muestra_subtotales(): data.append([ "Neto Gravado", self._format_moneda(self.cbte_data["importe_neto_gravado"]) ]) if self.cbte_data.get("importe_no_gravado", 0): data.append([ "No Gravado", self._format_moneda(self.cbte_data["importe_no_gravado"]) ]) if self.cbte_data.get("importe_exento", 0): data.append([ "Exento", self._format_moneda(self.cbte_data["importe_exento"]) ]) for alicuota in list(self.cbte.importes_ivas.values()): data.append([ "{} {:.2f}".format(alicuota["nombre"], alicuota["porc"]), self._format_moneda(alicuota["valor"]) ]) if self.cbte.muestra_tributos(): for tributo in self.cbte.tributocomprobante_set.all(): data.append( [tributo.detalle, self._format_moneda(tributo.total)]) data.append([ "Importe Total", self._format_moneda(float(self.cbte_data["importe_total"])) ]) tbl = RestrictTable(data, w, h, None, [w - 70, 70]) tablestyle = TableStyle([('ALIGN', (-1, 0), (-1, -1), 'RIGHT'), ('BOTTOMPADDING', (0, 0), (-1, -1), 2), ('TOPPADDING', (0, -1), (-1, -1), 8), ('TEXTCOLOR', (0, 0), (-1, -1), (.3, .3, .3)), ('FONTNAME', (0, -1), (-1, -1), _baseFontNameB), ('FONTSIZE', (0, 0), (-1, -1), 8)]) tbl.setStyle(tablestyle) return [VSpace(), tbl, VSpace()]