def _emisor(self): Emisor = collections.OrderedDict() if not self.Emisor.RUTEmisor: raise UserError("Debe ingresar el rut del emisor") Emisor['RUTEmisor'] = self.Emisor.RUTEmisor if not self.es_boleta() and not self.Emisor.GiroEmis: raise UserError("Debe ingresar la glosa descriptiva del giro del emisor") if self.es_boleta(): Emisor['RznSocEmisor'] = self.Emisor.RznSoc if self.Emisor.GiroEmis: Emisor['GiroEmisor'] = util._acortar_str(self.Emisor.GiroEmisor, 80) else: Emisor['RznSoc'] = self.Emisor.RznSoc Emisor['GiroEmis'] = util._acortar_str(self.Emisor.GiroEmis, 80) if self.Emisor.Telefono: Emisor['Telefono'] = self.Emisor.Telefono Emisor['CorreoEmisor'] = self.Emisor.CorreoEmisor Emisor['item'] = self._giros_emisor() if self.Emisor.CdgSIISucur: Emisor['Sucursal'] = self.Emisor.Sucursal Emisor['CdgSIISucur'] = self.Emisor.CdgSIISucur Emisor['DirOrigen'] = util._acortar_str(self.Emisor.DirOrigen, 70) Emisor['CmnaOrigen'] = self.Emisor.CmnaOrigen Emisor['CiudadOrigen'] = self.Emisor.CiudadOrigen return Emisor
def set_barcode(self, xml): ted = False folio = self.Folio timbre = """<TED><DD><RE>99999999-9</RE><TD>11</TD><F>1</F>\ <FE>2000-01-01</FE><RR>99999999-9</RR><RSR>\ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</RSR><MNT>10000</MNT><IT1>IIIIIII\ </IT1></DD></TED>""" parser = etree.XMLParser(remove_blank_text=True) result = etree.fromstring(timbre, parser=parser) xml.append(result) result.find('DD/RE').text = self.Emisor.RUTEmisor result.find('DD/TD').text = str(self.TipoDTE) result.find('DD/F').text = str(folio) if not self.FechaEmis: raise UserError("Problema con la fecha %s" % self.FechaEmis) result.find('DD/FE').text = self.FechaEmis if not self._receptor.RUTRecep: raise UserError("Completar RUT del Receptor") result.find('DD/RR').text = self._receptor.RUTRecep result.find('DD/RSR').text = util._acortar_str( self._receptor.RznSocRecep, 40) result.find('DD/MNT').text = str(self.MntTotal) if self.no_product: result.find('DD/MNT').text = '0' for line in self._lineas_detalle: if line.NroLinDet == 1: result.find('DD/IT1').text = util._acortar_str( line.NmbItem, 40) break resultcaf = self.caf_files.get_caf_file(folio, self.TipoDTE) result.find('DD').append(resultcaf.find('CAF')) timestamp = util.time_stamp() etree.SubElement(result.find('DD'), 'TSTED').text = timestamp keypriv = resultcaf.find('RSASK').text.replace('\t', '') ddxml = etree.tostring(result.find('DD'), encoding="ISO-8859-1", xml_declaration=False).replace(b'\n', b'') firma_caf = Firma({ 'priv_key': keypriv, 'init_signature': False, 'rut_firmante': '60803000-K', }) frmt = firma_caf.generar_firma(ddxml) result.set("version", "1.0") ted_xml = etree.SubElement(result, 'FRMT') ted_xml.set("algoritmo", "SHA1withRSA") ted_xml.text = frmt ted = etree.tostring(result, encoding="ISO-8859-1", xml_declaration=False).replace(b'\n', b'') self.sii_barcode = ted image = False if ted: barcodefile = BytesIO() image = self.pdf417bc(ted) image.save(barcodefile, 'PNG') data = barcodefile.getvalue() self.sii_barcode_img = base64.b64encode(data) ted_xml = etree.SubElement(xml, 'TmstFirma') ted_xml.text = timestamp
def NmbItem(self): if not hasattr(self, '_name'): dsc = self.DscItem if not dsc: return '' else: dsc = self._name return util._acortar_str(dsc, 80)
def _receipt(self): envio = self.xml_envio resp = collections.OrderedDict() resp['NmbEnvio'] = self.xml_nombre resp['FchRecep'] = util.time_stamp() resp['CodEnvio'] = util._acortar_str(self.CodEnvio, 10) resp['EnvioDTEID'] = envio.find('SetDTE').attrib['ID'] resp['Digest'] = envio.find( "Signature/SignedInfo/Reference/DigestValue").text self._validar_caratula(envio.find('SetDTE/Caratula')) if self.EstadoRecepEnv == 0: self._check_digest_caratula() resp['RutEmisor'] = envio.find('SetDTE/Caratula/RutEmisor').text resp['RutReceptor'] = envio.find('SetDTE/Caratula/RutReceptor').text resp['EstadoRecepEnv'] = str(self.EstadoRecepEnv) resp['RecepEnvGlosa'] = self.RecepEnvGlosa NroDTE = len(envio.findall('SetDTE/DTE')) resp['NroDTE'] = NroDTE resp['item'] = self._validar_dtes() return resp
def RznSocRecep(self, val): self._rzn_soc_recep = util._acortar_str(val, 100)
def GiroRecep(self, val): self._giro_recep = util._acortar_str(val, 40)
def CiudadRecep(self, val): self._ciudad_recep = util._acortar_str(val, 20)
def Telefono(self, val): self._telefono = util._acortar_str(val, 20)
def Sucursal(self, val): self._sucur = util._acortar_str(val, 20)
def CiudadRecep(self): if not hasattr(self, '_ciudad_recep') or not self._ciudad_recep: return '' return util._acortar_str(self._ciudad_recep, 20)