Beispiel #1
0
 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)
Beispiel #4
0
 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
Beispiel #5
0
 def RznSocRecep(self, val):
     self._rzn_soc_recep = util._acortar_str(val, 100)
Beispiel #6
0
 def GiroRecep(self, val):
     self._giro_recep = util._acortar_str(val, 40)
Beispiel #7
0
 def CiudadRecep(self, val):
     self._ciudad_recep = util._acortar_str(val, 20)
Beispiel #8
0
 def Telefono(self, val):
     self._telefono = util._acortar_str(val, 20)
Beispiel #9
0
 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)