示例#1
0
def DiferenciasRemesas(patrimonio, fechaCorteInicio, fechaCorteFin):
    try:
        consultaDiferenciaRemesas, mensaje = RespaldoRev.cuadratura_remesas()
        conexionDB = conexion()
        diferenciasMontos = dict()
        with conexionDB.cursor() as consulta_db:
            for i in range(0, 1):
                consulta_db.execute(consultaDiferenciaRemesas[i],
                                    pat_consulta=patrimonio,
                                    fecha_inicio=fechaCorteInicio,
                                    fecha_fin=fechaCorteFin)
                columns = [col[0] for col in consulta_db.description]
                consulta_db.rowfactory = lambda *args: dict(zip(columns, args))
                data = consulta_db.fetchall()

                for diferencias in range(0, len(data)):
                    fechaCorte = data[diferencias]['MOV_FECHA_MOVIMIENTO']
                    diferencia = data[diferencias]['DIFERENCIA']
                    if type(fechaCorte) is datetime.datetime:
                        fechaCorte = fechaCorte.strftime("%d%m%Y")
                    if not diferenciasMontos.get(fechaCorte):
                        diferenciasMontos[fechaCorte] = {
                            'DIFERENCIA_POR_CUENTAS': diferencia
                        }
                    else:
                        diferenciasMontos[fechaCorte][
                            'DIFERENCIA_POR_CUENTAS'] += diferencia
        diferenciaPorCuentas = [data, columns]
        return diferenciasMontos, diferenciaPorCuentas
    except Exception as e:
        raise Exception('Error en DiferenciasRemesas: %s' % e)
示例#2
0
def MovimientosDuplicados(patrimonio, fechaCorteInicio, fechaCorteFin):
    try:
        consultaAsientosContDuplicados, mensaje = RespaldoRev.cuadratura_remesas(
        )
        conexionDB = conexion()
        movimientosDuplicados = dict()
        with conexionDB.cursor() as consulta_db:
            for i in range(1, 2):
                consulta_db.execute(consultaAsientosContDuplicados[i],
                                    pat_consulta=patrimonio,
                                    fecha_inicio=fechaCorteInicio,
                                    fecha_fin=fechaCorteFin)
                columns = [col[0] for col in consulta_db.description]
                consulta_db.rowfactory = lambda *args: dict(zip(columns, args))
                data = consulta_db.fetchall()

                for duplicados in range(0, len(data)):
                    fechaCorte = data[duplicados]['FECHA_MOVIMIENTO']
                    if type(fechaCorte) is datetime.datetime:
                        fechaCorte = fechaCorte.strftime("%d%m%Y")
                    movimientosDuplicados[fechaCorte] = {
                        'MOV_DUPLICADOS': data[duplicados]['CANTIDAD']
                    }

        return movimientosDuplicados
    except Exception as e:
        raise Exception('Error en MovimientosDuplicados: %s' % e)
示例#3
0
def testClienteDuplicado():
    patrimonio = 4
    fecha_corte = '18012019'
    revisiones = 7
    consultas, mensaje = RespaldoRev.detalle_valdiario('FIP', '')
    registrosXlsx = []
    encabezadoDbXlsx = []
    conexion_db = conexion()
    titulos = (
        'NEGOCIOS CON TIPO DE DOCUMENTO NULL', 'NEGOCIOS DUPLICADOS',
        'CUOTAS DUPLICADAS', 'CUOTAS SIN NEGOCIO', 'NUMERO DE NEGOCIO NULL',
        'MOVIMIENTOS INTERES EXTRAFIN SIN CUOTAS (006)',
        'MOVIMIENTOS SIN CUOTAS (004, 007, 008, 009, 010, 011, 014, 016)',
        'CLIENTES DUPLICADOS PATRIMONIOS TC')
    with conexion_db.cursor() as cursor:
        if revisiones == 7:
            for k in range(0, len(consultas[revisiones])):
                patTC = PATRIMONIOS_TC.get(patrimonio)
                cursor.execute(consultas[revisiones][k],
                               pat_consulta=patrimonio,
                               fecha_consulta=fecha_corte,
                               pat_consultatc=patTC)
                columns = [col[0] for col in cursor.description]
                cursor.rowfactory = lambda *args: dict(zip(columns, args))
                data = cursor.fetchall()
                encabezadoDbXlsx.append(columns)
                if len(data) > 0:
                    registrosXlsx.append(data)
                else:
                    registrosXlsx.append('')
                print(k)
    return registrosXlsx
示例#4
0
async def vpnActiveLinux(ctx):
    try:
        cp = subprocess.run('sudo bash /usr/bin/start_vpn.sh', shell=True)
        await ctx.channel.send('Conectando VPN: %s' % cp.returncode)
        conexionDB = conexion()
        await ctx.send('Conexion con DB: %s OK' % str(conexionDB))
        conexionDB.close
    except Exception as e:
        await ctx.send('Error VPN: %s' % e)
示例#5
0
def DiferenciasAsientosContables(patrimonio, fechaCorte):
    try:
        consultaMontosAsientosCont, mensaje = RespaldoRev.cuadratura_remesas()
        conexionDB = conexion()
        diferenciasTRX = {'DIFERENCIA_TRX': 0}
        data = []
        with conexionDB.cursor() as consulta_db:
            for i in range(2, 4):
                consulta_db.execute(consultaMontosAsientosCont[i],
                                    pat_consulta=patrimonio,
                                    fecha_inicio=fechaCorte)
                columns = [col[0] for col in consulta_db.description]
                consulta_db.rowfactory = lambda *args: dict(zip(columns, args))
                data.append(consulta_db.fetchone())

        for valor in range(0, len(data)):
            if data[valor] is not None:
                diferenciasTRX['DIFERENCIA_TRX'] += int(
                    data[valor]['DIFERENCIA'])
        return diferenciasTRX
    except Exception as e:
        raise Exception('Error en DiferenciasAsientosContables: %s' % e)
示例#6
0
async def revision_proceso_diario(ctx, patrimonio: int, fecha_corte: str):
    registrosRespaldo = []
    nota = False
    await ctx.channel.send(
        ':regional_indicator_i::regional_indicator_n::regional_indicator_i::regional_indicator_c::regional_indicator_i::regional_indicator_o:  -> PATRIMONIO: %s FECHA_CORTE: %s, porfavor espere...'
        % (patrimonio, fecha_corte))
    try:
        conexionDB = conexion()
        entorno = ENTORNO_FIP['DB']
        dblink = ENTORNO_FIP['DBLINK']
        # Se crea el cuadro para dar el resumen de los resultados
        embed = discord.Embed(
            title=
            ':hugging: Carga correcta y sin inconsistencias encontradas :thumbsup:',
            description=
            "Este es el resumen de las validaciones realizadas para el patrimonio: %s y fecha de corte: %s"
            % (patrimonio, fecha_corte),
            timestamp=datetime.datetime.utcnow(),
            color=discord.Color.green())
        # Consultas SQL y texto para seguimiento
        consultaDiario, mensaje = RespaldoRev.consulta_diario(entorno, dblink)
        await ctx.channel.send('Iniciando las consultas DB: %s' %
                               str(conexionDB))
        # Revision para el aptrimonio y fecha de corte
        with conexionDB.cursor() as consulta_db:
            for i in range(0, len(consultaDiario)):
                await ctx.channel.send(':fast_forward: Consultando ' +
                                       ':white_check_mark: ' + mensaje[i])
                consulta_db.execute(consultaDiario[i],
                                    pat_consulta=patrimonio,
                                    fecha_consulta=fecha_corte)
                resultado = consulta_db.fetchone()
                if resultado[0] > 0:
                    registrosRespaldo.append(resultado[0])
                    embed.add_field(name=mensaje[i],
                                    value=resultado[0],
                                    inline=True)

        if len(registrosRespaldo) == 6:
            erroresEncontrados = []
            await ctx.channel.send(
                ':bar_chart: Existen registros para el patrimonio: ' +
                str(patrimonio) + ' fecha de corte: ' + fecha_corte)
            await ctx.channel.send(
                '.:regional_indicator_r::regional_indicator_e::regional_indicator_v::regional_indicator_i::regional_indicator_s::regional_indicator_i::regional_indicator_o::regional_indicator_n:  :regional_indicator_d::regional_indicator_e:  :regional_indicator_l::regional_indicator_a:  :regional_indicator_d::regional_indicator_a::regional_indicator_t::regional_indicator_a:'
            )
            # Consultas SQL y texto para seguimiento
            consultaValidarCarga, mensajeValidacion = RespaldoRev.validaciones_diario(
                entorno, dblink)
            with conexionDB.cursor() as consulta_db:
                for i in range(0, len(consultaValidarCarga)):
                    await ctx.channel.send(
                        ':fast_forward: Consultando :white_check_mark: ' +
                        mensajeValidacion[i])
                    if i == 7:
                        patTC = PATRIMONIOS_TC.get(patrimonio)
                        consulta_db.execute(consultaValidarCarga[i],
                                            pat_consulta=patrimonio,
                                            fecha_consulta=fecha_corte,
                                            pat_consultatc=patTC)
                    else:
                        consulta_db.execute(consultaValidarCarga[i],
                                            pat_consulta=patrimonio,
                                            fecha_consulta=fecha_corte)
                    resultado = consulta_db.fetchone()
                    erroresEncontrados.append(resultado[0])
            await ctx.channel.send(
                '.:regional_indicator_f::regional_indicator_i::regional_indicator_n:  :regional_indicator_d::regional_indicator_e:  :regional_indicator_l::regional_indicator_a:  :regional_indicator_r::regional_indicator_e::regional_indicator_v::regional_indicator_i::regional_indicator_s::regional_indicator_i::regional_indicator_o::regional_indicator_n:'
            )
            # erroresEncontrados = [(1,),(1,),(1,),(1,),(1,)]
            archivoSqlAdjunto = []
            archivo_sql = 0
            archivo_xls = 0
            # Bloque para agregar las inconsistencias a la salida por pantalla
            for i in range(0, len(erroresEncontrados)):
                if erroresEncontrados[i] > 0:
                    embed.add_field(name=':x: %s' % mensajeValidacion[i],
                                    value=str(erroresEncontrados[i]),
                                    inline=False)
                    embed.title = ':thinking: Carga completa pero con inconsistencias encontradas :thumbsdown:'
                    embed.color = discord.Color.red()
                    # Script para corregir inconsistencia
                    if i != 8:
                        if ScriptSQL.crear(i, patrimonio, fecha_corte,
                                           erroresEncontrados[i]):
                            archivo_sql += 1
                            archivoSqlAdjunto.append(i)
                    else:
                        error = 'El Patrimonio: %s fecha de corte: %s tiene una ejeucion en el SATELITE.' % (
                            patrimonio, fecha_corte)
                        recomendaciones = 'Si no reconoce esta ejeucion y desea realizar una nueva favor informar al correo: [email protected] y solicite script para realizar el borrado del proceso existente.'
                        embed.add_field(
                            name=':no_entry_sign: ERROR ENCONTRADO',
                            value=error,
                            inline=False)
                        embed.add_field(name=':loudspeaker: RECOMENDACIONES',
                                        value=recomendaciones,
                                        inline=False)
                        #Parametro para controlar los archivos que se adjuntaran al correo
            # Bloque para enviar correo
            if len(archivoSqlAdjunto) > 0:
                consultaErrorData, mensajeErrorData = RespaldoRev.detalle_valdiario(
                    entorno, dblink)
                data_xls = crear_xls(patrimonio, fecha_corte,
                                     archivoSqlAdjunto, consultaErrorData,
                                     mensajeErrorData)
                if data_xls:
                    archivo_xls += 1
                # Se envia correo con las indicaciones
                repuesta = Correo.enviar(archivoSqlAdjunto, patrimonio,
                                         fecha_corte)
                respuesta_embed = 'Se envio un correo a la direccion: :incoming_envelope: %s con %s archivo .XLSX y %s scripts .SQL con las indicaciones para realizar las correcciones.' % (
                    repuesta, str(archivo_xls), str(archivo_sql))
                embed.add_field(name='NOTA',
                                value=respuesta_embed,
                                inline=False)
        else:
            dblink_reports = ENTORNO_REPORTS['DBLINK']
            await ctx.channel.send(
                ':x: No existen registros para el patrimonio: ' +
                str(patrimonio) + ' fecha de corte: ' + fecha_corte)
            embed.title = ':dizzy_face: Carga de la información para realizar revisón INCOMPLETA :thumbsdown:'
            embed.color = discord.Color.red()
            # Consultas SQL y texto para seguimiento
            consulta_reports, mensaje_reports = RespaldoRev.consulta_neg_remesas(
                'reports', dblink_reports)
            data_reports = []
            # Se valida que la informacion este cargada en el Reports
            await ctx.channel.send('Consultas adicionales...')
            with conexionDB.cursor() as consulta_db:
                for i in range(0, len(consulta_reports)):
                    await ctx.channel.send(
                        ':fast_forward: Consultando en Reports: ' +
                        mensaje_reports[i])
                    consulta_db.execute(consulta_reports[i],
                                        pat_consulta=patrimonio,
                                        fecha_consulta=fecha_corte)
                    data_reports.append(consulta_db.fetchone())
            negocios_remesas = int(data_reports[0][0]) + int(
                data_reports[1][0])
            remesas_reports = int(data_reports[1][0])
            negocios_reports = int(data_reports[0][0])
            if negocios_remesas == 0:
                error, recomendado, nota_msj = Mensaje.fip_wrap2_3(
                    patrimonio, fecha_corte)
            elif remesas_reports == 0:
                error, recomendado, nota_msj = Mensaje.fip_wrap3(
                    negocios_reports, patrimonio, fecha_corte)
            elif negocios_reports == 0:
                error, recomendado, nota_msj = Mensaje.fip_wrap2(
                    patrimonio, fecha_corte)
            else:
                error, recomendado, nota_msj = Mensaje.reports_odi(
                    patrimonio, fecha_corte)
            if len(registrosRespaldo) >= 1:
                nota_msj = "Si ya realizo la ejecucion del proceso ODI, espere a que este finalice y luego vuelva a ejecutar la revisión"
                embed.color = discord.Color.dark_gold()
            embed.add_field(name=':no_entry_sign: ERROR ENCONTRADO',
                            value=error,
                            inline=False)
            embed.add_field(name=':loudspeaker: RECOMENDACIONES',
                            value=recomendado,
                            inline=False)
            embed.add_field(name=':memo: NOTA', value=nota_msj, inline=False)
        await ctx.send(embed=embed)
    except Exception as e:
        embed = discord.Embed(title='Error no manejado :person_facepalming:',
                              description='%s' % e,
                              color=discord.Color.dark_red())
        await ctx.send(embed=embed)
示例#7
0
def crear_xls(patrimonio, fecha_corte, revisiones: [], consultas: (),
              mensaje: ()):

    nombre_archivo = 'INCONSISTENCIAS_PAT-%s_FCORT-%s' % (patrimonio,
                                                          fecha_corte)
    workbook = xlsxwriter.Workbook('%s/csv_data/%s.xlsx' %
                                   (PAT_BOT['PATH'], nombre_archivo))
    conexion_db = conexion()
    titulos = (
        'NEGOCIOS CON TIPO DE DOCUMENTO NULL', 'NEGOCIOS DUPLICADOS',
        'CUOTAS DUPLICADAS', 'CUOTAS SIN NEGOCIO', 'NUMERO DE NEGOCIO NULL',
        'MOVIMIENTOS INTERES EXTRAFIN SIN CUOTAS (006)',
        'MOVIMIENTOS SIN CUOTAS (004, 007, 008, 009, 010, 011, 014, 016)',
        'CLIENTES DUPLICADOS PATRIMONIOS TC')
    TablasClientesDup = [{
        0: ''
    }, {
        1: 'FIP.FIP_CUENTAS'
    }, {
        2: 'FIP.FIP_DIARIO_NEGOCIOS'
    }, {
        3: 'FIP.FIP_EXTRA_IC'
    }, {
        4: 'FIP.FIP_NEGOCIOS'
    }, {
        5: 'FIP.FIP_CUENTA_CREDITO_IC'
    }]
    columnas = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J')

    bold = workbook.add_format({
        'bold': True,
        'font_name': 'Arial',
        'font_size': 13,
        'align': 'center',
        'valign': 'vcenter',
        'locked': True,
        'border': 2,
        'bg_color': '#3CB371'
    })
    bold2 = workbook.add_format({
        'bold': True,
        'font_name': 'Arial',
        'font_size': 10,
        'align': 'center',
        'valign': 'vcenter',
        'locked': True,
        'border': 2,
        'bg_color': '#FFA500'
    })
    bold3 = workbook.add_format({
        'bold': True,
        'font_name': 'Arial',
        'font_size': 10,
        'align': 'left',
        'valign': 'vcenter',
        'locked': True
    })
    format_data = workbook.add_format({
        'font_name': 'Arial',
        'font_size': 9,
        'align': 'center',
        'locked': True,
        'border': 1
    })
    try:
        for i in range(0, len(revisiones)):
            registrosXlsx = []
            encabezadoDbXlsx = []
            # Nombrando cada hoja
            worksheet = workbook.add_worksheet('%s' % mensaje[revisiones[i]])
            # Ingresando el titulo de cada hoja
            worksheet.merge_range('A1:F1', '%s' % titulos[revisiones[i]], bold)
            # Inmovilizar paneles
            worksheet.freeze_panes('A3')
            # Ajustar ancho de columnas
            with conexion_db.cursor() as cursor:
                if revisiones[i] == 7:
                    for k in range(0, len(consultas[revisiones[i]])):
                        patTC = PATRIMONIOS_TC.get(patrimonio)
                        cursor.execute(consultas[revisiones[i]][k],
                                       pat_consulta=patrimonio,
                                       fecha_consulta=fecha_corte,
                                       pat_consultatc=patTC)
                        columns = [col[0] for col in cursor.description]
                        cursor.rowfactory = lambda *args: dict(
                            zip(columns, args))
                        data = cursor.fetchall()
                        encabezadoDbXlsx.append(columns)
                        if len(data) > 0:
                            registrosXlsx.append(data)
                        else:
                            registrosXlsx.append('')
                else:
                    cursor.execute(consultas[revisiones[i]],
                                   pat_consulta=patrimonio,
                                   fecha_consulta=fecha_corte)
                    columns = [col[0] for col in cursor.description]
                    cursor.rowfactory = lambda *args: dict(zip(columns, args))
                    data = cursor.fetchall()
                    encabezadoDbXlsx.append(columns)
                    if len(data) > 0:
                        registrosXlsx.append(data)
                    else:
                        registrosXlsx.append('')
            row = 1
            for consulta in range(0, len(registrosXlsx)):
                col = 0
                if consulta > 0:
                    worksheet.write(row, 0,
                                    TablasClientesDup[consulta].get(consulta),
                                    bold3)
                    row += 1
                for k in encabezadoDbXlsx[consulta]:
                    ajustar = '%s%s:%s%s' % (columnas[col], 2, columnas[col],
                                             2)
                    worksheet.set_column(ajustar, 20)
                    worksheet.write(row, col, k, bold2)
                    col += 1
                row += 1
                for fila in range(0, len(registrosXlsx[consulta])):
                    col = 0
                    for key, valor in registrosXlsx[consulta][fila].items():
                        if type(valor) is datetime.datetime:
                            valor = valor.strftime("%d/%m/%Y")
                        worksheet.write(row, col, valor, format_data)
                        worksheet.write(
                            row + 1,
                            col,
                            '',
                        )
                        col += 1
                    row += 1
                row += 1
        workbook.close()
        return True
    except Exception as e:
        raise Exception("Error al crear archivo .XLS. Error: %s" % (e))