Пример #1
0
    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
Пример #2
0
 def firmar(self, string, uri=False, type="doc"):
     firma = Firma({
         'priv_key': self.priv_key,
         'cert': self.cert,
         'rut_firmante': self.subject_serial_number,
         'init_signature': False
     })
     return firma.firmar(string=string, uri=uri, type=type)
Пример #3
0
 def generar_firma(self, ddxml, privkey=False):
     if not privkey:
         privkey = self.priv_key
     firma = Firma({
         'priv_key': privkey,
         'cert': self.cert,
         'rut_firmante': self.subject_serial_number,
         'init_signature': False
     })
     return firma.generar_firma(texto=ddxml.decode())
def ejemplo_cf_csv():
    data = json.load(open("ejemplos/ejemplo_consumo_folios_csv.json"))
    folios = csv.reader(base64.b64decode(data['consumo_folios']).splitlines(), csv.excel, delimiter=',', quotechar='|')
    i = 0
    listado = ['Fecha', 'Folio', 'RUTRecep', 'MntNeto', 'MntIVA', 'MntExento', 'MntTotal']
    firma = Firma(data["firma_electronica"])
    emisor = Emisor(data["Emisor"])
    fechas = {}
    for row in folios:
        if i >0:
            if row[0] not in fechas:
                fechas[row[0]] = ConsumoFolios(emisor, firma)
            else:
                docu = Documento({
                    'Fecha': row[0],
                    'Folio': int(row[2]),
                    'MntNeto': float(row[3]),
                    'MntIVA': float(row[4]),
                    'MntExento': float(row[5]),
                    'MntTotal': float(row[6]),
                    'Anulado': row[7],
                    }, int(row[1]), resumen=True)
                fechas[row[0]].set_docu(docu)

        else:
            cabezera = row
        i += 1
    for key, cf in fechas.items():
        cf.validar()
        print (cf.sii_xml_request)
def consulta_estado_dte(vals):
    firma = Firma(vals["firma_electronica"])
    emisor = Emisor(vals["Emisor"])
    conex = Conexion(emisor, firma, vals.get('api', False))
    if vals.get('cesion'):
        conex.cesion = vals['cesion']
    return conex._get_send_status(vals["codigo_envio"])
def consulta_reclamo_documento(vals):
    firma = Firma(vals["firma_electronica"])
    emisor = Emisor(vals["Emisor"])
    respuesta = {}
    for d in vals['DTEClaim']:
        key = "RUT%sT%sF%s" %(d['RUTEmisor'], d['TipoDTE'], d['Folio'])
        conexion = Conexion(emisor, firma)
        respuesta[key] = conexion.get_dte_claim(d)
    return respuesta
Пример #7
0
def consulta_reclamo_documento(vals):
    firma = Firma(vals["firma_electronica"])
    emisor = Emisor(vals["Emisor"])
    respuesta = []
    for d in vals['Documento']:
        Documento.Emisor = emisor
        for r in d['documentos']:
            tipoDoc = int(d["TipoDTE"])
            documento = Documento(r, resumen=True)
            documento.TipoDTE = tipoDoc
            conexion = Conexion(emisor, firma)
            respuesta.append(conexion.get_dte_claim(documento))
    return respuesta
def consulta_estado_documento(vals):
    firma = Firma(vals["firma_electronica"])
    emisor = Emisor(vals["Emisor"])
    respuesta = {}
    for d in vals['Documento']:
        for r in d['documentos']:
            tipoDoc = int(d["TipoDTE"])
            documento = Documento(
                r,
                emisor=emisor,
                resumen=True)
            documento.TipoDTE = tipoDoc
            conexion = Conexion(emisor, firma, vals.get('api', documento.es_boleta()))
            conexion.cesion = r.get('cesion', False)
            respuesta[documento.ID] = conexion._get_dte_status(
                documento)
    return respuesta
Пример #9
0
def procesar_documento(vals):
    firma = Firma(vals["firma_electronica"])
    emisor = Emisor(vals["Emisor"])
    verify = vals.get('verify', True)
    test = vals.get('test', False)
    _documentos = []
    for docs in vals.get('Documento'):
        TipoDTE = docs.get('TipoDTE', 33)
        caf_file = docs.get('caf_file', [])
        for docData in docs["documentos"]:
            docu = Documento(docData, resumen=False)
            docu._dte_emisor = emisor
            docu._firma = firma
            docu.verify = verify
            docu.test = test
            docu.caf_file = caf_file
            docu.TipoDTE = TipoDTE
            _documentos.append(docu)
    return _documentos
Пример #10
0
def libro_resumen(dicDocs, csv=False):
    firma = Firma(dicDocs["firma_electronica"])
    emisor = Emisor(dicDocs["Emisor"])
    libro = Libro(emisor, firma)
    libro.set_periodo_tributario(dicDocs["periodo_tributario"])
    libro.set_tipo_operacion(dicDocs["tipo_operacion"])
    libro.set_tipo_libro(dicDocs["tipo_libro"])
    test = dicDocs['test'] if 'test' in dicDocs else False
    envio = Envio(emisor, firma, test=test)
    respuesta = []
    if csv:
        libro = _libro_csv(libro, csv)
    else:
        for dteDoc in dicDocs["Documentos"]:
            for docData in dteDoc["documentos"]:
                docu = Documento(docData, dteDoc["TipoDTE"])
                libro.set_docu(docu)
    libro.validar()
    envio.setLibro(libro)
    respuesta = envio.do_libro_send()
    return respuesta
Пример #11
0
 def generar_firma(self, ddxml, privkey=False):
     params = self.parametros_firma()
     if privkey:
         params["priv_key"] = privkey
     firma = Firma(params)
     return firma.generar_firma(texto=ddxml.decode())
Пример #12
0
 def firmar(self, string, uri=False, type="doc"):
     firma = Firma(self.parametros_firma())
     return firma.firmar(string=string, uri=uri, type=type)
Пример #13
0
 def firma_electronica(self, vals):
     if vals:
         self._firma_electronica = Firma(vals)
     else:
         print("firma no soportada")
         self._firma_electronica = False
Пример #14
0
def consulta_estado_dte(vals):
    firma = Firma(vals["firma_electronica"])
    emisor = Emisor(vals["Emisor"])
    conex = Conexion(emisor, firma)
    return conex._get_send_status(vals["codigo_envio"])
Пример #15
0
def consumo_folios_resumen(data, folios=False):
    test = data['test'] if 'test' in data else False
    emisor = Emisor(data["Emisor"])
    firma = Firma(data["firma_electronica"])
    fechas = {}
    if folios:
        i = 0
        for row in folios:
            if i > 0:
                if row[0] not in fechas:
                    fechas[row[0]] = ConsumoFolios(emisor, firma)
                if 'Correlativo' in data:
                    fechas[row[0]].set_correlativo(data['Correlativo'])
                if 'SecEnvio' in data:
                    fechas[row[0]].set_sec_envio(data['SecEnvio'])
                docu = Documento(
                    {
                        'TasaImp': data["Emisor"]['ValorIva'],
                        'Fecha': row[0],
                        'Folio': int(row[2]),
                        'MntNeto': int(row[3]),
                        'MntIVA': int(row[4]),
                        'MntExento': int(row[5]),
                        'MntTotal': int(row[6]),
                        'Anulado': row[7],
                    },
                    int(row[1]),
                    resumen=True)
                fechas[row[0]].set_docu(docu)
            else:
                cabezera = row
            i += 1
    elif 'Documentos' in data:
        for r in data['Documentos']:
            for d in r['documentos']:
                fecha = d['Encabezado']['IdDoc']['Fecha']
                if fecha not in fechas:
                    fechas[fecha] = ConsumoFolios(emisor, firma)
                if 'Correlativo' in data:
                    fechas[fecha].set_correlativo(data['Correlativo'])
                if 'SecEnvio' in data:
                    fechas[fecha].set_sec_envio(data['SecEnvio'])
                docu = Documento(d, r['TipoDTE'])
                fechas[fecha].set_docu(docu)
    else:
        cf = ConsumoFolios(emisor, firma)
        cf.FchInicio = data['FechaInicio']
        cf.FchFinal = data['FechaFinal']
        if 'Correlativo' in data:
            cf.set_correlativo(data['Correlativo'])
        if 'SecEnvio' in data:
            cf.set_sec_envio(data['SecEnvio'])
        envio = Envio(emisor, firma, test=test)
        envio.setLibro(cf)
        res = envio.do_consumo_folios_send()
        res.update({
            'correlativo': cf.Correlativo,
            'fecha_inicio': cf.FchInicio,
            'fecha_final': cf.FchFinal,
            'total_neto': cf.total_neto,
            'total_exento': cf.total_exento,
            'total_iva': cf.total_iva,
            'total': cf.total,
            'total_boletas': cf.total_boletas,
        })
        return [res]
    cfs = []
    respuestas = []
    envio = Envio(emisor, firma, test=test)
    for key, cf in fechas.items():
        cf.validar()
        cfs.append(cf.sii_xml_request)
        envio.setLibro(cf)
        res = envio.do_consumo_folios_send()
        res.update({
            'correlativo': cf.Correlativo,
            'fecha_inicio': cf.FchInicio,
            'fecha_final': cf.FchFinal,
            'total_neto': cf.total_neto,
            'total_exento': cf.total_exento,
            'total_iva': cf.total_iva,
            'total': cf.total,
            'total_boletas': cf.total_boletas,
            'rangos': cf.get_rangos(),
        })
        respuestas.append(res)
    return respuestas