From bea7164cde9bc38d4eac26214b8b1b6c2ed1ff1d Mon Sep 17 00:00:00 2001 From: Stuart Griffiths Date: Sun, 2 Oct 2022 12:54:19 +0100 Subject: [PATCH] Script added to generate mailing lists for different sections --- member_list.py | 250 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 member_list.py diff --git a/member_list.py b/member_list.py new file mode 100644 index 0000000..3bd6f48 --- /dev/null +++ b/member_list.py @@ -0,0 +1,250 @@ +#! python3 +#Appointments_Training_Reports.py +#A tool to process Compass Records and produce something human readable using the appointments report +#Licence: GPL-3.0-or-later +#Written by Stuart Griffiths, stuart.griffiths@birminghamscouts.org.uk +#Started 02/10/2022 +#Version:0.1 +#Released: 02/10/2022 +#Status: Working - outputs to text files +#Inputs: CSV +#Outputs: multiple text files +#Next Steps: +#Issues: +#Background IP: https://automatetheboringstuff.com/, Chapter 16 + +#Notes - CSV Column Numbers +#Membership_Number = 0 +#Surname = 2 +#Known_As = 3 +#Email = 4 +#Telephone = 5 +#Member_Role = 8 +#Roll_Status = 11 +#Roll_Start_Date = 9 +#Line_Manager = 13 +#Review_Date = 14 +#County Section = 18 +#District = 19 +#District section = 20 +#Scout_Group = 21 +#CE check = 23 +#Advisory committee approval = 24 +#commissioner approval = 25 +#Committee approval = 26 +#References = 27 +#Wood badge = 35 +#Safety Completed = 36 +#Safety Due = 37 +#Safeguarding completed = 38 +#Safeguarding due = 39 +#First Aid Completed = 40 +#First Aid Due = 41 + +#Libraries +import os #Enables file IO +from pathlib import Path #to work out current working directory +import csv #required to handle csv files + +#1. Set up output files +#text files +member_file = open('member_list.txt', 'w') +gsl_file = open('gsl_list.txt', 'w') +squirrels_file = open('squirrels_list.txt', 'w') +beavers_file = open('beavers_list.txt', 'w') +cubs_file = open('cubs_list.txt', 'w') +scouts_file = open('scouts_list.txt', 'w') +explorers_file = open('explorers_list.txt', 'w') +network_file = open('network_list.txt', 'w') + +def reports_gen(): + #2. Open the file + file_name = str(Path.cwd()) + '/' + str('County Appointments Report (Beta).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) + + #3. Process the data + #Start at row 1 for the OSM output + line_num = int(1) #strips header out + #create lists to process + member_list = [] + gsl_list = [] + squirrels_list = [] + beavers_list = [] + cubs_list = [] + scouts_list = [] + explorers_list = [] + network_list = [] + + while line_num < (len(input_data)-1): #while there is an entry to handle, do this + + #3.1 Member list - need to exclude occasional helpers and avoid duplicates + #Required to ensure only the primary role is being processed + line_num_next = line_num + 1 + + #Read email to help filter for duplicates + + email = input_data[line_num][4] + + current_line_membership = input_data[line_num][0] + try: + next_line_membership = input_data[line_num_next][0] + except: + a= 1 + #If membership numbers are equal, we are not at primary role so want to skip to next line + #if they are not equal, we are at primary role and so want to process + if next_line_membership != current_line_membership: + #check if role contains the word occasional + role = input_data[line_num][8] + if role.find("Occasional") == -1 and email.find('@') != -1: + #Only add when occasional is not in role title + #Add member e-mail to the list + member_list.append(input_data[line_num][4]) + + #3.2 GSL list + + role = input_data[line_num][8] + if role.find("Group Scout Leader") != -1 and email.find('@') != -1 and email not in gsl_list: + #Only add when title contains "Group Scout Leader" + #Add member e-mail to the list + gsl_list.append(input_data[line_num][4]) + + #3.3 Squirrels list + + role = input_data[line_num][8] + if role.find("Squirrel") != -1 and email.find('@') != -1 and email not in squirrels_list: + #Only add when title contains variable in "" + #Add member e-mail to the list + squirrels_list.append(input_data[line_num][4]) + + #3.4 Beavers list + + role = input_data[line_num][8] + if role.find("Beaver") != -1 and email.find('@') != -1 and email not in beavers_list: + #Only add when title contains variable in "" + #Add member e-mail to the list + beavers_list.append(input_data[line_num][4]) + + #3.5 Cubs list + + role = input_data[line_num][8] + if role.find("Cub") != -1 and email.find('@') != -1 and email not in cubs_list: + #Only add when title contains variable in "" + #Add member e-mail to the list + cubs_list.append(input_data[line_num][4]) + + #3.6 Scouts list + + role = input_data[line_num][8] + #filter gets tricky here, ensure no mention of squirrels, beavers, cubs, explorers, network or gsl + if role.find("Scouts") != -1 and role.find("Group") == -1 and role.find("Squirrel") == -1 and role.find("Beaver") == -1 and role.find("Cub") == -1 and role.find("Explorer") == -1 and role.find("Network") == -1 and email.find('@') != -1 and email not in scouts_list: + #Only add when title contains variable in "" + #Add member e-mail to the list + scouts_list.append(input_data[line_num][4]) + + #3.7 Explorer list + + role = input_data[line_num][8] + if role.find("Explorer") != -1 and email.find('@') != -1 and email not in explorers_list: + #Only add when title contains variable in "" + #Add member e-mail to the list + explorers_list.append(input_data[line_num][4]) + + #3.8 Network list + + role = input_data[line_num][8] + if role.find("Network") != -1 and email.find('@') != -1 and email not in network_list: + #Only add when title contains variable in "" + #Add member e-mail to the list + network_list.append(input_data[line_num][4]) + + #to continue to next line + line_num = line_num + 1 + + #4 Output file generation + + member_file.write('Member List For Birmingham County\n') + member_file.write('=================================\n') + member_file.write('\n') + member_file.write('Number of members = ' + str(len(member_list)) + '\n') + member_file.write('\n') + for x in range(len(member_list)): + member_file.write(member_list[x]) + member_file.write('\n') + + gsl_file.write('GSL List For Birmingham County\n') + gsl_file.write('==============================\n') + gsl_file.write('\n') + gsl_file.write('Number of members = ' + str(len(gsl_list)) + '\n') + gsl_file.write('\n') + for x in range(len(gsl_list)): + gsl_file.write(gsl_list[x]) + gsl_file.write('\n') + + squirrels_file.write('Squirrel Leader List For Birmingham County\n') + squirrels_file.write('==========================================\n') + squirrels_file.write('\n') + squirrels_file.write('Number of members = ' + str(len(squirrels_list)) + '\n') + squirrels_file.write('\n') + for x in range(len(squirrels_list)): + squirrels_file.write(squirrels_list[x]) + squirrels_file.write('\n') + + beavers_file.write('Beaver Leader List For Birmingham County\n') + beavers_file.write('========================================\n') + beavers_file.write('\n') + beavers_file.write('Number of members = ' + str(len(beavers_list)) + '\n') + beavers_file.write('\n') + for x in range(len(beavers_list)): + beavers_file.write(beavers_list[x]) + beavers_file.write('\n') + + cubs_file.write('Cub Leader List For Birmingham County\n') + cubs_file.write('=====================================\n') + cubs_file.write('\n') + cubs_file.write('Number of members = ' + str(len(cubs_list)) + '\n') + cubs_file.write('\n') + for x in range(len(cubs_list)): + cubs_file.write(cubs_list[x]) + cubs_file.write('\n') + + scouts_file.write('Scout Leaders List For Birmingham County\n') + scouts_file.write('========================================\n') + scouts_file.write('\n') + scouts_file.write('Number of members = ' + str(len(scouts_list)) + '\n') + scouts_file.write('\n') + for x in range(len(scouts_list)): + scouts_file.write(scouts_list[x]) + scouts_file.write('\n') + + explorers_file.write('Explorer Leader List For Birmingham County\n') + explorers_file.write('==========================================\n') + explorers_file.write('\n') + explorers_file.write('Number of members = ' + str(len(explorers_list)) + '\n') + explorers_file.write('\n') + for x in range(len(explorers_list)): + explorers_file.write(explorers_list[x]) + explorers_file.write('\n') + + network_file.write('Network Leaders List For Birmingham County\n') + network_file.write('==========================================\n') + network_file.write('\n') + network_file.write('Number of members = ' + str(len(network_list)) + '\n') + network_file.write('\n') + for x in range(len(network_list)): + network_file.write(network_list[x]) + network_file.write('\n') + + member_file.close() + gsl_file.close() + squirrels_file.close() + beavers_file.close() + cubs_file.close() + scouts_file.close() + explorers_file.close() + network_file.close() + print("Finished producing lists.") + +reports_gen() \ No newline at end of file