예제 #1
0
 def Documento(self, vals):
     documentos = []
     for dteDoc in vals:
         for docData in dteDoc.get("documentos", []):
             if not docData.get('sii_xml_request'):
                 docu = Doc(
                             docData,
                             resumen=True
                         )
                 docu.TipoDTE = dteDoc["TipoDTE"]
                 if self.TipoOperacion == 'COMPRA' and \
                 (not docData['Encabezado'].get('Emisor') or \
                  docu._receptor.RUTRecep == self.Emisor.RUTEmisor):
                     new_recep = {
                         'RUTRecep': self.Emisor.RUTEmisor,
                         'RznSocRecep': self.Emisor.RznSoc,
                         'CdgSIISucur': self.Emisor.CdgSIISucur,
                     }
                     new_emis = {
                         'RUTEmisor': docu._receptor.RUTRecep,
                         'RznSoc': docu._receptor.RznSocRecep,
                         'CdgSIISucur': docu._receptor.CdgSIISucur,
                     }
                     docu._dte_emisor = Emisor(new_emis)
                     docu._receptor = Recep(new_recep)
                 documentos.append(docu)
     self._documentos = documentos
예제 #2
0
 def Documento(self, vals):
     documentos = []
     for dteDoc in vals:
         for docData in dteDoc.get("documentos", []):
             if not docData.get('sii_xml_request'):
                 docu = Doc(docData, resumen=True)
                 docu.TipoDTE = dteDoc["TipoDTE"]
                 documentos.append(docu)
     self._documentos = sorted(documentos, key=lambda t: t.Folio)
예제 #3
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 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_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
예제 #6
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
예제 #7
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
예제 #8
0
 def Documento(self, docs):
     _documentos = []
     for vals in docs:
         if vals.get('TipoDTE'):
             TipoDTE = vals['TipoDTE']
         if TipoDTE in [39, 41]:
             self.es_boleta = True
             self.test = True
         caf_file = vals.get('caf_file', [])
         for docData in vals["documentos"]:
             docu = Doc(docData, resumen=False)
             docu._dte_emsior = self.Emisor
             docu._firma = self.firma
             docu.verify = self.verify
             docu.test = self.test
             if caf_file:
                 docu.caf_file = caf_file
             docu.TipoDTE = TipoDTE
             _documentos.append(docu)
     self._documentos = sorted(_documentos, key=lambda t: t.NroDTE)
예제 #9
0
 def Documento(self, docs):
     _documentos = []
     for vals in docs:
         TipoDTE = vals.get('TipoDTE', False)
         if TipoDTE in [39, 41]:
             self.es_boleta = True
         elif not TipoDTE:
             raise UserError('No especifica tipo de documento')
         caf_file = vals.get('caf_file', [])
         for docData in vals["documentos"]:
             docu = Doc(docData, resumen=False)
             docu._dte_emsior = self.Emisor
             docu._firma = self.firma
             docu.verify = self.verify
             docu.test = self.test
             if caf_file:
                 docu.caf_file = caf_file
             docu.TipoDTE = TipoDTE
             _documentos.append(docu)
     self._documentos = sorted(_documentos, key=lambda t: t.NroDTE)
예제 #10
0
def _libro_csv(libro, csv=None):
    '''
    0 = Tipo Doc;                           11 = Cod IVA no Rec;                22 = Tabacos - Cigarrillos;
    1 = Folio;                              12 = Monto IVA no Rec;              23 = Tabacos - Elaborados;
    2 = Rut Contraparte;                    13 = IVA Uso Común;                 24 = Impuesto a Vehiculos Automóviles;
    3 = Tasa Impuesto;                      14 = Cod Otro Imp (Con Crédito);    25 = Codigo sucursal SII;
    4 = Razón Social Contraparte;           15 = Tasa Otro Imp (Con Crédito);   26 = Numero Interno;Emisor/Receptor;
    5 = Tipo Impuesto[1=IVA:2=LEY 18211];   16 = Monto Otro Imp (Con Crédito);  27 = Emisor Receptor;
    6 = Fecha Emisión;                      17 = Monto Otro Imp Sin Crédito;    28 = Monto Total;
    7 = Anulado[A];                         18 = Monto Activo Fijo;
    8 = Monto Exento;                       19 = Monto IVA Activo Fijo;
    9 = Monto Neto;                         20 = IVA No Retenido;
    10 = Monto IVA (Recuperable);           21 = Tabacos - Puros;
    '''
    i = 0
    for row in csv:
        if not row:
            continue
        if i > 0:
            if int(row[0]) not in [39, 41, 35]:
                docu = Documento(
                    {
                        'Folio': int(row[1]),
                        'Encabezado': {
                            'Receptor': {
                                'RUTRecep': row[2],
                                'RznSocRecep': row[4]
                            }
                        },
                        'TasaImp': int(row[3]),
                        'TpoImp': int(row[5]),
                        'Fecha': row[6],
                        'Anulado': row[7],
                        'MntExento': int(row[8]) if row[8] else False,
                        'MntNeto': int(row[9]) if row[9] else False,
                        'MntIVA': int(row[10]) if row[10] else False,
                        'CodIVANoRec': int(row[11]) if row[11] else False,
                        'IVANoRec': int(row[12]) if row[12] else False,
                        'IVAUsoComun': int(row[13]) if row[13] else False,
                        'CodOtroImp': int(row[14]) if row[14] else False,
                        'TasaOtroImp': int(row[15]) if row[15] else False,
                        'MontoOtroImp': int(row[16]) if row[16] else False,
                        'MntTotal': int(row[17]) if row[17] else False,
                        'MontoOtroImpNoRec':
                        int(row[18]) if row[18] else False,
                        'MontoActivoFijo': int(row[19]) if row[19] else False,
                        'MontoIVAActivoFijo':
                        int(row[20]) if row[20] else False,
                        'IVANoRetenido': int(row[21]) if row[21] else False,
                        'TabacosPuros': int(row[22]) if row[22] else False,
                        'TabacosCigarrillos':
                        int(row[23]) if row[23] else False,
                        'TabacosElaborados':
                        int(row[24]) if row[24] else False,
                        'Vehiculos': int(row[25]) if row[25] else False,
                        'CodSucur': int(row[26]) if row[26] else False,
                        'NumeroInterno': int(row[27]) if row[27] else False,
                        'EmisorReceptor': int(row[28]) if row[28] else False,
                    },
                    int(row[0]),
                    resumen=True)
            else:
                docu = Boletas(
                    {
                        'Folio': int(row[1]),
                        'TasaImp': int(row[3]),
                        'MntExento': int(row[8]) if row[8] else False,
                        'MntNeto': int(row[9]) if row[9] else False,
                        'MntIVA': int(row[10]) if row[10] else False,
                        'MntTotal': int(row[17]) if row[17] else False,
                    }, int(row[0]))
            libro.set_docu(docu)
        else:
            cabezera = row
        i += 1
    return libro
예제 #11
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