Esmaeilkianii commited on
Commit
0a33e26
·
verified ·
1 Parent(s): b69f7bd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -40
app.py CHANGED
@@ -342,9 +342,11 @@ lottie_report = load_lottie_url('https://assets9.lottiefiles.com/packages/lf20_v
342
  # Create session state for storing data with Persian column names
343
  if 'heights_df' not in st.session_state:
344
  st.session_state.heights_df = pd.DataFrame(columns=[
345
- 'ردیف', 'هفته', 'تاریخ قرائت', 'ارتفاع هفته جاری مزرعه', 'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3',
346
- 'ایستگاه 4', 'ایستگاه 5', 'چاهک 1', 'چاهک 2', 'رطوبت غلاف فعلی', 'نیتروژن فعلی',
347
- 'واریته', 'سن', 'مساحت داشت', 'کانال', 'اداره'
 
 
348
  ])
349
 
350
  # Main header
@@ -448,9 +450,9 @@ elif selected == "ورود اطلاعات":
448
  # Initialize an empty DataFrame for manual entry if not already present
449
  if 'manual_entry_df' not in st.session_state:
450
  st.session_state.manual_entry_df = pd.DataFrame(columns=[
451
- 'ردیف', 'هفته', 'تاریخ قرائت', 'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3',
452
- 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه', 'چاهک 1', 'چاهک 2',
453
- 'رطوبت غلاف فعلی', 'نیتروژن فعلی', 'واریته', 'سن', 'مساحت داشت', 'کانال', 'اداره'
454
  ])
455
 
456
  # Use data_editor for interactive table entry
@@ -459,8 +461,14 @@ elif selected == "ورود اطلاعات":
459
  num_rows="dynamic", # Allow dynamic rows
460
  column_config={
461
  'ردیف': st.column_config.TextColumn("ردیف", required=True),
462
- 'هفته': st.column_config.NumberColumn("هفته", min_value=1, max_value=52, step=1, required=True),
463
- 'تاریخ قرائت': st.column_config.DateColumn("تاریخ قرائت", format="YYYY-MM-DD", required=True),
 
 
 
 
 
 
464
  'ایستگاه 1': st.column_config.NumberColumn("ایستگاه 1", min_value=0.0, step=0.1, required=True),
465
  'ایستگاه 2': st.column_config.NumberColumn("ایستگاه 2", min_value=0.0, step=0.1, required=True),
466
  'ایستگاه 3': st.column_config.NumberColumn("ایستگاه 3", min_value=0.0, step=0.1, required=True),
@@ -469,13 +477,8 @@ elif selected == "ورود اطلاعات":
469
  'ارتفاع هفته جاری مزرعه': st.column_config.NumberColumn("ارتفاع هفته جاری مزرعه", min_value=0.0, step=0.1, required=True),
470
  'چاهک 1': st.column_config.NumberColumn("چاهک 1", min_value=0.0, step=0.1, required=True),
471
  'چاهک 2': st.column_config.NumberColumn("چاهک 2", min_value=0.0, step=0.1, required=True),
472
- 'رطوبت غلاف فعلی': st.column_config.NumberColumn("رطوبت غلاف فعلی", min_value=0.0, max_value=100.0, step=0.1, required=True),
473
- 'نیتروژن ��علی': st.column_config.NumberColumn("نیتروژن فعلی", min_value=0.0, step=0.1, required=True),
474
- 'واریته': st.column_config.TextColumn("واریته", required=True),
475
- 'سن': st.column_config.TextColumn("سن", required=True),
476
- 'مساحت داشت': st.column_config.NumberColumn("مساحت داشت", min_value=0.0, step=0.1, required=True),
477
- 'کانال': st.column_config.NumberColumn("کانال", min_value=0, step=1, required=True),
478
- 'اداره': st.column_config.NumberColumn("اداره", min_value=0, step=1, required=True),
479
  },
480
  use_container_width=True,
481
  hide_index=True
@@ -505,23 +508,52 @@ elif selected == "ورود اطلاعات":
505
  try:
506
  df = pd.read_excel(uploaded_file)
507
 
508
- # Column mapping based on sample file
509
  column_mapping = {
510
- 'Unnamed: 0': 'ردیف', 'هفته': 'هفته', 'تاریخ قرائت': 'تاریخ قرائت',
511
- 'ارتفاع هفته جاری مزرعه': 'ارتفاع هفته جاری مزرعه', 'ایستگاه 1': 'ایستگاه 1', 'ایستگاه 2': 'ایستگاه 2',
512
- 'ایستگاه 3': 'ایستگاه 3', 'ایستگاه 4': 'ایستگاه 4', 'ایستگاه 5': 'ایستگاه 5',
513
- 'چاهک 1': 'چاهک 1', 'چاهک 2': 'چاهک 2', 'رطوبت غلاف فعلی': 'رطوبت غلاف فعلی',
514
- 'نیتروژن فعلی': 'نیتروژن فعلی', 'واریته': 'واریته', 'سن': 'سن', 'مساحت داشت': 'مساحت داشت',
515
- 'کانال': 'کانال', 'اداره': 'اداره'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516
  }
517
 
518
- df = df.rename(columns=column_mapping)
 
 
 
 
 
519
 
520
- # Expected columns
521
- expected_columns = list(st.session_state.heights_df.columns)
522
-
523
- # Check for missing columns
524
- missing_columns = [col for col in expected_columns if col not in df.columns]
525
  if missing_columns:
526
  st.error(f"ستون‌های زیر در فایل یافت نشدند: {', '.join(missing_columns)}")
527
  else:
@@ -536,27 +568,25 @@ elif selected == "ورود اطلاعات":
536
  except:
537
  return date_str
538
 
539
- df['تاریخ قرائت'] = df['تاریخ قرائت'].apply(convert_persian_date)
540
- df['تاریخ قرائت'] = pd.to_datetime(df['تاریخ قرائت'], errors='coerce')
 
 
541
 
542
  # Ensure numeric columns
543
- numeric_cols = ['هفته', 'ارتفاع هفته جاری مزرعه', 'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3',
544
- 'ایستگاه 4', 'ایستگاه 5', 'چاهک 1', 'چاهک 2', 'رطوبت غلاف فعلی',
545
- 'نیتروژن فعلی', 'مساحت داشت', 'کانال', 'اداره']
546
  for col in numeric_cols:
547
- df[col] = pd.to_numeric(df[col], errors='coerce')
548
-
549
- # Select only expected columns
550
- df = df[expected_columns]
551
 
552
  # Calculate average height if stations are provided
553
- for index, row in df.iterrows():
554
  stations = [row[f'ایستگاه {i}'] for i in range(1, 6) if pd.notna(row[f'ایستگاه {i}'])]
555
  if stations:
556
- df.loc[index, 'ارتفاع هفته جاری مزرعه'] = round(sum(stations) / len(stations), 1)
557
 
558
  # Append to session state
559
- st.session_state.heights_df = pd.concat([st.session_state.heights_df, df], ignore_index=True)
560
  st.success("داده‌ها از فایل با موفقیت بارگذاری شدند!")
561
  st.dataframe(st.session_state.heights_df.tail())
562
  except Exception as e:
 
342
  # Create session state for storing data with Persian column names
343
  if 'heights_df' not in st.session_state:
344
  st.session_state.heights_df = pd.DataFrame(columns=[
345
+ 'ردیف', 'نماینده', 'کانال', 'اداره', 'تولید', 'مساحت داشت', 'مساحت زیرمجموعه', 'واریته', 'سن',
346
+ 'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه',
347
+ 'ارتفاع هفته گذشته مزرعه', 'رشد هفته جاری', 'رشد هفته گذشته', 'نیتروژن فعلی', 'نیتروژن استاندارد فعلی',
348
+ 'نیتروژن قبلی', 'نیتروژن استاندارد قبلی', 'رطوبت غلاف فعلی', 'رطوبت استاندارد فعلی', 'رطوبت غلاف قبلی',
349
+ 'رطوبت استاندارد قبلی', 'چاهک 1', 'تاریخ قرائت', 'چاهک 2', 'تاریخ قرائت2'
350
  ])
351
 
352
  # Main header
 
450
  # Initialize an empty DataFrame for manual entry if not already present
451
  if 'manual_entry_df' not in st.session_state:
452
  st.session_state.manual_entry_df = pd.DataFrame(columns=[
453
+ 'ردیف', 'نماینده', 'کانال', 'اداره', 'تولید', 'مساحت داشت', 'مساحت زیرمجموعه', 'واریته', 'سن',
454
+ 'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه',
455
+ 'چاهک 1', 'چاهک 2', 'تاریخ قرائت', 'تاریخ قرائت2'
456
  ])
457
 
458
  # Use data_editor for interactive table entry
 
461
  num_rows="dynamic", # Allow dynamic rows
462
  column_config={
463
  'ردیف': st.column_config.TextColumn("ردیف", required=True),
464
+ 'نماینده': st.column_config.TextColumn("نماینده", required=True),
465
+ 'کانال': st.column_config.NumberColumn("کانال", min_value=1, step=1, required=True),
466
+ 'اداره': st.column_config.NumberColumn("اداره", min_value=1, step=1, required=True),
467
+ 'تولید': st.column_config.NumberColumn("تولید", min_value=1, step=1, required=True),
468
+ 'مساحت داشت': st.column_config.NumberColumn("مساحت داشت", min_value=0.0, step=0.1, required=True),
469
+ 'مساحت زیرمجموعه': st.column_config.NumberColumn("مساحت زیرمجموعه", min_value=0.0, step=0.1, required=True),
470
+ 'واریته': st.column_config.TextColumn("واریته", required=True),
471
+ 'سن': st.column_config.TextColumn("سن", required=True),
472
  'ایستگاه 1': st.column_config.NumberColumn("ایستگاه 1", min_value=0.0, step=0.1, required=True),
473
  'ایستگاه 2': st.column_config.NumberColumn("ایستگاه 2", min_value=0.0, step=0.1, required=True),
474
  'ایستگاه 3': st.column_config.NumberColumn("ایستگاه 3", min_value=0.0, step=0.1, required=True),
 
477
  'ارتفاع هفته جاری مزرعه': st.column_config.NumberColumn("ارتفاع هفته جاری مزرعه", min_value=0.0, step=0.1, required=True),
478
  'چاهک 1': st.column_config.NumberColumn("چاهک 1", min_value=0.0, step=0.1, required=True),
479
  'چاهک 2': st.column_config.NumberColumn("چاهک 2", min_value=0.0, step=0.1, required=True),
480
+ 'تاریخ قرائت': st.column_config.DateColumn("تاریخ قرائت", format="YYYY-MM-DD", required=True),
481
+ 'تاریخ قرائت2': st.column_config.DateColumn("تاریخ قرائت2", format="YYYY-MM-DD", required=True),
 
 
 
 
 
482
  },
483
  use_container_width=True,
484
  hide_index=True
 
508
  try:
509
  df = pd.read_excel(uploaded_file)
510
 
511
+ # Dynamic column mapping based on your file structure
512
  column_mapping = {
513
+ 'ردیف': 'ردیف',
514
+ 'نماینده': 'نماینده',
515
+ 'کانال': 'کانال',
516
+ 'اداره': 'اداره',
517
+ 'تولید': 'تولید',
518
+ 'مساحت داشت': 'مساحت داشت',
519
+ 'مساحت زیرمجموعه': 'مساحت زیرمجموعه',
520
+ 'واریته': 'واریته',
521
+ 'سن': 'سن',
522
+ 'ایستگاه 1': 'ایستگاه 1',
523
+ 'ایستگاه 2': 'ایستگاه 2',
524
+ 'ایستگاه 3': 'ایستگاه 3',
525
+ 'ایستگاه 4': 'ایستگاه 4',
526
+ 'ایستگاه 5': 'ایستگاه 5',
527
+ 'ارتفاع هفته جاری مزرعه': 'ارتفاع هفته جاری مزرعه',
528
+ 'ارتفاع هفته گذشته مزرعه': 'ارتفاع هفته گذشته مزرعه',
529
+ 'رشد هفته جاری': 'رشد هفته جاری',
530
+ 'رشد هفته گذشته': 'رشد هفته گذشته',
531
+ 'نیتروژن فعلی': 'نیتروژن فعلی',
532
+ 'نیتروژن استاندارد فعلی': 'نیتروژن استاندارد فعلی',
533
+ 'نیتروژن قبلی': 'نیتروژن قبلی',
534
+ 'نیتروژن استاندارد قبلی': 'نیتروژن استاندارد قبلی',
535
+ 'رطوبت غلاف فعلی': 'رطوبت غلاف فعلی',
536
+ 'رطوبت استاندارد فعلی': 'رطوبت استاندارد فعلی',
537
+ 'رطوبت غلاف قبلی': 'رطوبت غلاف قبلی',
538
+ 'رطوبت استاندارد قبلی': 'رطوبت استاندارد قبلی',
539
+ 'چاهک 1': 'چاهک 1',
540
+ 'تاریخ قرائت': 'تاریخ قرائت',
541
+ 'چاهک 2': 'چاهک 2',
542
+ 'تاریخ قرائت2': 'تاریخ قرائت2'
543
  }
544
 
545
+ # Map columns dynamically
546
+ available_columns = df.columns.tolist()
547
+ mapped_df = pd.DataFrame()
548
+ for english_col, persian_col in column_mapping.items():
549
+ if english_col in available_columns:
550
+ mapped_df[persian_col] = df[english_col]
551
 
552
+ # Ensure all required columns are present
553
+ required_columns = ['ردیف', 'نماینده', 'کانال', 'اداره', 'تولید', 'مساحت داشت', 'مساحت زیرمجموعه', 'واریته', 'سن',
554
+ 'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه',
555
+ 'چاهک 1', 'چاهک 2', 'تاریخ قرائت', 'تاریخ قرائت2']
556
+ missing_columns = [col for col in required_columns if col not in mapped_df.columns]
557
  if missing_columns:
558
  st.error(f"ستون‌های زیر در فایل یافت نشدند: {', '.join(missing_columns)}")
559
  else:
 
568
  except:
569
  return date_str
570
 
571
+ mapped_df['تاریخ قرائت'] = mapped_df['تاریخ قرائت'].apply(convert_persian_date)
572
+ mapped_df['تاریخ قرائت2'] = mapped_df['تاریخ قرائت2'].apply(convert_persian_date)
573
+ mapped_df['تاریخ قرائت'] = pd.to_datetime(mapped_df['تاریخ قرائت'], errors='coerce')
574
+ mapped_df['تاریخ قرائت2'] = pd.to_datetime(mapped_df['تاریخ قرائت2'], errors='coerce')
575
 
576
  # Ensure numeric columns
577
+ numeric_cols = ['کانال', 'اداره', 'تولید', 'مساحت داشت', 'مساحت زیرمجموعه', 'ایستگاه 1', 'ایستگاه 2',
578
+ 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه', 'چاهک 1', 'چاهک 2']
 
579
  for col in numeric_cols:
580
+ mapped_df[col] = pd.to_numeric(mapped_df[col], errors='coerce')
 
 
 
581
 
582
  # Calculate average height if stations are provided
583
+ for index, row in mapped_df.iterrows():
584
  stations = [row[f'ایستگاه {i}'] for i in range(1, 6) if pd.notna(row[f'ایستگاه {i}'])]
585
  if stations:
586
+ mapped_df.loc[index, 'ارتفاع هفته جاری مزرعه'] = round(sum(stations) / len(stations), 1)
587
 
588
  # Append to session state
589
+ st.session_state.heights_df = pd.concat([st.session_state.heights_df, mapped_df], ignore_index=True)
590
  st.success("داده‌ها از فایل با موفقیت بارگذاری شدند!")
591
  st.dataframe(st.session_state.heights_df.tail())
592
  except Exception as e: