File size: 9,125 Bytes
1075a41
a3a8670
e6bdc5a
37f36df
f8b04dc
0b37ad6
f8b04dc
 
0b37ad6
f8b04dc
 
 
 
 
 
 
 
 
0b37ad6
f8b04dc
 
 
 
 
 
 
 
 
0b37ad6
f8b04dc
 
 
 
 
 
 
0b37ad6
 
 
 
0e47109
0b37ad6
 
0e47109
0b37ad6
 
 
37f36df
0b37ad6
f8b04dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37f36df
f8b04dc
 
37f36df
f8b04dc
 
 
 
 
 
 
 
 
 
 
 
37f36df
5cf160f
f8b04dc
5cf160f
fc53fed
5cf160f
f8b04dc
5cf160f
 
f8b04dc
 
0b37ad6
 
 
f8b04dc
5cf160f
f8b04dc
 
 
 
 
 
5cf160f
f8b04dc
 
 
0b37ad6
 
 
f8b04dc
0b37ad6
 
 
f8b04dc
0b37ad6
 
 
 
f8b04dc
 
 
 
 
 
 
 
 
 
 
 
 
 
0b37ad6
 
 
f8b04dc
 
 
 
 
 
 
 
 
0b37ad6
 
 
f8b04dc
0b37ad6
 
 
f8b04dc
0b37ad6
 
 
f8b04dc
 
 
 
 
 
 
5cf160f
f8b04dc
0e47109
37f36df
5cf160f
f8b04dc
 
5cf160f
 
f8b04dc
 
 
 
 
 
5cf160f
f8b04dc
 
 
 
 
5cf160f
f8b04dc
 
 
 
 
 
 
 
 
37f36df
f8b04dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51e3217
f8b04dc
 
 
 
 
 
 
 
 
 
 
 
 
0b37ad6
 
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
import streamlit as st
import pandas as pd
from datetime import datetime
import plotly.express as px

# Set page config
st.set_page_config(page_title="مدیریت داده‌های مزارع", layout="wide")

# Add custom CSS for RTL support
st.markdown(
    """
    <style>
    @import url('https://fonts.googleapis.com/css2?family=Vazirmatn:wght@400;700&display=swap');
    
    .main {
        direction: rtl;
        font-family: 'Vazirmatn', sans-serif;
    }
    .stSelectbox, .stMultiSelect, .stDateInput {
        direction: rtl;
    }
    div[data-testid="stDataFrame"] {
        direction: rtl;
    }
    .stTextInput > div > div > input {
        direction: rtl;
        text-align: right;
    }
    button, .stMarkdown {
        direction: rtl;
        text-align: right;
    }
    </style>
    """, unsafe_allow_html=True
)

# Load CSV data
@st.cache_data
def load_data():
    try:
        df = pd.read_csv('پایگاه داده.csv')
        return df
    except FileNotFoundError:
        st.error("فایل CSV یافت نشد. لطفا اطمینان حاصل کنید که فایل 'پایگاه داده.csv' در مسیر برنامه قرار دارد.")
        return pd.DataFrame()

# Initialize session state
if 'data' not in st.session_state:
    st.session_state.data = load_data()

def validate_input(value, field_type):
    """Validate input values"""
    if field_type == 'numeric':
        try:
            val = float(value)
            if val < 0:
                return False, "مقدار نمی‌تواند منفی باشد"
            return True, val
        except:
            return False, "لطفا یک عدد معتبر وارد کنید"
    return True, value

def calculate_growth(current_height, previous_height):
    """Calculate growth between weeks"""
    if current_height and previous_height:
        return current_height - previous_height
    return 0

# Sidebar filters
st.sidebar.header("فیلترها")

# Week and day selection
days = ["شنبه", "یکشنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنجشنبه"]
weeks = list(range(1, 23))

selected_day = st.sidebar.selectbox("روز هفته", days)
selected_week = st.sidebar.selectbox("هفته", weeks)

# Main content
st.title("سیستم مدیریت داده‌های مزارع")

# Create tabs for different sections
tab1, tab2, tab3 = st.tabs(["ورود داده", "مشاهده داده‌ها", "نمودارها"])

with tab1:
    with st.form("data_entry"):
        col1, col2, col3 = st.columns(3)
        
        with col1:
            farm = st.text_input("مزرعه")
            channel = st.text_input("کانال")
            department = st.text_input("اداره")
            age = st.number_input("سن", min_value=0)
            variety = st.text_input("واریته")
            area = st.number_input("مساحت", min_value=0.0)
            sub_area = st.number_input("مساحت زیرمجموعه", min_value=0.0)
            group = st.text_input("گروه")

        with col2:
            station1 = st.number_input("ایستگاه 1", min_value=0.0)
            station2 = st.number_input("ایستگاه 2", min_value=0.0)
            station3 = st.number_input("ایستگاه 3", min_value=0.0)
            station4 = st.number_input("ایستگاه 4", min_value=0.0)
            station5 = st.number_input("ایستگاه 5", min_value=0.0)

        with col3:
            current_height = st.number_input("ارتفاع هفته جاری", min_value=0.0)
            previous_height = st.number_input("ارتفاع هفته گذشته", min_value=0.0)
            nitrogen = st.number_input("نیتروژن فعلی", min_value=0.0)
            nitrogen_std_current = st.number_input("نیتروژن استاندارد فعلی", min_value=0.0)
            nitrogen_prev = st.number_input("نیتروژن قبلی", min_value=0.0)
            nitrogen_std_prev = st.number_input("نیتروژن استاندارد قبلی", min_value=0.0)
            moisture = st.number_input("رطوبت غلاف فعلی", min_value=0.0)
            moisture_std_current = st.number_input("رطوبت استاندارد فعلی", min_value=0.0)
            moisture_prev = st.number_input("رطوبت غلاف قبلی", min_value=0.0)
            moisture_std_prev = st.number_input("رطوبت استاندارد قبلی", min_value=0.0)
            well1 = st.number_input("چاهک 1", min_value=0.0)
            well1_date = st.date_input("تاریخ قرائت 1")
            well2 = st.number_input("چاهک 2", min_value=0.0)
            well2_date = st.date_input("تاریخ قرائت 2")


        submitted = st.form_submit_button("ثبت اطلاعات")
        
        if submitted:
            # Calculate growth rate
            growth_rate = calculate_growth(current_height, previous_height)
            
            # Create new data entry
            new_data = {
                'مزرعه': farm,
                'کانال': channel,
                'اداره': department,
                'سن': age,
                'واریته': variety,
                'مساحت': area,
                'مساحت زیرمجموعه': sub_area,
                'گروه': group,
                'ایستگاه 1': station1,
                'ایستگاه 2': station2,
                'ایستگاه 3': station3,
                'ایستگاه 4': station4,
                'ایستگاه 5': station5,
                'ارتفاع هفته جاری': current_height,
                'ارتفاع هفته گذشته': previous_height,
                'رشد هفته جاری': growth_rate,
                'نیتروژن فعلی': nitrogen,
                'نیتروژن استاندارد فعلی': nitrogen_std_current,
                'نیتروژن قبلی': nitrogen_prev,
                'نیتروژن استاندارد قبلی': nitrogen_std_prev,
                'رطوبت غلاف فعلی': moisture,
                'رطوبت استاندارد فعلی': moisture_std_current,
                'رطوبت غلاف قبلی': moisture_prev,
                'رطوبت استاندارد قبلی': moisture_std_prev,
                'چاهک 1': well1,
                'تاریخ قرائت 1': well1_date.strftime('%Y-%m-%d'),
                'چاهک 2': well2,
                'تاریخ قرائت 2': well2_date.strftime('%Y-%m-%d'),
            }
            
            # Update session state
            st.session_state.data = pd.concat([
                st.session_state.data, 
                pd.DataFrame([new_data])
            ], ignore_index=True)
            
            st.success("اطلاعات با موفقیت ثبت شد")
            st.session_state.data.to_csv('پایگاه داده.csv', index=False)

with tab2:
    if not st.session_state.data.empty:
        # Add filters
        col1, col2 = st.columns(2)
        with col1:
            if 'اداره' in st.session_state.data.columns:
                dept_filter = st.multiselect(
                    'فیلتر بر اساس اداره',
                    options=st.session_state.data['اداره'].unique()
                )
        
        with col2:
            if 'واریته' in st.session_state.data.columns:
                variety_filter = st.multiselect(
                    'فیلتر بر اساس واریته',
                    options=st.session_state.data['واریته'].unique()
                )

        # Apply filters
        filtered_data = st.session_state.data.copy()
        if dept_filter:
            filtered_data = filtered_data[filtered_data['اداره'].isin(dept_filter)]
        if variety_filter:
            filtered_data = filtered_data[filtered_data['واریته'].isin(variety_filter)]

        # Display filtered data
        st.dataframe(filtered_data)
        
        # Download button
        csv = filtered_data.to_csv(index=False).encode('utf-8-sig')
        st.download_button(
            label="دانلود داده‌ها",
            data=csv,
            file_name="پایگاه داده.csv",
            mime="text/csv"
        )

with tab3:
    if not st.session_state.data.empty:
        # Growth trend chart
        st.subheader("نمودار رشد")
        fig1 = px.line(
            st.session_state.data,
            x='ایام هفته',
            y='ارتفاع هفته جاری',
            color='مزرعه',
            title='روند رشد بر اساس هفته'
        )
        st.plotly_chart(fig1)

        # Station measurements comparison
        st.subheader("مقایسه ایستگاه‌ها")
        station_data = st.session_state.data[['ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5']]
        fig2 = px.box(station_data, title='مقایسه اندازه‌گیری‌های ایستگاه‌ها')
        st.plotly_chart(fig2)

# Add error handling
st.error("در صورت بروز خطا، لطفا صفحه را رفرش کنید")