示例#1
0
    def caratula_aec(self):
        dte_cedido = self.Cesion.dte_cedido()
        doc_cedido = self.Cesion.xml_doc_cedido()
        xml = '''<DocumentoAEC ID="{0}">
    <Caratula version="1.0">
    <RutCedente>{1}</RutCedente>
    <RutCesionario>{2}</RutCesionario>
    <NmbContacto>{3}</NmbContacto>
    <FonoContacto>{4}</FonoContacto>
    <MailContacto>{5}</MailContacto>
    <TmstFirmaEnvio>{6}</TmstFirmaEnvio>
</Caratula>
    <Cesiones>
        {7}
    </Cesiones>
</DocumentoAEC>
'''.format(
            self.Cesion.ID,
            self.Emisor.RUTEmisor,
            self.Cesion._cesionario.RUT,
            self.Cesion._cedente.Nombre,
            self.Cesion._cedente.Phono,
            self.Cesion._cedente.eMail,
            util.time_stamp(),
            (dte_cedido + '\n' + doc_cedido),
        )
        return xml
示例#2
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
示例#3
0
 def _caratula_recep(self):
     caratula = collections.OrderedDict()
     caratula['RutResponde'] = self.RutResponde
     caratula['RutRecibe'] = self.RutRecibe
     caratula['NmbContacto'] = self.NmbContacto
     caratula['FonoContacto'] = self.FonoContacto
     caratula['MailContacto'] = self.MailContacto
     caratula['TmstFirmaEnv'] = util.time_stamp()
     return caratula
示例#4
0
 def _caratula_respuesta(self):
     caratula = collections.OrderedDict()
     caratula['RutResponde'] = self.RutResponde
     caratula['RutRecibe'] = self.RutRecibe
     caratula['IdRespuesta'] = self.IdRespuesta
     caratula['NroDetalles'] = self.NroDetalles
     caratula['NmbContacto'] = self.NmbContacto
     caratula['FonoContacto'] = self.FonoContacto
     caratula['MailContacto'] = self.MailContacto
     caratula['TmstFirmaResp'] = util.time_stamp()
     return caratula
    def doc_cedido(self, id):
        xml = '''<DocumentoDTECedido ID="{0}">
{1}
<TmstFirma>{2}</TmstFirma>
</DocumentoDTECedido>
    '''.format(
            id,
            self.xml_dte,
            util.time_stamp(),
        )
        return xml
示例#6
0
 def recibo(self, r):
     receipt = collections.OrderedDict()
     receipt['TipoDoc'] = r.TipoDTE
     receipt['Folio'] = r.Folio
     receipt['FchEmis'] = r.FechaEmis
     receipt['RUTEmisor'] = r._dte_emisor.RUTEmisor
     receipt['RUTRecep'] = r._receptor.RUTRecep
     receipt['MntTotal'] = r.MntTotal
     receipt['Recinto'] = self.Recinto
     receipt['RutFirma'] = self.firma.rut_firmante
     receipt['Declaracion'] = r.Declaracion
     receipt['TmstFirmaRecibo'] = util.time_stamp()
     etree_receipt = util.create_xml({"item": receipt})
     return util.xml_to_string(etree_receipt)
示例#7
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
示例#8
0
    def caratula_dte(self, EnvioDTE, SubTotDTE):
        xml = '''<SetDTE ID="SetDoc">
<Caratula version="1.0">
<RutEmisor>{0}</RutEmisor>
<RutEnvia>{1}</RutEnvia>
<RutReceptor>{2}</RutReceptor>
<FchResol>{3}</FchResol>
<NroResol>{4}</NroResol>
<TmstFirmaEnv>{5}</TmstFirmaEnv>
{6}</Caratula>{7}
</SetDTE>
'''.format(self.Emisor.RUTEmisor,
           self.firma_electronica.rut_firmante\
            if self.firma_electronica else '66666666-6',
           self.RutReceptor,
           self.Emisor.FchResol,
           self.Emisor.NroResol,
           util.time_stamp(),
           SubTotDTE,
           EnvioDTE)
        return xml
 def xml_doc_cedido(self):
     data = collections.OrderedDict()
     data['SeqCesion'] = self.SeqCesion
     data['IdDTE'] = self.IdDTE
     data['Cedente'] = self.Cedente
     data['Cesionario'] = self.Cesionario
     data['MontoCesion'] = self.MontoCesion
     data['UltimoVencimiento'] = self.UltimoVencimiento
     data['TmstCesion'] = util.time_stamp()
     xml = self._dte_to_xml({'item': data})
     xml_pret = etree.tostring(xml,
                               pretty_print=True,
                               encoding="ISO-8859-1",
                               xml_declaration=False).decode('ISO-8859-1')
     doc_cesion_xml = self._crear_info_trans_elec_aec(xml_pret)
     cesion_xml = self._crear_info_cesion(doc_cesion_xml)
     cesion = self.firmar(
         cesion_xml,
         "CesDoc_%s" % str(self.SeqCesion),
         'cesion',
     )
     return cesion.replace('<?xml version="1.0" encoding="ISO-8859-1"?>\n',
                           '')
示例#10
0
    def caratula_consumo_folios(self, cf, IdEnvio='SetDoc'):
        if cf.Correlativo != 0:
            Correlativo = "<Correlativo>"\
                + str(cf.Correlativo) + "</Correlativo>"
        else:
            Correlativo = ''
        xml = '''<DocumentoConsumoFolios ID="{10}">
<Caratula  version="1.0" >
<RutEmisor>{0}</RutEmisor>
<RutEnvia>{1}</RutEnvia>
<FchResol>{2}</FchResol>
<NroResol>{3}</NroResol>
    <FchInicio>{4}</FchInicio>
<FchFinal>{5}</FchFinal>{6}
<SecEnvio>{7}</SecEnvio>
<TmstFirmaEnv>{8}</TmstFirmaEnv>
</Caratula>
{9}
</DocumentoConsumoFolios>
'''.format(self.Emisor.RUTEmisor, self.firma_electronica.rut_firmante,
           self.Emisor.FchResol, self.Emisor.NroResol,
           cf.FchInicio, cf.FchFinal, Correlativo, str(cf.SecEnvio),
           util.time_stamp(), cf.sii_xml_request, IdEnvio)
        return xml
示例#11
0
 def validar(self):
     resumenes = []
     resumenesPeriodo = {}
     resumenPeriodo = {}
     for rec in self.Documento:
         rec.sended = True
         TpoDoc = rec.TipoDTE
         if TpoDoc not in resumenesPeriodo and self.TipoOperacion != 'GUIA':
             resumenesPeriodo[TpoDoc] = {}
         if self.TipoOperacion == 'BOLETA':
             resumen = self.getResumenBoleta(rec)
             resumenesPeriodo[TpoDoc] = self._setResumenPeriodoBoleta(
                                 resumen, resumenesPeriodo[TpoDoc])
             del(resumen['MntNeto'])
             del(resumen['MntIVA'])
             del(resumen['TasaIVA'])
         elif self.TipoOperacion == 'GUIA':
             resumen = self.getResumenGuia(rec)
             resumenes.extend([{'Detalle': resumen}])
             resumenPeriodo = self._setResumenPeriodoGuias(
                                 resumen, resumenPeriodo)
         else:
             resumen = self.getResumen(rec)
             resumenes.extend([{'Detalle': resumen}])
         if self.TipoOperacion not in ['BOLETA', 'GUIA']:
             resumenesPeriodo[TpoDoc] = self._setResumenPeriodo(
                                 resumen, resumenesPeriodo[TpoDoc])
     if self.boletas:  # no es el libro de boletas especial
         for boletas in self.boletas:
             resumenesPeriodo[boletas.TipoDTE] = {}
             resumen = self._setResumenBoletas(boletas)
             del(resumen['TotDoc'])
             resumenesPeriodo[boletas.TipoDTE] = self._setResumenPeriodo(
                                 resumen, resumenesPeriodo[boletas.TipoDTE])
             # resumenes.extend([{'Detalle':resumen}])
     lista = ['TpoDoc', 'TpoImp', 'TotDoc', 'TotAnulado', 'TotMntExe',
              'TotMntNeto', 'TotalesServicio', 'TotOpIVARec',
              'TotMntIVA', 'TotMntIVA', 'TotOpActivoFijo',
              'TotMntActivoFijo', 'TotMntIVAActivoFijo', 'TotIVANoRec',
              'TotOpIVAUsoComun', 'TotIVAUsoComun', 'FctProp',
              'TotCredIVAUsoComun', 'itemOtrosImp', 'TotImpSinCredito',
              'TotIVARetTotal', 'TotIVARetParcial', 'TotMntTotal',
              'TotIVANoRetenido', 'TotTabPuros', 'TotTabCigarrillos',
              'TotTabElaborado', 'TotImpVehiculo', 'TotFolAnulado',
              'TotGuiaAnulada', 'TotGuiaVenta', 'TotMntGuiaVta',
              'TotMntModificado', 'itemTraslado']
     ResumenPeriodo = []
     dte = collections.OrderedDict()
     for r, value in resumenesPeriodo.items():
         total = collections.OrderedDict()
         for v in lista:
             if v in value:
                 total[v] = value[v]
         ResumenPeriodo.extend([{'TotalesPeriodo': total}])
         #dte['ResumenPeriodo'] = ResumenPeriodo
         #dte_etree = util.create_xml({'item': dte})
         #util.create_xml(resumenes, dte_etree)
     if self.TipoOperacion == 'GUIA':
         ResumenPeriodo = collections.OrderedDict()
         for f in lista:
             if f in resumenPeriodo:
                 ResumenPeriodo[f] = resumenPeriodo[f]
     dte['ResumenPeriodo'] = ResumenPeriodo
     dte['item'] = resumenes
     dte['TmstFirma'] = util.time_stamp()
     dte_etree = util.create_xml({'item': dte})
     self.sii_xml_request = util.xml_to_string(dte_etree)
     return True
示例#12
0
 def timestamp_timbre(self):
     if not hasattr(self, '_timestamp_timbre') or not self._timestamp_timbre:
         self._timestamp_timbre = util.time_stamp()
     return self._timestamp_timbre