Server : Apache System : Linux dedi-14684855.grupobig.com 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64 User : grupo692 ( 1004) PHP Version : 8.2.31 Disable Function : NONE Directory : /home/grupo692/appstigrupobig/ |
#GrupoBiG
#http://162.214.65.39:8510/
#nohup python3 -m streamlit run 10Cia_Ilheus02.py --server.port 8510 --server.address 0.0.0.0 > dashGrupoBiG.log 2>&1 &
import streamlit as st
import cx_Oracle
import pandas as pd
import datetime
from sqlalchemy import create_engine
import locale
import base64
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2
# ==============================
# CONFIGURAÇÃO DO APP
# ==============================
st.set_page_config(
page_title="10&Cia Ilhéus Zona Sul",
page_icon="🛒",
layout="wide"
)
MASTER_PASSWORD = "MinhaSenhaMestra123!"
SALT = b"SaltFixo12345678"
ITERATIONS = 10000
# ==============================
# LOCALE / FORMATAÇÃO
# ==============================
try:
locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')
except locale.Error:
locale.setlocale(locale.LC_ALL, 'C')
def formatar_moeda(valor):
try:
valor_formatado = "{:,.2f}".format(valor)
valor_formatado = valor_formatado.replace(",", "X").replace(".", ",").replace("X", ".")
return f"R$ {valor_formatado}"
except ValueError:
return f"R${valor:,.2f}"
# ==============================
# CRIPTOGRAFIA
# ==============================
def generate_key_iv():
key_iv = PBKDF2(
MASTER_PASSWORD.encode("utf-8"),
SALT,
dkLen=48, # 32 bytes key + 16 bytes IV
count=ITERATIONS
)
return key_iv[:32], key_iv[32:]
def decrypt(cipher_text: str) -> str:
"""Descriptografa texto Base64"""
key, iv = generate_key_iv()
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = cipher.decrypt(base64.b64decode(cipher_text))
pad_len = decrypted[-1]
text = decrypted[:-pad_len].decode("utf-8", errors="ignore")
return text.lstrip("\ufeff")
# ==============================
# CONEXÃO BANCO
# ==============================
@st.cache_resource
def conectar_banco():
try:
encrypted_pass = "+ivGpR7n9D4zKHONh/3W2A==" # senha criptografada
_pass = decrypt(encrypted_pass)
connection = cx_Oracle.connect(
user="EDIUSER",
password=_pass,
dsn="187.109.221.38:1521/PROTON"
)
engine = create_engine(
f'oracle+cx_oracle://EDIUSER:{_pass}@187.109.221.38:1521/PROTON'
)
return connection, engine
except cx_Oracle.DatabaseError as e:
st.error(f"Erro ao conectar com o banco de dados: {e}")
st.stop()
connection, engine = conectar_banco()
# ==============================
# TÍTULO
# ==============================
st.markdown(
"<h2 style='text-align: center; color: #2e7d32; margin-bottom: 10px;'>📊 Vendas - 10&Cia Ilhéus Zona Sul</h2>",
unsafe_allow_html=True
)
# ==============================
# SELEÇÃO DE DATA (CENTRALIZADA)
# ==============================
col1, col2, col3 = st.columns([1,2,1])
with col2:
data_escolhida = st.date_input(
"Selecione a data",
datetime.datetime.now().date(),
format="DD/MM/YYYY",
label_visibility="collapsed" # remove o texto do label
)
# ==============================
# CONSULTA
# ==============================
query = """
SELECT
COD_UND,
UNIDADE,
QNTD_PEDIDOS,
VALOR_TOTAL,
NVL(MTA_META, 0) AS MTA_META,
NVL(MTA_BIG_META, 0) AS MTA_BIG_META
FROM
(
SELECT
TPED_UNIDADE_FK_PK AS cod_und,
TUND_UNIDADE.TUND_FANTASIA AS unidade,
SUM(QTD) AS qntd_pedidos,
SUM(TPED_VALOR_TOTAL_PEDIDO) AS valor_total,
BIG_METAS.MTA_META,
BIG_METAS.MTA_BIG_META
FROM
(
SELECT
TPED_PEDIDO_VENDA.TPED_UNIDADE_FK_PK,
TPED_DATA_EMISSAO,
COUNT(TPED_PEDIDO_VENDA.TPED_NUMERO_PEDIDO_PK) AS QTD,
SUM(TPED_PEDIDO_VENDA.TPED_VALOR_TOTAL_PEDIDO) AS TPED_VALOR_TOTAL_PEDIDO
FROM TPED_PEDIDO_VENDA
WHERE TPED_PEDIDO_VENDA.TPED_UNIDADE_FK_PK = '23'
AND TRUNC(TPED_PEDIDO_VENDA.TPED_DATA_EMISSAO) = TRUNC(:data_escolhida)
AND TPED_STATUS_PEDIDO = 'MA'
AND TPED_PEDIDO_VENDA.TPED_NATUREZA_MOVIMENTACAO = 'VM'
GROUP BY TPED_UNIDADE_FK_PK, TPED_DATA_EMISSAO
UNION ALL
SELECT
TPED_HISTORICO_VENDA.TPED_UNIDADE_FK_PK,
TPED_DATA_EMISSAO,
COUNT(TPED_HISTORICO_VENDA.TPED_NUMERO_PEDIDO_PK) AS QTD,
SUM(TPED_HISTORICO_VENDA.TPED_VALOR_TOTAL_PEDIDO) AS TPED_VALOR_TOTAL_PEDIDO
FROM TPED_HISTORICO_VENDA
WHERE TPED_HISTORICO_VENDA.TPED_UNIDADE_FK_PK = '23'
AND TRUNC(TPED_HISTORICO_VENDA.TPED_DATA_EMISSAO) = TRUNC(:data_escolhida)
AND TPED_STATUS_PEDIDO = 'MA'
AND TPED_HISTORICO_VENDA.TPED_NATUREZA_MOVIMENTACAO = 'VM'
GROUP BY TPED_UNIDADE_FK_PK, TPED_DATA_EMISSAO
)
LEFT JOIN TUND_UNIDADE ON TUND_UNIDADE.TUND_UNIDADE_PK = TPED_UNIDADE_FK_PK
LEFT JOIN DBAUSER.BIG_METAS ON DBAUSER.BIG_METAS.MTA_UNIDADE_FK_PK = TPED_UNIDADE_FK_PK
AND TO_CHAR(TRUNC(DBAUSER.BIG_METAS.MTA_MES_ANO, 'MM'), 'MMYYYY') = TO_CHAR(TRUNC(:data_escolhida, 'MM'), 'MMYYYY')
GROUP BY
TPED_UNIDADE_FK_PK,
TUND_UNIDADE.TUND_FANTASIA,
BIG_METAS.MTA_META,
BIG_METAS.MTA_BIG_META
)
"""
# ==============================
# ÁREA PRINCIPAL
# ==============================
if st.button("🔄 Atualizar", use_container_width=True):
df = pd.read_sql(query, engine, params={"data_escolhida": data_escolhida})
if df.empty:
st.warning("Não há vendas registradas nesta data.")
else:
valor_total = df['valor_total'].sum()
meta = df['mta_meta'].sum()
big_meta = df['mta_big_meta'].sum()
st.markdown(
f"""
<div style='text-align: center; padding: 20px;
background-color: #f0f9f0;
border-radius: 15px;
box-shadow: 0 3px 8px rgba(0,0,0,0.1);
margin-top: 15px;'>
<h3 style='color: #2e7d32; margin-bottom: 5px;'>💰 Total de Vendas</h3>
<h1 style='font-size: 70px; color: #1b5e20; margin: 10px 0;'>{formatar_moeda(valor_total)}</h1>
<p style='font-size: 18px; color: gray; margin-top: 0;'>
Meta: {formatar_moeda(meta)} | BigMeta: {formatar_moeda(big_meta)}
</p>
</div>
""",
unsafe_allow_html=True
)