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 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)
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
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
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
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
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())
def firmar(self, string, uri=False, type="doc"): firma = Firma(self.parametros_firma()) return firma.firmar(string=string, uri=uri, type=type)
def firma_electronica(self, vals): if vals: self._firma_electronica = Firma(vals) else: print("firma no soportada") self._firma_electronica = False
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"])
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