From 8c2af369446a3426e9f44d398cf7225ed03f43fb Mon Sep 17 00:00:00 2001 From: tim Date: Fri, 25 Oct 2019 09:40:29 +0200 Subject: [PATCH] Final updates for 2019. --- 20191008 - Kilometre Timings.xlsx | Bin 7316 -> 0 bytes ...19 Race Route description version 2.0.docx | Bin 20835 -> 0 bytes marshalinfo.pl | 139 -------------- send_aac_maps.pl | 18 +- send_thanks.pl | 177 ++++++++++++++++++ 5 files changed, 189 insertions(+), 145 deletions(-) delete mode 100644 20191008 - Kilometre Timings.xlsx delete mode 100644 Gun Run 2019 Race Route description version 2.0.docx delete mode 100644 marshalinfo.pl create mode 100755 send_thanks.pl diff --git a/20191008 - Kilometre Timings.xlsx b/20191008 - Kilometre Timings.xlsx deleted file mode 100644 index a370531bf742e9b6c438e187a901fb367a11745b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7316 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 Hy?gpU89cRb diff --git a/Gun Run 2019 Race Route description version 2.0.docx b/Gun Run 2019 Race Route description version 2.0.docx deleted file mode 100644 index a0dc47f4f8be6c48cac6345e13ecf54fd1333860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20835 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 DtGZmk diff --git a/marshalinfo.pl b/marshalinfo.pl deleted file mode 100644 index b75a420..0000000 --- a/marshalinfo.pl +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/perl -# -# Tool to clean up marshal spreadsheet data, 2017 -# -use strict; -use warnings; - -use Data::Dumper; - - -my $clubs = { - 'AAC' => { - }, - 'Eerste Rivier' => { - 'captain' => 'Raphael Manual', - 'captain_ph' => '084-494-4525', - 'email' => 'raphaeljm1@gmail.com', - - }, - 'Spartan Harriers' => { - 'captain' => 'Gavin Craig', - 'captain_ph' => '076-569-6898', - 'email' => 'gavinc@ctpflexibles.co.za', - }, - 'Nantes' => { - 'captain' => 'Caroline Peters', - 'captain_ph' => '073-029-7879', - 'email' => 'carolinepeters1964@gmail.com', - }, - 'Midas Spartans' => { - 'captain' => 'Michael Schouw', - 'captain_ph' => '083-635-1346', - 'email' => 'schouw.za@gmail.com', - - }, - 'Edgemead Runners' => { - 'captain' => 'Stephan Roux ', - 'captain_ph' => '082-433-0230', - 'email' => 'raceconvener@edgemeaddrunners.org.za', - }, -}; - -my @marshals; - -sub assign_club { - my $position = shift; - my $club = shift; - $marshals[$position]->{'club'} = $club; - foreach my $key ( keys %{ $clubs->{$club} } ) { - $marshals[$position]->{$key} = $clubs->{$club}->{$key}; - } -} - -for ( my $position = 0; $position < 324; $position++ ) { - if ($position > 0 && $position <= 10) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = "William Ruijsch van Dugteren"; - $marshals[$position]->{'captain_ph'} = ''; - } elsif ($position > 10 && $position <= 35 ) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = "Darwees Gesant"; - } elsif ($position > 35 && $position <= 54 ) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = "Faried Rinquest"; - } elsif ($position > 54 && $position <= 69 ) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = ''; - } elsif ($position > 69 && $position <= 80 ) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = 'Colin Sedeman'; - } elsif ($position > 80 && $position <= 126 ) { - assign_club( $position, 'Eerste Rivier' ); - } elsif ($position > 126 && $position <= 127 ) { - assign_club( $position, 'Spartan Harriers' ); - } elsif ($position > 127 && $position <= 131 ) { - assign_club( $position, 'Eerste Rivier' ); - } elsif ($position > 131 && $position <= 132 ) { - assign_club( $position, 'Spartan Harriers' ); - } elsif ($position > 132 && $position <= 153 ) { - assign_club( $position, 'Nantes' ); - } elsif ($position > 153 && $position <= 199 ) { - assign_club( $position, 'Midas Spartans' ); - } elsif ($position > 199 && $position <= 238 ) { - assign_club( $position, 'Nantes' ); - } elsif ($position > 238 && $position <= 250 ) { - assign_club( $position, 'Spartan Harriers' ); - } elsif ($position > 250 && $position <= 256 ) { - assign_club( $position, 'Spartan Harriers' ); - } elsif ($position > 256 && $position <= 257 ) { - assign_club( $position, 'Edgemead Runners' ); - } elsif ($position > 257 && $position <= 261 ) { - assign_club( $position, 'Spartan Harriers' ); - } elsif ($position > 261 && $position <= 264 ) { - assign_club( $position, 'Edgemead Runners' ); - } elsif ($position > 264 && $position <= 274 ) { - assign_club( $position, 'Spartan Harriers' ); - } elsif ($position > 274 && $position <= 281 ) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = 'Keith Bake'; - } elsif ($position > 281 && $position <= 297 ) { - assign_club( $position, 'Edgemead Runners' ); - } elsif ($position > 297 && $position <= 301 ) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = 'Colin Sedeman'; - } elsif ($position > 301 && $position <= 313 ) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = 'Keith Bake'; - } elsif ($position > 313 && $position <= 323 ) { - assign_club( $position, 'AAC' ); - $marshals[$position]->{'captain'} = 'Colin Sedeman'; - } -} - -=cut -AAC : Positions 1 to 10 Start - William Ruijsch van Dugteren -AAC : Positions 11 to 35 Darawees Gasant -AAC : positions 36 to 54 Faried Rinquest -AAC : Positions 55 to 69 may be John Damata -AAC : Positions 70 to 80, 298 to 301 and 314 to 323 - Collin Sedeman -AAC: Positions 275 to 281, and 302 to 313 - Keith Bake - -Eerste Rivier : Positions 81 to 126 and 128 to 131 (50 marshals ) - Rapheal Manual 084 494 4525 raphaeljm1@gmail.com -Nantes : Positions 133 to 153 and 200 to 238 (60 marshals ) - Caroline Peters 073 029 7879 carolinepeters1964@gmail.com -Midas Spartans : Positions 154 to 199 (47 marshals ) - Michael Schouw 083 635 1346 schouw.za*gmail.com -Spartan Harriers : Positions 239 to 250, 132 x 2, 127, 251 to 256, 258 to 261, 265 to 274 ( 35 marshals ) - Gavin Craig 076 569 6898 gavinc@ctpflexibles.co.za -Edgemead Runners : Positions 257, 262 to 265 and 282 to 297 ( 20 marshals ) - Stephan Roux 082 433 0230 raceconvener@edgemeaddrunners.org.za -=cut - -#warn Dumper(@marshals); - -print "CASE\n"; -foreach (1..$#marshals) { - my $data = $marshals[$_]->{'email'}; - print qq( - WHEN "position" = $_ - THEN '$data' - ) if $data; -} -print "END\n"; diff --git a/send_aac_maps.pl b/send_aac_maps.pl index 57b9088..4d2a20a 100755 --- a/send_aac_maps.pl +++ b/send_aac_maps.pl @@ -91,7 +91,7 @@ foreach my $person (@emails) { if ($position =~ /^(10\d|110)$/) { $position_time = "4:45AM"; } else { - $position_time = "6AM"; + $position_time = "5:45AM"; } # if ($position =~ /^(26|27)$/i) { @@ -106,6 +106,8 @@ foreach my $person (@emails) { my $pdf = $pdf_dir . $club . '_marshal_map_' . $position . '.pdf'; my $jpg = $pdf_dir . $club . '_marshal_map_' . $position . '.jpg'; + my $parking = $map_dir . '/Gun Run 2019 - P9 Marshal Parking.pdf'; + my $directions = $map_dir . '/Gun Run 2019 - P9 Parking Access.pdf'; my $pdf_filename = basename($pdf); my $jpg_filename = basename($jpg); die "No PDF at $pdf_filename" unless -e $pdf; @@ -120,11 +122,11 @@ Dear $salutation

-Thank you for helping out at this year's Gun Run! +I believe that many marshals didn't receive their maps, so I'm re-sending to everyone. If you received your map before, please accept my apologies, along with the attached voucher for parking in P9! I've also attached a map that shows you how to get to P9: turn off Helen Suzman by the Virgin Active, turn right at the T-junction, and pass through the gate at the end of the road, onto the field in Green Point Park. Please note that you will need to print the map (security won't accept an image on your phone).

-Attached to this email is a map that gives your marshalling position. You are in position $position on the map. It's important to be in place by $position_time on the day, as the police and traffic officials will be conducting spot checks at that point, and if any marshal is not in position, they may call off the race or delay it. +Also attached to this email is a map that gives your marshalling position. You are in position $position on the map. It's important to be in place by $position_time on the day, as the police and traffic officials will be conducting spot checks at that point, and if any marshal is not in position, they may call off the race or delay it.

@@ -156,7 +158,7 @@ Tim my $plain_text = qq(Dear $salutation -Thank you for helping out at this year's Gun Run! +I believe that many marshals didn't receive their maps, so I'm re-sending to everyone. If you received your map before, please accept my apologies, along with the attached voucher for parking in P9! I've also attached a map that shows you how to get to P9: turn off Helen Suzman by the Virgin Active, turn right at the T-junction, and pass through the gate at the end of the road, onto the field in Green Point Park. Please note that you will need to print the map (security won't accept an image on your phone). Attached to this email is a map that gives your marshalling position. You are in position $position. It's important to be in place by $position_time on the day, as the police and traffic officials will be conducting spot checks at that point, and if any marshal is not in position, they may call off the race or delay it. @@ -174,12 +176,16 @@ Tim ); $pdf_filename =~ s/^.*?_//; - my %objects = ( "$pdf_filename" => $pdf ); + my %objects = ( + "$pdf_filename" => $pdf, + "Gun_Run_2019_-_P9_Marshal_Parking.pdf" => $parking, + "Gun_Run_2019_-_P9_Parking_Access.pdf" => $directions, + ); my $mail = Email::MIME->create_html( header => [ From => 'Timothy Allen ', - Subject => 'Your Gun Run 2019 marshalling position', + Subject => 'Your Gun Run 2019 marshalling position (with parking voucher)', To => $m, ], body => $html, diff --git a/send_thanks.pl b/send_thanks.pl new file mode 100755 index 0000000..3f26976 --- /dev/null +++ b/send_thanks.pl @@ -0,0 +1,177 @@ +#!/usr/bin/perl +# Debug level 0: Send email +# Debug level 1: Send email to myself +# Debug level 2: Print names and email addresses + +use strict; +use warnings; + +use Text::CSV; +use Email::MIME::CreateHTML; +use Email::Sender::Simple qw(sendmail); +use Email::Sender::Transport::SMTP; +use Email::Sender::Transport::SMTPS; +use Email::Sender::Transport::SMTP::TLS; +use Term::ReadKey; +use File::Basename; +use Try::Tiny; +use Data::Dumper; + +my $map_dir = '/home/tim/Documents/Projects/2019/Gun Run/Maps/'; +my $email_csv = "$map_dir/GIS Base Map/marshals_by_position.csv"; +my $debug = 2; +my @emails; + +if ($debug == 2) { + print "WARNING: Printing names. Not sending emails!\n"; +} elsif ($debug == 1) { + print "WARNING: Sending emails to a TEST address.\n"; +} elsif ($debug == 0) { + print "Sending emails to...\n"; +} else { + print "ERROR: Invalid debug value\n"; +} + +my $password; +if (-f "$map_dir/password_store") { + open(my $fh, '<:encoding(UTF-8)', "$map_dir/password_store") or die "Could not open password store: $!"; + while (my $row = <$fh>) { + chomp($password = $row); + } + close($fh) +} else { + print "Please type your email password: "; + #chomp($password = ); + ReadMode('noecho'); + chomp($password = ReadLine(0)); + print "\n"; + ReadMode('normal'); +} + +my $csv = Text::CSV->new ( { binary => 1 } ) or die "Cannot use CSV: ".Text::CSV->error_diag (); +open my $ifh, "<", $email_csv or die "Could not read $email_csv: $!"; +$csv->column_names($csv->getline( $ifh )); +while ( my $row = $csv->getline( $ifh ) ) { + my $person = { + "position" => $row->[0], + "club" => $row->[1], + "first_name" => $row->[2], + "name" => $row->[4], + "email" => $row->[6], + }; + $person->{"name"} =~ s/ +$//g if $person->{"name"}; + $person->{"name"} =~ s/ +/ /g if $person->{"name"}; + $person->{"first_name"} =~ s/ +$//g if $person->{"first_name"}; + $person->{"first_name"} =~ s/ +/ /g if $person->{"first_name"}; + $person->{"email"} =~ s/,//g if $person->{"email"}; + push @emails, $person; +} +$csv->eof or $csv->error_diag(); +close $ifh; + +#@emails = sort { $a->{"position"} cmp $b->{"position"} } @emails; +if ($ARGV[0]) { + my $pos = $ARGV[0]; + @emails = grep { $_->{"position"} =~ /^$pos$/ } @emails; +} +#print Dumper(@emails); + +foreach my $person (@emails) { + next unless $$person{"name"} and $$person{"email"}; + next unless $$person{"club"} =~ /^(AAC)$/; + next if $$person{"position"} =~ /\D/; + my $salutation = $$person{"first_name"}; + my $name = $$person{"name"}; + my $email = $$person{"email"}; + my $club = $$person{"club"}; + next unless $email =~ /@/; + my $position = $$person{"position"}; + + foreach my $m (split(/[, ]+/, $email)) { + $m = "$name <$m>"; + printf "%-4s %-15s %15s\n", $$person{"position"}, $salutation, $m if ($debug >= 0); + $m = 'Timothy Allen ' if ($debug == 1); + + my $html = qq( + + + +

+Dear $salutation +

+ +

+A big thank you from me and from the Gun Run committee for your help marshalling today. +

+ +

+It was a very successful Gun Run, and we can all be pleased by how well the event ran. I heard a lot of compliments about the marshalling, and the race went beautifully, I thought, with very few major hiccups. +

+ +

+If you have any suggestions as to how we can improve next year, please drop me or Roger an email. +

+ +

+I hope you enjoyed the experience and will hopefully support us again next year. Until then, enjoy your running and take care out there. +

+ +

+Warm regards, +

+ +

+Tim +

+ + +); + + my $plain_text = qq(Dear $salutation + +A big thank you from me and from the Gun Run committee for your help marshalling today. + +It was a very successful Gun Run, and we can all be pleased by how well the event ran. I heard a lot of compliments about the marshalling, and the race went beautifully, I thought, with very few major hiccups. + +If you have any suggestions as to how we can improve next year, please drop me or Roger an email. + +I hope you enjoyed the experience and will hopefully support us again next year. Until then, enjoy your running and take care out there. + +Warm regards, + +Tim +); + + my $mail = Email::MIME->create_html( + header => [ + "From" => 'Timothy Allen ', + "Subject" => 'Thank you for marshalling', + "To" => $m, + "Reply-To" => 'Timothy Allen , Roger Steward ', + ], + body => $html, + text_body => $plain_text, + ); + my $g_transport = Email::Sender::Transport::SMTP::TLS->new( + host => 'smtp.gmail.com', + username => 'trallen@gmail.com', + password => $password, + ); + my $t_transport = Email::Sender::Transport::SMTP::TLS->new( + host => 'mail.treehouse.org.za', + username => 'tim', + password => $password, + ); + try { +# sendmail($mail, { transport => $g_transport }) if ($debug <= 1); + sendmail($mail, { transport => $t_transport }) if ($debug <= 1); + } catch { + warn "\n\nError sending email for position $position\n\n"; + warn $_; + }; + } + sleep 2 if ($debug < 1); + last if ($debug == 1); +} + +# vim: set expandtab shiftwidth=4 softtabstop=4 :