From a52e6a70a1a6f85727a322b57d21cc109ec23474 Mon Sep 17 00:00:00 2001 From: Stuart Griffiths Date: Sun, 31 Jul 2022 18:34:03 +0100 Subject: [PATCH] Added wood badge completion reporting --- convert_csv_xlsx.py | 151 +++++++++++++++++++++++-- run_reports.sh | 1 + wood_badge_reports.py | 253 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 393 insertions(+), 12 deletions(-) create mode 100644 wood_badge_reports.py diff --git a/convert_csv_xlsx.py b/convert_csv_xlsx.py index 322d13b..0d91594 100644 --- a/convert_csv_xlsx.py +++ b/convert_csv_xlsx.py @@ -4,8 +4,8 @@ #Licence: GPL-3.0-or-later #Written by Stuart Griffiths, stuart.griffiths@birminghamscouts.org.uk #Started 02/07/2022 -#Version:0.1 -#Released: 02/07/2022 +#Version:0.2 +#Released: 31/07/2022 #Status: Working #Inputs: CSVs #Outputs: XLSXs, zip files, folder @@ -483,7 +483,113 @@ def convert_csv_xlsx(): csv_destination = csv_folder + '/' + str(file_title + '.csv') shutil.move(file_name, csv_destination) - #6 - General + #6 - Woodbadge Reports + #get paths and file name + file_title = 'county_woodbadge_training' + folder_name = county_folder + file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') + #convert to xlsx + read_file = pd.read_csv(file_name) + file_name_xlsx = file_title + '.xlsx' + read_file.to_excel(file_name_xlsx, index = None, header = True) + #move file to the right place + file_name_destination = folder_name + '/' + file_name_xlsx + shutil.move(file_name_xlsx, file_name_destination) + #move the CSV to the right place + csv_destination = csv_folder + '/' + str(file_title + '.csv') + shutil.move(file_name, csv_destination) + + #get paths and file name + file_title = 'CVS_woodbadge_training' + folder_name = CVS_folder + file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') + #convert to xlsx + read_file = pd.read_csv(file_name) + file_name_xlsx = file_title + '.xlsx' + read_file.to_excel(file_name_xlsx, index = None, header = True) + #move file to the right place + file_name_destination = folder_name + '/' + file_name_xlsx + shutil.move(file_name_xlsx, file_name_destination) + #move the CSV to the right place + csv_destination = csv_folder + '/' + str(file_title + '.csv') + shutil.move(file_name, csv_destination) + + #get paths and file name + file_title = 'rea_woodbadge_training' + folder_name = rea_folder + file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') + #convert to xlsx + read_file = pd.read_csv(file_name) + file_name_xlsx = file_title + '.xlsx' + read_file.to_excel(file_name_xlsx, index = None, header = True) + #move file to the right place + file_name_destination = folder_name + '/' + file_name_xlsx + shutil.move(file_name_xlsx, file_name_destination) + #move the CSV to the right place + csv_destination = csv_folder + '/' + str(file_title + '.csv') + shutil.move(file_name, csv_destination) + + #get paths and file name + file_title = 'SCE_woodbadge_training' + folder_name = SCE_folder + file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') + #convert to xlsx + read_file = pd.read_csv(file_name) + file_name_xlsx = file_title + '.xlsx' + read_file.to_excel(file_name_xlsx, index = None, header = True) + #move file to the right place + file_name_destination = folder_name + '/' + file_name_xlsx + shutil.move(file_name_xlsx, file_name_destination) + #move the CSV to the right place + csv_destination = csv_folder + '/' + str(file_title + '.csv') + shutil.move(file_name, csv_destination) + + #get paths and file name + file_title = 'SCW_woodbadge_training' + folder_name = SCW_folder + file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') + #convert to xlsx + read_file = pd.read_csv(file_name) + file_name_xlsx = file_title + '.xlsx' + read_file.to_excel(file_name_xlsx, index = None, header = True) + #move file to the right place + file_name_destination = folder_name + '/' + file_name_xlsx + shutil.move(file_name_xlsx, file_name_destination) + #move the CSV to the right place + csv_destination = csv_folder + '/' + str(file_title + '.csv') + shutil.move(file_name, csv_destination) + + #get paths and file name + file_title = 'spitfire_woodbadge_training' + folder_name = spitfire_folder + file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') + #convert to xlsx + read_file = pd.read_csv(file_name) + file_name_xlsx = file_title + '.xlsx' + read_file.to_excel(file_name_xlsx, index = None, header = True) + #move file to the right place + file_name_destination = folder_name + '/' + file_name_xlsx + shutil.move(file_name_xlsx, file_name_destination) + #move the CSV to the right place + csv_destination = csv_folder + '/' + str(file_title + '.csv') + shutil.move(file_name, csv_destination) + + #get paths and file name + file_title = 'tame_woodbadge_training' + folder_name = tame_folder + file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') + #convert to xlsx + read_file = pd.read_csv(file_name) + file_name_xlsx = file_title + '.xlsx' + read_file.to_excel(file_name_xlsx, index = None, header = True) + #move file to the right place + file_name_destination = folder_name + '/' + file_name_xlsx + shutil.move(file_name_xlsx, file_name_destination) + #move the CSV to the right place + csv_destination = csv_folder + '/' + str(file_title + '.csv') + shutil.move(file_name, csv_destination) + + #7 - General file_title = 'due_mandatory_training' folder_name = working_folder file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') @@ -540,7 +646,21 @@ def convert_csv_xlsx(): csv_destination = csv_folder + '/' + str(file_title + '.csv') shutil.move(file_name, csv_destination) - #7 - Stats files + file_title = 'woodbadge_report' + folder_name = working_folder + file_name = str(Path.cwd()) + '/' + str(file_title + '.csv') + #convert to xlsx + read_file = pd.read_csv(file_name) + file_name_xlsx = file_title + '.xlsx' + read_file.to_excel(file_name_xlsx, index = None, header = True) + #move file to the right place + file_name_destination = folder_name + '/' + file_name_xlsx + shutil.move(file_name_xlsx, file_name_destination) + #move the CSV to the right place + csv_destination = csv_folder + '/' + str(file_title + '.csv') + shutil.move(file_name, csv_destination) + + #8 - Stats files file_title = '_GDPR_statistics.txt' folder_name = working_folder @@ -556,15 +676,22 @@ def convert_csv_xlsx(): file_name_destination = folder_name + '/' + file_title shutil.move(file_name, file_name_destination) - #7 - zip files + file_title = '_woodbadge_statistics.txt' + folder_name = working_folder + file_name = str(Path.cwd()) + '/' + str(file_title) + #move file to the right place + file_name_destination = folder_name + '/' + file_title + shutil.move(file_name, file_name_destination) + + #9 - zip files #make list of files to zip - county_list = [str(county_folder) + '/' + 'county_due_mandatory_training.xlsx', str(county_folder) + '/' + 'county_late_mandatory_training.xlsx', str(county_folder) + '/' + 'county_missing_training.xlsx', str(county_folder) + '/' + 'county_GDPR.xlsx'] - CVS_list = [str(CVS_folder) + '/' + 'CVS_due_mandatory_training.xlsx', str(CVS_folder) + '/' + 'CVS_late_mandatory_training.xlsx', str(CVS_folder) + '/' + 'CVS_missing_training.xlsx', str(CVS_folder) + '/' + 'CVS_GDPR.xlsx'] - rea_list = [str(rea_folder) + '/' + 'rea_due_mandatory_training.xlsx', str(rea_folder) + '/' + 'rea_late_mandatory_training.xlsx', str(rea_folder) + '/' + 'rea_missing_training.xlsx', str(rea_folder) + '/' + 'rea_GDPR.xlsx'] - SCE_list = [str(SCE_folder) + '/' + 'SCE_due_mandatory_training.xlsx', str(SCE_folder) + '/' + 'SCE_late_mandatory_training.xlsx', str(SCE_folder) + '/' + 'SCE_missing_training.xlsx', str(SCE_folder) + '/' + 'SCE_GDPR.xlsx'] - SCW_list = [str(SCW_folder) + '/' + 'SCW_due_mandatory_training.xlsx', str(SCW_folder) + '/' + 'SCW_late_mandatory_training.xlsx', str(SCW_folder) + '/' + 'SCW_missing_training.xlsx', str(SCW_folder) + '/' + 'SCW_GDPR.xlsx'] - spitfire_list = [str(spitfire_folder) + '/' + 'spitfire_due_mandatory_training.xlsx', str(spitfire_folder) + '/' + 'spitfire_late_mandatory_training.xlsx', str(spitfire_folder) + '/' + 'spitfire_missing_training.xlsx', str(spitfire_folder) + '/' + 'spitfire_GDPR.xlsx'] - tame_list = [str(tame_folder) + '/' + 'tame_due_mandatory_training.xlsx', str(tame_folder) + '/' + 'tame_late_mandatory_training.xlsx', str(tame_folder) + '/' + 'tame_missing_training.xlsx', str(tame_folder) + '/' + 'tame_GDPR.xlsx'] + county_list = [str(county_folder) + '/' + 'county_due_mandatory_training.xlsx', str(county_folder) + '/' + 'county_late_mandatory_training.xlsx', str(county_folder) + '/' + 'county_missing_training.xlsx', str(county_folder) + '/' + 'county_GDPR.xlsx', str(county_folder) + '/' + 'county_woodbadge_training.xlsx'] + CVS_list = [str(CVS_folder) + '/' + 'CVS_due_mandatory_training.xlsx', str(CVS_folder) + '/' + 'CVS_late_mandatory_training.xlsx', str(CVS_folder) + '/' + 'CVS_missing_training.xlsx', str(CVS_folder) + '/' + 'CVS_GDPR.xlsx', str(CVS_folder) + '/' + 'CVS_woodbadge_training.xlsx'] + rea_list = [str(rea_folder) + '/' + 'rea_due_mandatory_training.xlsx', str(rea_folder) + '/' + 'rea_late_mandatory_training.xlsx', str(rea_folder) + '/' + 'rea_missing_training.xlsx', str(rea_folder) + '/' + 'rea_GDPR.xlsx', str(rea_folder) + '/' + 'rea_woodbadge_training.xlsx'] + SCE_list = [str(SCE_folder) + '/' + 'SCE_due_mandatory_training.xlsx', str(SCE_folder) + '/' + 'SCE_late_mandatory_training.xlsx', str(SCE_folder) + '/' + 'SCE_missing_training.xlsx', str(SCE_folder) + '/' + 'SCE_GDPR.xlsx', str(SCE_folder) + '/' + 'SCE_woodbadge_training.xlsx'] + SCW_list = [str(SCW_folder) + '/' + 'SCW_due_mandatory_training.xlsx', str(SCW_folder) + '/' + 'SCW_late_mandatory_training.xlsx', str(SCW_folder) + '/' + 'SCW_missing_training.xlsx', str(SCW_folder) + '/' + 'SCW_GDPR.xlsx', str(SCW_folder) + '/' + 'SCW_woodbadge_training.xlsx'] + spitfire_list = [str(spitfire_folder) + '/' + 'spitfire_due_mandatory_training.xlsx', str(spitfire_folder) + '/' + 'spitfire_late_mandatory_training.xlsx', str(spitfire_folder) + '/' + 'spitfire_missing_training.xlsx', str(spitfire_folder) + '/' + 'spitfire_GDPR.xlsx', str(spitfire_folder) + '/' + 'spitfire_woodbadge_training.xlsx'] + tame_list = [str(tame_folder) + '/' + 'tame_due_mandatory_training.xlsx', str(tame_folder) + '/' + 'tame_late_mandatory_training.xlsx', str(tame_folder) + '/' + 'tame_missing_training.xlsx', str(tame_folder) + '/' + 'tame_GDPR.xlsx', str(tame_folder) + '/' + 'tame_woodbadge_training.xlsx'] #zip away pyminizip.compress_multiple(county_list, [], str(working_folder) + '/' + "county.zip", "BhamSc@uts", 1) pyminizip.compress_multiple(CVS_list, [], str(working_folder) + '/' + "CVS.zip", "BhamSc@uts", 1) diff --git a/run_reports.sh b/run_reports.sh index 28411ff..940dc35 100755 --- a/run_reports.sh +++ b/run_reports.sh @@ -4,4 +4,5 @@ python3 appointments_training_reports.py python3 training_reports.py +python3 wood_badge_reports.py python3 convert_csv_xlsx.py diff --git a/wood_badge_reports.py b/wood_badge_reports.py new file mode 100644 index 0000000..40b52b4 --- /dev/null +++ b/wood_badge_reports.py @@ -0,0 +1,253 @@ +#! python3 +#wood_badge_reports.py +#A tool to process Compass Records and produce something human readable +#Licence: GPL-3.0-or-later +#Written by Stuart Griffiths, stuart.griffiths@birminghamscouts.org.uk +#Started 31/07/2022 +#Version:0.1 +#Released: 31/07/2022 +#Status: Working +#Inputs: CSV +#Outputs: multiple CSV +#Next Steps: +#Issues: +#Background IP: https://automatetheboringstuff.com/, Chapter 16 + +#Notes - CSV Column Numbers +#Membership_Number = 0 +#Surname = 2 +#Known_As = 3 +#Email = 4 +#Member_Role = 5 +#Roll_Status = 6 +#Roll_Start_Date = 7 +#Review_Date = 8 +#Wood_badge_received_date = 9 +#District = 12 +#Scout_Group = 14 +#Training_Module = 16 +#Module_Validated_On = 17 +#Module_Renewal_Date = 20 + +#Libraries +import os #Enables file IO +from pathlib import Path #to work out current working directory +import csv #required to handle csv files +import datetime #required to deal with dates for due items +from dateutil.relativedelta import relativedelta #required to calculate 6 months later + +#1. Set up Output files +#CSV +woodbadge_file = open('woodbadge_report.csv', 'w', newline='') +woodbadge = csv.writer(woodbadge_file) +woodbadge.writerow(['Membership Number', 'Known Name', 'Surname', 'E-Mail', 'Role', 'Group', 'District', 'Role Start Date', 'Wood Badge Received Date']) + +#text files +woodbadge_statistics_file = open('_woodbadge_statistics.txt', 'w') + +#Modules +def training_report(): + #2. Open the file + file_name = str(Path.cwd()) + '/' + str('CountyTrainingv1.csv') + input_file = open(file_name) #assumes file is in working directory + #Create a list using the CSV file + input_data_reader = csv.reader(input_file) + input_data = list(input_data_reader) + #Set up lists + total_woodbadge_list = [] + county_woodbadge_list = [] + CVS_woodbadge_list = [] + rea_woodbadge_list = [] + spitfire_woodbadge_list = [] + SCE_woodbadge_list = [] + SCW_woodbadge_list = [] + tame_woodbadge_list = [] + role_woodbadge = ["District Explorer Scout Commissioner", "Assistant Group Scout Leader", "Group Scout Leader", "Section Leader - Beaver Scouts", "Section Leader - Cub Scouts", "Section Leader - Scouts", "Section Leader - Squirrel Scouts", "District Section Leader - Explorer Scouts", "Section Leader - Explorer Scouts", "Assistant Section Leader - Beaver Scouts", "Assistant Section Leader - Cub Scouts", "Assistant Section Leader - Scouts", "District Assitant Section Leader - Explorer Scouts", "Assitant Section Leader - Explorer Scouts", "Assitant Section Leader - Squirrel Scouts", "District Deputy Commissioner", "District Commissioner", "County Deputy Commissioner", "County Commissioner", "District Section Leader - Explorer Scouts (Yng Leader)", "District Assistant Commissioner - Special Needs", "Assistant Section Leader", "District Asst Commiss (Section) - Beaver Scouts", "District Deputy Commissioner", "Assistant County Commissioner International", "Assistant District Commissioner (Section Support) - Beaver Scouts", "Assistant District Commissioner (Section Support) - Cub Scouts", "Assistant District Commissioner (Section Support) - Squirrel Scouts", "Assistant District Commissioner (Section)", "Assistant District Commissioner (Section) - Beaver Scouts", "Assistant District Commissioner (Section) - Scouts", "Section Assistant - Cub Scouts, Beaver Scouts", "District Section Leader", "District Section Leader - Squirrel Scouts", "District Section Leader - Beaver Scouts", "District Section Leader - Cub Scouts", "District Section Leader - Scouts", "District Leader", "District Deputy Commissioner - Adult Support", "District Commissioner", "District Asst Commissioner (Section) - Cub Scouts", "District Asst Commiss (Section) - Beaver Scouts", "District Assistant Commissioner (Section) - Scouts", "District Assistant Commissioner - Support", "District Assistant Commissioner - Special Needs", "District Assistant Commissioner - Special Needs", "District Assistant Commissioner", "Deputy Group Scout Leader", "County Scouter - Scouts", "County Scouter - Explorer Scouts", "County Scouter", "County Leader - Squirrel Scouts", "County Deputy Commissioner - Programme", "County Deputy Commissioner - Adult Support", "County Deputy Commissioner", "County Commissioner", "County Assistant Commissioner International", "County Assistant Commissioner (Section) - Scouts", "County Assistant Commissioner (Section) - Scout Network", "County Assistant Commissioner (Section) - Explorer Scouts", "County Assistant Commissioner (Section) - Cub Scouts", "County Assistant Commissioner (Section) - Beaver Scouts", "County Assistant Commissioner - Support, Communications", "County Assistant Commissioner - Support", "County Assistant Commissioner - Programme", "County Assistant Commissioner - Inclusion", "County Assistant Commissioner - Communications", "County Assistant Commissioner - Activities", "Assistant Section Leader", "Assistant Group Scout Leader - Support", "Assistant Group Scout Leader"] + + #3. Process the data + #Start at row 4 for the OSM output + line_num = int(4) #strips header out + #Ensure we start writing at row 2 + row_num_missing = 2 + row_num_late = 2 + row_num_due = 2 + row_num_started = 2 + while line_num < (len(input_data)-4): #while there is an entry to handle, do this + #3.1. Test 1 - Should the role have a Woodbadge? + #Read the column + role = input_data[line_num][5] + #Check - Is it in the list? + if role in role_woodbadge: + #check if wood badge awarded + woodbadge_awarded = input_data[line_num][9] + if woodbadge_awarded == "": + woodbadge_missing = True + else: + woodbadge_missing = False + #check if over 3 years since role start date + #Determine role start date + role_start = datetime.datetime.strptime(input_data[line_num][7], "%d/%m/%Y") + #Establish comparative date - set at 3 years as per POR + _3years_later = role_start + relativedelta(years=+3) + #Get today's date + today1 = str(datetime.date.today()) + today = datetime.datetime.strptime(today1, "%Y-%m-%d") #dodgy work around comparing datetime to date object error + #Compare the role start + if today >_3years_later: + #if 3 years after role start is less than today, must be more than 3 years since role start + role_late = True + else: + role_late = False + #We now need to do stuff as we have identified if the wood badge is late + if woodbadge_missing == True and role_late == True: + #check if already flagged + member_number = input_data[line_num][0] + #check whether membership number is in the index and add it if not + try: + x = total_woodbadge_list.index(member_number) + #if it is, nothing happens + except: + #this executes if the membership number is not in the list + total_woodbadge_list.append(member_number) + #now we can add details to the list + #If blank, add to list using known_name, surname, email, member_role, group, district, training module + woodbadge.writerow([input_data[line_num][0], input_data[line_num][3], input_data[line_num][2], input_data[line_num][4], input_data[line_num][5], input_data[line_num][14], input_data[line_num][12], input_data[line_num][7], input_data[line_num][9]]) + #Split into districts + district_name = input_data[line_num][12] + if district_name == '': + county_woodbadge_list.append(member_number) + if district_name == 'Cole Valley South': + CVS_woodbadge_list.append(member_number) + if district_name == 'Rea Valley': + rea_woodbadge_list.append(member_number) + if district_name == 'Birmingham Spitfire District Scout Association': + spitfire_woodbadge_list.append(member_number) + if district_name == 'Sutton Coldfield East': + SCE_woodbadge_list.append(member_number) + if district_name == 'Sutton Coldfield West': + SCW_woodbadge_list.append(member_number) + if district_name == 'Tame Valley Birmingham': + tame_woodbadge_list.append(member_number) + line_num = line_num + 1 #continues the loop + + #3.3 Produce the statistics file + woodbadge_statistics_file.write('Statistics File for Overdue Wood Badges Reports\n') + woodbadge_statistics_file.write('====================================\n') + woodbadge_statistics_file.write('\n') + woodbadge_statistics_file.write('Leaders which need to complete at least 1 wood badge: ' + str(len(total_woodbadge_list))+'\n') + woodbadge_statistics_file.write('\n') + woodbadge_statistics_file.write('County Roles\n') + woodbadge_statistics_file.write('============\n') + woodbadge_statistics_file.write('Leaders which need to complete at least 1 wood badge: ' + str(len(county_woodbadge_list))+'\n') + woodbadge_statistics_file.write('\n') + woodbadge_statistics_file.write('Cole Valley South Roles\n') + woodbadge_statistics_file.write('=======================\n') + woodbadge_statistics_file.write('Leaders which need to complete at least 1 wood badge: ' + str(len(CVS_woodbadge_list))+'\n') + woodbadge_statistics_file.write('\n') + woodbadge_statistics_file.write('Rea Valley Roles\n') + woodbadge_statistics_file.write('================\n') + woodbadge_statistics_file.write('Leaders which need to complete at least 1 wood badge: ' + str(len(rea_woodbadge_list))+'\n') + woodbadge_statistics_file.write('\n') + woodbadge_statistics_file.write('Spitfire Roles\n') + woodbadge_statistics_file.write('==============\n') + woodbadge_statistics_file.write('Leaders which need to complete at least 1 wood badge: ' + str(len(spitfire_woodbadge_list))+'\n') + woodbadge_statistics_file.write('\n') + woodbadge_statistics_file.write('Sutton Coldfield East Roles\n') + woodbadge_statistics_file.write('===========================\n') + woodbadge_statistics_file.write('Leaders which need to complete at least 1 wood badge: ' + str(len(SCE_woodbadge_list))+'\n') + woodbadge_statistics_file.write('\n') + woodbadge_statistics_file.write('Sutton Coldfield West Roles\n') + woodbadge_statistics_file.write('===========================\n') + woodbadge_statistics_file.write('Leaders which need to complete at least 1 wood badge: ' + str(len(SCW_woodbadge_list))+'\n') + woodbadge_statistics_file.write('\n') + woodbadge_statistics_file.write('Tame Valley Roles\n') + woodbadge_statistics_file.write('===========================\n') + woodbadge_statistics_file.write('Leaders which need to complete at least 1 wood badge: ' + str(len(tame_woodbadge_list))+'\n') + woodbadge_statistics_file.write('\n') + #4: Close files to show they are done + + woodbadge_file.close() + print("Finished wood badge reports!") + +def districts_reports(): + #Runs after missing and soon due training has been listed. Produces district reports + + #County + + county_woodbadge_file = open('county_woodbadge_training.csv', 'w', newline='') + county_woodbadge = csv.writer(county_woodbadge_file) + county_woodbadge.writerow(['Membership Number', 'Known Name', 'Surname', 'E-Mail', 'Role', 'Group', 'District', 'Role Start Date', 'Wood Badge Received Date']) + + #Districts + + CVS_woodbadge_file = open('CVS_woodbadge_training.csv', 'w', newline='') + CVS_woodbadge = csv.writer(CVS_woodbadge_file) + CVS_woodbadge.writerow(['Membership Number', 'Known Name', 'Surname', 'E-Mail', 'Role', 'Group', 'District', 'Role Start Date', 'Wood Badge Received Date']) + + spitfire_woodbadge_file = open('spitfire_woodbadge_training.csv', 'w', newline='') + spitfire_woodbadge = csv.writer(spitfire_woodbadge_file) + spitfire_woodbadge.writerow(['Membership Number', 'Known Name', 'Surname', 'E-Mail', 'Role', 'Group', 'District', 'Role Start Date', 'Wood Badge Received Date']) + + SCE_woodbadge_file = open('SCE_woodbadge_training.csv', 'w', newline='') + SCE_woodbadge = csv.writer(SCE_woodbadge_file) + SCE_woodbadge.writerow(['Membership Number', 'Known Name', 'Surname', 'E-Mail', 'Role', 'Group', 'District', 'Role Start Date', 'Wood Badge Received Date']) + + SCW_woodbadge_file = open('SCW_woodbadge_training.csv', 'w', newline='') + SCW_woodbadge = csv.writer(SCW_woodbadge_file) + SCW_woodbadge.writerow(['Membership Number', 'Known Name', 'Surname', 'E-Mail', 'Role', 'Group', 'District', 'Role Start Date', 'Wood Badge Received Date']) + + rea_woodbadge_file = open('rea_woodbadge_training.csv', 'w', newline='') + rea_woodbadge = csv.writer(rea_woodbadge_file) + rea_woodbadge.writerow(['Membership Number', 'Known Name', 'Surname', 'E-Mail', 'Role', 'Group', 'District', 'Role Start Date', 'Wood Badge Received Date']) + + tame_woodbadge_file = open('tame_woodbadge_training.csv', 'w', newline='') + tame_woodbadge = csv.writer(tame_woodbadge_file) + tame_woodbadge.writerow(['Membership Number', 'Known Name', 'Surname', 'E-Mail', 'Role', 'Group', 'District', 'Role Start Date', 'Wood Badge Received Date']) + + #6. reports + #Open the file + file_name = str(Path.cwd()) + '/' + str('woodbadge_report.csv') + input_file = open(file_name) #assumes file is in working directory + #Create a list using the CSV file + input_data_reader = csv.reader(input_file) + input_data = list(input_data_reader) + + #6.2 Process the data + #start at row 2 to strip header out + line_num = int(1) + while line_num < (len(input_data)-1): #While there is an entry to handle, do something + #read District info (6) + district = input_data[line_num][6] + if district == '': + #If no district, must be county + county_woodbadge.writerow([input_data[line_num][0], input_data[line_num][1], input_data[line_num][2], input_data[line_num][3], input_data[line_num][4], input_data[line_num][5], input_data[line_num][6], input_data[line_num][7]]) + if district == 'Cole Valley South': + CVS_woodbadge.writerow([input_data[line_num][0], input_data[line_num][1], input_data[line_num][2], input_data[line_num][3], input_data[line_num][4], input_data[line_num][5], input_data[line_num][6], input_data[line_num][7]]) + if district == 'Birmingham Spitfire District Scout Association': + spitfire_woodbadge.writerow([input_data[line_num][0], input_data[line_num][1], input_data[line_num][2], input_data[line_num][3], input_data[line_num][4], input_data[line_num][5], input_data[line_num][6], input_data[line_num][7]]) + if district == 'Sutton Coldfield East': + SCE_woodbadge.writerow([input_data[line_num][0], input_data[line_num][1], input_data[line_num][2], input_data[line_num][3], input_data[line_num][4], input_data[line_num][5], input_data[line_num][6], input_data[line_num][7]]) + if district == 'Sutton Coldfield West': + SCW_woodbadge.writerow([input_data[line_num][0], input_data[line_num][1], input_data[line_num][2], input_data[line_num][3], input_data[line_num][4], input_data[line_num][5], input_data[line_num][6], input_data[line_num][7]]) + if district == 'Rea Valley': + rea_woodbadge.writerow([input_data[line_num][0], input_data[line_num][1], input_data[line_num][2], input_data[line_num][3], input_data[line_num][4], input_data[line_num][5], input_data[line_num][6], input_data[line_num][7]]) + if district == 'Tame Valley Birmingham': + tame_woodbadge.writerow([input_data[line_num][0], input_data[line_num][1], input_data[line_num][2], input_data[line_num][3], input_data[line_num][4], input_data[line_num][5], input_data[line_num][6], input_data[line_num][7]]) + + line_num = line_num + 1 + + + #8: Close the files + county_woodbadge_file.close() + CVS_woodbadge_file.close() + spitfire_woodbadge_file.close() + SCE_woodbadge_file.close() + SCW_woodbadge_file.close() + rea_woodbadge_file.close() + tame_woodbadge_file.close() + + print("Wood badge district reports finised!") + +#Program +training_report() +districts_reports()