Subversion Repositories VORC

Rev

Rev 173 | Rev 236 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
124 - 1
#!/usr/bin/perl
2
 
159 - 3
$ENV{SERVER_NAME} = "volunteers.rollercon.com";
4
warn "Server Name: ".$ENV{SERVER_NAME};
5
 
124 - 6
use strict;
7
use cPanelUserConfig;
8
use RollerCon;
9
use WebDB;
10
 
11
my $dbh = WebDB::connect ();
12
my $tmpdir = "/tmp/";
13
my $DEBUG = 0;
14
 
15
my $inputfile = shift // "";
16
 
17
if ($inputfile) {
18
	process_file ($inputfile);
173 - 19
	add_wrstbnd_ids ();
124 - 20
} else {
21
	error ("No input file specified.");
22
}
23
 
24
$dbh->disconnect ();
25
 
26
 
27
 
28
sub process_file  {
29
	my $uploadedfile = shift or error ("No file passed to 'process_file()'");
30
	my @errors = ();
31
  my $mime_type;
32
  my $serve_url;
33
 
34
  logit (0, "Bulk Uploaded MVP Passes from file $uploadedfile");
35
 
36
  print "Processing file [$uploadedfile]...\n" if $DEBUG;
37
  open(INPUT, $uploadedfile) or error ("Could not open file [$uploadedfile]!");
38
 
39
  my @columnlabels = split /,/, <INPUT>;
40
  @columnlabels = map { s/[^\x00-\x7f]//g; WebDB::trim ($_) } @columnlabels;
41
  error ("File not read!") unless scalar @columnlabels;
42
#  pop @columnlabels;
43
 
44
#  my @AcceptableColumns = qw(event_name order_date ticket_type id first_name last_name email derby_name);
45
#  @columnlabels = @AcceptableColumns;
46
 
47
  my $fields = join ", ", qw(event_name order_date ticket_type id first_name last_name email derby_name);
48
  my $values = join ", ", map { '?' } 0..7;
49
  my $sth = $dbh->prepare ("replace into ticket ($fields) values ($values)");
50
 
51
  while (<INPUT>) {
52
    chomp;
53
 
54
    my @R = map { s/[^\x00-\x7f]//g; WebDB::trim ($_) } split /,/;
55
 
56
    my %mvpticket;
57
    @mvpticket{@columnlabels} = @R;
58
 
59
    delete_ticket($mvpticket{'Registration Number'}) and next unless $mvpticket{'Cancelled'} eq "FALSE"; #actually... if a ticket is cancelled, I should delete it and unmatch.
60
 
61
    # Fix date format for MySQL: 11/23/2022 15:49
62
    if ($mvpticket{'Order Date'} !~ /\d{4}-\d{2}-\d{2} \d{1,2}:\d{2}/) {
63
      my ($date, $time) = split / /, $mvpticket{'Order Date'};
64
      my ($m, $d, $y) = split /\//, $date;
65
      $mvpticket{'Order Date'} = "$y-$m-$d $time";
66
    }
67
 
68
    print "inserting: ", join (" ", @R), "\n" if $DEBUG;
69
    $sth->execute ( $mvpticket{'Event Name'}, $mvpticket{'Order Date'}, $mvpticket{'Ticket Type'}, $mvpticket{'Registration Number'}, $mvpticket{'Attendee First Name'}, $mvpticket{'Attendee Last Name'}, $mvpticket{'Attendee Email'}, $mvpticket{'Attendee Skate Name'} ) or error($sth->errstr);
70
  }
71
  print "DONE!\n\n" if $DEBUG;
72
 
73
  print "Updating RCid -> MVP Ticket links... " if $DEBUG;
74
  $dbh->do ("replace into RCid_ticket_link select official.RCid, id, year(now()) from official join v_ticket on official.email = v_ticket.email and official.real_name = v_ticket.full_name");
75
  print "DONE!\n\n" if $DEBUG;
76
}
77
 
78
sub delete_ticket {
79
  my $badticket = shift // error ("delete_ticket() called without a target ticket!");
80
 
81
  print "DELETING: ", $badticket, " (ticket cancelled)\n" if $DEBUG;
82
  $dbh->do ("delete from ticket where id = ?", undef, $badticket);
83
  $dbh->do ("delete from RCid_ticket_link where year = year(now()) and MVPid = ?", undef, $badticket);
84
}
85
 
86
sub error {
87
	my $msg = shift;
88
	logit (0, "Problem with Bulk MVP Pass upload: ".$msg);
89
	print "Error: $msg\n";
90
	exit (1);
91
}
173 - 92
 
93
sub add_wrstbnd_ids {
94
  use REST::Client;
95
  use JSON;
96
 
97
  my $sth = $dbh->prepare ("update ticket set wrstbnd_accountid = ? where id = ?");
98
  my @REGIDS;
235 - 99
  push @REGIDS, map { @{$_} } @{ $dbh->selectall_arrayref ("select id from ticket where event_name = ? and isnull(wrstbnd_accountid) = 1", undef, "RollerCon 2025") };
173 - 100
  foreach (@REGIDS) {
101
    my $regid = $_;
102
  	my $wbdid = getAccountId ($regid);
103
  	$sth->execute ($wbdid, $regid);
104
  }
105
}
106
 
107
sub getAccountId {
108
	my $eventsReg = shift // "";
109
	warn "ERROR: No Events.com Regstration provided to getAccountId()!" and return "" unless $eventsReg;
110
 
111
	my $headers = { Authorization => '601037851507c624' };
235 - 112
	my $wb_event_id = "event_893C6u5olU";
173 - 113
	my $client = REST::Client->new();
114
 
115
	$client->setHost('https://core.wrstbnd.io');
116
	$client->GET(
117
    '/rest/core/v1/ticket?eventid='.$wb_event_id.'&barcode='.$eventsReg,
118
    $headers
119
	);
120
	my $response = from_json($client->responseContent());
121
 
122
	return $response->{accountId};
123
}