def enviaInstrucoesNovaSenha(self, emailDestination, ID_USUARIO): try: message = MIMEMultipart() message["From"] = self.__user message["To"] = emailDestination message["Subject"] = 'Datamigra - Definição de nova senha' cifrada = Cifra.cifra(ID_USUARIO) link = '' html = ''.join(( "<br>Clique no link abaixo para acessar a área de <b>reset</b> de sua senha:<br><br>", "<a href='" + link + "?view=" + cifrada + "'>" + link + "</a><br><br>")) part = MIMEText(html, "html") message.attach(part) context = ssl.create_default_context() with smtplib.SMTP_SSL(self.__smtpAddress, self.__port, context=context) as server: server.login(self.__user, self.__password) server.send_message(self.__user, emailDestination, message.as_string()) except Exception as ex: qex.throw(ex) finally: server.quit()
def validaLogin(self, EMAIL_USUARIO, SENHA_USUARIO): try: rec = ctx.session.query(ctx.mapUsuario).\ filter(ctx.mapUsuario.EMAIL_USUARIO == EMAIL_USUARIO).first() except: return qex.throw('Usuário não cadastrado') if rec == None: return qex.throw('Usuário não cadastrado') # senhaDecifrada = Cifra.decifra(rec.SENHA_USUARIO) if rec.SENHA_USUARIO != SENHA_USUARIO: return qex.throw('Senha incorreta') if float(rec.TIPO_USUARIO) != 1: return qex.throw('Acesso negado') # keep = Cifra.cifra(super().TrataDataHora()).decode('utf8') keep = '8Kd4KmTesIXTOI8awHuhod1X7ERl3divuinW5b8CSNhcO2kITIwUkJDzZpHgZyXx' return json.dumps({ 'status': 'OK', 'id': rec.ID_USUARIO, 'TIPO': rec.TIPO_USUARIO, 'keep': keep })
def recoverPass(self, EMAIL_USUARIO): rec = ctx.session.query(ctx.mapUsuario).\ filter(ctx.mapUsuario.EMAIL_USUARIO == EMAIL_USUARIO).first() if rec is None: return qex.throw('Usuário não cadastrado') mail = qMail('smtp.doran.com.br', 587, '*****@*****.**', '56Runna01') mail.enviaInstrucoesNovaSenha(EMAIL_USUARIO, rec.ID_USUARIO) del mail
def __gravaTabelaTemporaria(self, msec, _table, finalFile): recs = [] firstLine = True try: with open(finalFile, mode='rb') as file: for lineIn in file: if firstLine: firstLine = False continue row = lineIn.decode('utf-8').replace('"', '').replace( '\r\n', '').split(';') recs.append({ 'ID_TEMP': 0, 'MILISEC': msec, 'TABELA_ORIGEM': _table, 'ANO': row[0] }) if (len(recs) % self.__rowsBulkInsert) == 0: self.__bulkInsert(mapTEMP, recs) recs = [] if len(recs) > 0: self.__bulkInsert(mapTEMP, recs) except ValueError as err: return qex.throw(err) select1 = ctx.session.query(ctx.mapTEMP.ANO).distinct().filter( ctx.mapTEMP.MILISEC == msec and ctx.mapTEMP.TABELA_ORIGEM == _table).all() lista = [] [(lista.append((row.ANO))) for row in select1] return lista
def __gravaSTI(self, finalFile): recs = [] firstLine = True try: with open(finalFile, mode='rb') as file: for lineIn in file: if firstLine: firstLine = False continue row = lineIn.decode('utf-8').replace('"', '').replace( '\r\n', '').split(';') recs.append({ 'ID_STI': 0, 'ANO': row[0], 'MES': row[1], 'UF': row[2], 'PAIS': row[3], 'CONTINENTE': row[4], 'TIPO_MOVIMENTO': row[5], 'TIPOLOGIA_ENTRADA': row[6], 'SEXO': row[7] }) if (len(recs) % self.__rowsBulkInsert) == 0: self.__bulkInsert(mapSTI, recs, 1) recs = [] file.close() if len(recs) > 0: self.__bulkInsert(mapSTI, recs, 1) except ValueError as err: return qex.throw(err)
def __gravaCAGED(self, finalFile): recs = [] firstLine = True try: with open(finalFile, mode='rb') as file: for lineIn in file: if firstLine: firstLine = False continue row = lineIn.decode('utf-8').replace('"', '').replace( '\r\n', '').split(';') recs.append({ 'ID_CAGED': 0, 'ANO': row[0], 'MES': row[1], 'UF': row[2], 'MUNICIPIO': row[3], 'PAIS': row[4], 'CONTINENTE': row[5], 'ADMITIDOS_DESLIGADOS': row[6], 'SEXO': row[7] }) if (len(recs) % self.__rowsBulkInsert) == 0: self.__bulkInsert(mapCAGED, recs, 1) recs = [] if len(recs) > 0: self.__bulkInsert(mapCAGED, recs, 1) except ValueError as err: return qex.throw(err.args[0])
def viewGrid(self, ANO, MES, UF, MUNICIPIO, PAIS, CONTINENTE, SEXO, TIPO_VISTO, TIPOLOGIA_EXTRATOR, TIPO_MOVIMENTO, ADMITIDOS_DESLIGADOS, table, eixoX, series): """ Visualização dos dados em formato datatable jQuery params: ANO = array (2019, 2018) MES = array ('JANEIRO', 'SETEMBRO') Returns: array collection columns from selected table in query """ table = table.lower() where = '' if len(ANO) > 0: where += ''.join(('| ANO IN(', ', '.join(map(str, ANO)), ')')) if len(MES) > 0: where += ''.join( ('| MES IN(', ', '.join(map(lambda x: "'" + x + "'", MES)), ')')) if len(CONTINENTE) > 0: where += ''.join( ('| CONTINENTE IN(', ', '.join(map(lambda x: "'" + x + "'", CONTINENTE)), ')')) if len(PAIS) > 0: where += ''.join( ('| PAIS IN(', ', '.join(map(lambda x: "'" + x + "'", PAIS)), ')')) if len(UF) > 0: where += ''.join( ('| UF IN(', ', '.join(map(lambda x: "'" + x + "'", UF)), ')')) if len(MUNICIPIO) > 0: where += ''.join(('| MUNICIPIO IN(', ', '.join(map(lambda x: "'" + x + "'", MUNICIPIO)), ')')) if len(SEXO) > 0: where += ''.join( ('| SEXO IN(', ', '.join(map(lambda x: "'" + x + "'", SEXO)), ')')) if len(TIPO_VISTO) > 0: where += ''.join( ('| TIPO_VISTO IN(', ', '.join(map(lambda x: "'" + x + "'", TIPO_VISTO)), ')')) if len(TIPO_MOVIMENTO) > 0: where += ''.join( ('| TIPO_MOVIMENTO IN(', ', '.join(map(lambda x: "'" + x + "'", TIPO_MOVIMENTO)), ')')) if len(TIPOLOGIA_EXTRATOR) > 0: where += ''.join( ('| TIPOLOGIA_EXTRATOR IN(', ', '.join(map(lambda x: "'" + x + "'", TIPOLOGIA_EXTRATOR)), ')')) if len(ADMITIDOS_DESLIGADOS) > 0: where += ''.join( ('| ADMITIDOS_DESLIGADOS IN(', ', '.join(map(lambda x: "'" + x + "'", ADMITIDOS_DESLIGADOS)), ')')) if len(where) > 0: where = ''.join((' where ', where[2:].replace('|', ' AND'))) table = table.replace('rb_', 'tb_') toProceed = self.__checkFilters( series[0], table, where, ANO=ANO, MES=MES, UF=UF, MUNICIPIO=MUNICIPIO, CONTINENTE=CONTINENTE, PAIS=PAIS, SEXO=SEXO, TIPO_VISTO=TIPO_VISTO, TIPOLOGIA_EXTRATOR=TIPOLOGIA_EXTRATOR, TIPO_MOVIMENTO=TIPO_MOVIMENTO, ADMITIDOS_DESLIGADOS=ADMITIDOS_DESLIGADOS) if toProceed == 0: _message = 'Numero de filtros não permitido' raise HTTPException(_message) return qex.throw(_message) # return '[[], []]' selectX = [] selectSerie = [] sql = ''.join(('SELECT DISTINCT({}) as {}, '.format(eixoX, eixoX)[0:-2], ' FROM {}'.format(table), where)) select1 = ctx.engine.execute(sql).fetchall() [(selectX.append(list(row))) for row in select1] # sql = ''.join( ('SELECT DISTINCT({}) as {}, '.format(series[0], series[0])[0:-2], ' FROM {}'.format(table), where)) select2 = ctx.engine.execute(sql).fetchall() [(selectSerie.append(list(row))) for row in select2] listaFinal = [] columns = ["'" + eixoX + "'"] [columns.append("'" + serie[0] + "'") for serie in selectSerie] # chart listaChart = [] strChart = "['" + eixoX + "'" for row in selectSerie: strChart += ", '" + row[0] + "'" strChart += "]" listaChart.append(strChart) for item in selectX: str1 = '' strChart = '' for item1 in selectSerie: where1 = where where1 = ' WHERE ' if len(where) == 0 else where + ' AND ' sql = ''.join( ('SELECT COUNT(*) as {} FROM {}'.format(series[0], table), where1, "{} = '{}' AND {} = '{}'".format(eixoX, item[0], series[0], item1[0]))) contador = ctx.engine.execute(sql).scalar() str1 += ', ' + str(contador) strChart += ', ' + str(contador) listaFinal.append(["'{}'".format(item[0]) + str1]) listaChart.append("['{}'".format(item[0]) + strChart + "]") retorno = [] retorno.append(super().toJson([columns, listaFinal])) retorno.append('[' + ', '.join(listaChart) + ']') return super().toJson(retorno)
def viewChart(self, ANO, MES, UF, MUNICIPIO, PAIS, CONTINENTE, SEXO, TIPO_VISTO, TIPOLOGIA_EXTRATOR, TIPO_MOVIMENTO, ADMITIDOS_DESLIGADOS, table, eixoX, series): """ Retorna dados para popular o chart Eixo X: ANO por exemplo e várias Series: PAIS, CONTINENTE, SEXO """ table = table.lower() where = '' if len(ANO) > 0: where += ''.join(('| ANO IN(', ', '.join(map(str, ANO)), ')')) if len(MES) > 0: where += ''.join( ('| MES IN(', ', '.join(map(lambda x: "'" + x + "'", MES)), ')')) if len(CONTINENTE) > 0: where += ''.join( ('| CONTINENTE IN(', ', '.join(map(lambda x: "'" + x + "'", CONTINENTE)), ')')) if len(PAIS) > 0: where += ''.join( ('| PAIS IN(', ', '.join(map(lambda x: "'" + x + "'", PAIS)), ')')) if len(UF) > 0: where += ''.join( ('| UF IN(', ', '.join(map(lambda x: "'" + x + "'", UF)), ')')) if len(MUNICIPIO) > 0: where += ''.join(('| MUNICIPIO IN(', ', '.join(map(lambda x: "'" + x + "'", MUNICIPIO)), ')')) if len(SEXO) > 0: where += ''.join( ('| SEXO IN(', ', '.join(map(lambda x: "'" + x + "'", SEXO)), ')')) if len(where) > 0: where = ''.join((' where ', where[2:].replace('|', ' AND'))) table = table.replace('rb_', 'tb_') toProceed = self.__checkFilters( series[0], table, where, ANO=ANO, MES=MES, UF=UF, MUNICIPIO=MUNICIPIO, CONTINENTE=CONTINENTE, PAIS=PAIS, SEXO=SEXO, TIPO_VISTO=TIPO_VISTO, TIPOLOGIA_EXTRATOR=TIPOLOGIA_EXTRATOR, TIPO_MOVIMENTO=TIPO_MOVIMENTO, ADMITIDOS_DESLIGADOS=ADMITIDOS_DESLIGADOS) if toProceed == 0: return qex.throw('Numero de filtros não permitidos') #return '[]' selectX = [] selectSerie = [] sql = ''.join(('SELECT DISTINCT({}) as {}, '.format(eixoX, eixoX)[0:-2], ' FROM {}'.format(table), where)) select1 = ctx.engine.execute(sql).fetchall() [(selectX.append(list(row))) for row in select1] # sql = ''.join( ('SELECT DISTINCT({}) as {}, '.format(series[0], series[0])[0:-2], ' FROM {}'.format(table), where)) select2 = ctx.engine.execute(sql).fetchall() [(selectSerie.append(list(row))) for row in select2] listaFinal = [] str1 = "['" + eixoX + "'" for row in selectSerie: str1 += ", '" + row[0] + "'" str1 += "]" listaFinal.append(str1) for item in selectX: str1 = '' for item1 in selectSerie: where1 = where where1 = ' WHERE ' if len(where) == 0 else where + ' AND ' sql = ''.join( ('SELECT COUNT(*) as {} FROM {}'.format(series[0], table), where1, "{} = '{}' AND {} = '{}'".format(eixoX, item[0], series[0], item1[0]))) contador = ctx.engine.execute(sql).scalar() str1 += ', ' + str(contador) listaFinal.append("['{}'".format(item[0]) + str1 + "]") return '[' + ', '.join(listaFinal) + ']'