File size: 5,378 Bytes
f306e2a
139419f
f306e2a
 
139419f
f306e2a
139419f
f306e2a
 
 
 
 
 
 
 
 
 
 
139419f
bb615b4
 
139419f
f306e2a
139419f
f306e2a
bb615b4
139419f
bb615b4
f306e2a
 
bb615b4
f306e2a
bb615b4
f306e2a
139419f
f306e2a
 
bb615b4
f306e2a
 
 
 
 
139419f
f306e2a
bb615b4
f306e2a
 
bb615b4
f306e2a
bb615b4
139419f
f306e2a
 
 
bb615b4
f306e2a
 
 
 
 
139419f
f306e2a
 
 
bb615b4
f306e2a
 
 
 
 
 
bb615b4
 
f306e2a
 
 
 
 
 
 
 
bb615b4
 
f306e2a
 
 
bb615b4
f306e2a
 
bb615b4
 
f306e2a
bb615b4
f306e2a
 
 
 
 
 
bb615b4
 
f306e2a
 
 
bb615b4
 
f306e2a
 
139419f
bb615b4
f306e2a
bb615b4
 
f306e2a
 
139419f
bb615b4
 
f306e2a
 
 
 
bb615b4
 
f306e2a
 
bb615b4
 
f306e2a
bb615b4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import streamlit as st
from datetime import datetime
from typing import Dict
import pandas as pd

from pdf_generator import create_enhanced_pdf_report, create_csv_export

def init_session_state():
    if 'current_df' not in st.session_state:
        st.session_state.current_df = None
    if 'current_stats' not in st.session_state:
        st.session_state.current_stats = None
    if 'export_ready' not in st.session_state:
        st.session_state.export_ready = False
    if 'pdf_buffer' not in st.session_state:
        st.session_state.pdf_buffer = None
    if 'csv_data' not in st.session_state:
        st.session_state.csv_data = None

def render_export_section(df: pd.DataFrame, stats: Dict, outliers: Dict, model, t: Dict):
    st.markdown(f'<div class="section-header">{t["section_export"]}</div>', unsafe_allow_html=True)
    
    col1, col2, col3 = st.columns(3)
    
    with col1:
        if st.button(t['btn_generate_pdf'], key="generate_pdf_btn", type="primary"):
            try:
                with st.spinner(t['pdf_generating']):
                    st.session_state.pdf_buffer = create_enhanced_pdf_report(df, stats, outliers, model)
                    st.session_state.export_ready = True
                st.success(t['pdf_success'])
            except Exception as e:
                st.error(f"{t['pdf_failed']}: {str(e)}")
                st.session_state.export_ready = False
        
        if st.session_state.export_ready and st.session_state.pdf_buffer:
            st.download_button(
                label=t['btn_download_pdf'],
                data=st.session_state.pdf_buffer,
                file_name=f"production_report_{datetime.now().strftime('%Y%m%d_%H%M')}.pdf",
                mime="application/pdf",
                key="download_pdf_btn"
            )
    
    with col2:
        if st.button(t['btn_generate_csv'], key="generate_csv_btn", type="primary"):
            try:
                st.session_state.csv_data = create_csv_export(df, stats)
                st.success(t['csv_success'])
            except Exception as e:
                st.error(f"{t['csv_failed']}: {str(e)}")
        
        if st.session_state.csv_data is not None:
            csv_string = st.session_state.csv_data.to_csv(index=False)
            st.download_button(
                label=t['btn_download_csv'],
                data=csv_string,
                file_name=f"production_summary_{datetime.now().strftime('%Y%m%d_%H%M')}.csv",
                mime="text/csv",
                key="download_csv_btn"
            )
    
    with col3:
        csv_string = df.to_csv(index=False)
        st.download_button(
            label=t['btn_download_raw'],
            data=csv_string,
            file_name=f"raw_production_data_{datetime.now().strftime('%Y%m%d_%H%M')}.csv",
            mime="text/csv",
            key="download_raw_btn"
        )

def render_quality_check(outliers: Dict, t: Dict):
    st.markdown(f'<div class="section-header">{t["section_quality_check"]}</div>', unsafe_allow_html=True)
    
    cols = st.columns(len(outliers))
    for i, (material, info) in enumerate(outliers.items()):
        with cols[i]:
            if info['count'] > 0:
                dates_str = ", ".join(info['dates'])
                st.markdown(f'''<div class="alert-warning">
                    <strong>{material.title()}</strong><br>
                    {info["count"]} {t['quality_outliers']}<br>
                    {t['quality_normal_range']}: {info["range"]}<br>
                    <div class="quality-dates">Dates: {dates_str}</div>
                </div>''', unsafe_allow_html=True)
            else:
                st.markdown(f'<div class="alert-success"><strong>{material.title()}</strong><br>{t["quality_normal"]}</div>', 
                          unsafe_allow_html=True)

def render_ai_insights(model, stats: Dict, df: pd.DataFrame, t: Dict, lang: str):
    st.markdown(f'<div class="section-header">{t["section_ai_insights"]}</div>', unsafe_allow_html=True)
    
    quick_questions = [t['ai_quick_q1'], t['ai_quick_q2'], t['ai_quick_q3']]
    
    cols = st.columns(len(quick_questions))
    for i, q in enumerate(quick_questions):
        with cols[i]:
            if st.button(q, key=f"ai_q_{i}"):
                from ai_engine import query_ai
                with st.spinner(t['ai_analyzing']):
                    answer = query_ai(model, stats, q, df, lang)
                    st.info(answer)
    
    custom_question = st.text_input(
        t['ai_ask_label'], 
        placeholder=t['ai_custom_placeholder'],
        key="custom_ai_question"
    )
    
    if custom_question and st.button(t['ai_ask_btn'], key="ask_ai_btn"):
        from ai_engine import query_ai
        with st.spinner(t['ai_analyzing']):
            answer = query_ai(model, stats, custom_question, df, lang)
            st.success(f"**Q:** {custom_question}")
            st.write(f"**A:** {answer}")

def render_welcome_screen(t: Dict):
    st.markdown(f'<div class="section-header">{t["welcome_title"]}</div>', unsafe_allow_html=True)
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.markdown(f"### {t['welcome_quick_start']}")
        st.markdown(t['welcome_steps'])
    
    with col2:
        st.markdown(f"### {t['welcome_features']}")
        st.markdown(t['welcome_features_list'])
    
    st.info(t['welcome_ready'])