Implemented hiding forecast sheets not in the calculated years array

This commit is contained in:
denisacirstea
2025-09-12 12:54:45 +03:00
parent 3fda676a47
commit 5e474abc49
2 changed files with 80 additions and 4 deletions

View File

@@ -5,10 +5,10 @@
"company_name": "Footprints AI", "company_name": "Footprints AI",
"email": "denisa@example.com", "email": "denisa@example.com",
"phone": "+40 712 345 678", "phone": "+40 712 345 678",
"store_name": "Carrefour Romania", "store_name": "Ursus",
"country": "Romania", "country": "Romania",
"starting_date": "01.01.2026", "starting_date": "01.01.2027",
"duration": 36, "duration": 24,
"store_types": ["convenience", "supermarket", "hypermarket"], "store_types": ["convenience", "supermarket", "hypermarket"],
"open_days_per_month": 26, "open_days_per_month": 26,

View File

@@ -9,6 +9,7 @@ from zipfile import ZipFile, ZIP_DEFLATED
def update_excel_variables(excel_path): def update_excel_variables(excel_path):
""" """
Update the Variables sheet in the Excel file with values from config.json Update the Variables sheet in the Excel file with values from config.json
and hide forecast sheets that aren't in the calculated years array
Args: Args:
excel_path (str): Path to the Excel file to update excel_path (str): Path to the Excel file to update
@@ -112,6 +113,68 @@ def update_excel_variables(excel_path):
print("Saving workbook with updated variables...") print("Saving workbook with updated variables...")
wb.save(excel_path) wb.save(excel_path)
# Get the calculated years array from config
starting_date = user_data.get('starting_date', '')
duration = user_data.get('duration', 36)
calculated_years = []
# Import datetime at the module level to avoid scope issues
import datetime
from dateutil.relativedelta import relativedelta
# Calculate years array based on starting_date and duration
try:
# Try to parse the date, supporting both dd/mm/yyyy and dd.mm.yyyy formats
if starting_date:
if '/' in str(starting_date):
day, month, year = map(int, str(starting_date).split('/'))
elif '.' in str(starting_date):
day, month, year = map(int, str(starting_date).split('.'))
elif '-' in str(starting_date):
# Handle ISO format (yyyy-mm-dd)
date_parts = str(starting_date).split('-')
if len(date_parts) == 3:
year, month, day = map(int, date_parts)
else:
# Default to current date if format is not recognized
current_date = datetime.datetime.now()
year, month, day = current_date.year, current_date.month, current_date.day
elif isinstance(starting_date, datetime.datetime):
day, month, year = starting_date.day, starting_date.month, starting_date.year
else:
# Default to current date if format is not recognized
current_date = datetime.datetime.now()
year, month, day = current_date.year, current_date.month, current_date.day
# Create datetime object for starting date
start_date = datetime.datetime(year, month, day)
# Calculate end date (starting date + duration months - 1 day)
end_date = start_date + relativedelta(months=duration-1)
# Create a set of years (to avoid duplicates)
years_set = set()
# Add starting year
years_set.add(start_date.year)
# Add ending year
years_set.add(end_date.year)
# If there are years in between, add those too
for y in range(start_date.year + 1, end_date.year):
years_set.add(y)
# Convert set to sorted list
calculated_years = sorted(list(years_set))
print(f"Calculated years for sheet visibility: {calculated_years}")
else:
# Default to current year if no starting date
calculated_years = [datetime.datetime.now().year]
except Exception as e:
print(f"Error calculating years for sheet visibility: {e}")
calculated_years = [datetime.datetime.now().year]
# Update sheet names - replace {store_name} with actual store name # Update sheet names - replace {store_name} with actual store name
store_name = user_data.get('store_name', '') store_name = user_data.get('store_name', '')
if store_name: if store_name:
@@ -130,8 +193,21 @@ def update_excel_variables(excel_path):
# Store the mapping # Store the mapping
sheet_name_mapping[sheet_name] = new_sheet_name sheet_name_mapping[sheet_name] = new_sheet_name
print(f"Renamed sheet '{sheet_name}' to '{new_sheet_name}'") print(f"Renamed sheet '{sheet_name}' to '{new_sheet_name}'")
# Check if this is a forecast sheet and if its year is in the calculated years
# Forecast sheets have names like "2025 Forecast {store_name}"
if "Forecast" in new_sheet_name:
# Extract the year from the sheet name
try:
sheet_year = int(new_sheet_name.split()[0])
# Hide the sheet if its year is not in the calculated years
if sheet_year not in calculated_years:
sheet.sheet_state = 'hidden'
print(f"Hiding sheet '{new_sheet_name}' as year {sheet_year} is not in calculated years {calculated_years}")
except Exception as e:
print(f"Error extracting year from sheet name '{new_sheet_name}': {e}")
# Save the workbook with renamed sheets # Save the workbook with renamed and hidden sheets
wb.save(excel_path) wb.save(excel_path)
# Use direct XML modification to replace all instances of {store_name} in formulas # Use direct XML modification to replace all instances of {store_name} in formulas