{ version => '03', contest_name => 'Firecracker Sprint', contest_id => 'Firecracker-Sprint', filter => { mode => \"IN ('PSK31', 'BPSK', 'BPSK31', 'QPSK31')", band => '40M', }, defaults => { contest_url => 'http://www.podxs070.com/40-meter-firecracker-sprint', log_cols => [qw/ call qso_date time_on rst_rcvd dxccprefix state /], placeholders => [qw/ TimeZone Category Email 070-Number ADDRESS /], scoreboard_cols => [qw/ 070-number category timezone /], dropbox_options => { Category => [ 'QRP 5 watts', 'Low Power 50 watts', 'Medium Power 100 watts' ], TimeZone => [ (map {sprintf '+%02d00',$_} reverse 1 .. 12), '0000', (map {sprintf '-%02d00',$_} 1 .. 12 ), ], }, update => sub { my $row = shift; my %h; my ($offset) = $INPUT{TimeZone} =~ /(\d\d)/; $offset *= $INPUT{TimeZone} =~ /-/ ? -1 : 1; # cast to int and assign sign. my ($hr) = $row->{time_on} =~ /(\d\d)/; $hr = (24 + $hr + $offset) % 24; if ( 2 <= $hr && $hr < 20 ){ # outside of the 20:00-02:00 localtime window $h{contest_use} = "Check-log contact"; } $h{state} = 'MD' if $row->{state} =~ /^(MDC|DC)$/i; return \%h; }, Qs => [ { label => 'Contacts', weight => 1, group_by => 'call', where => {band => '40M', contest_use => 1} }, { label => "ERRORS", weight => 0, group_by => 'call,qso_date,time_on,rst_rcvd,dxcc,state, contest_use', where => { contest_use => {'!='=>1} } }, { label => "ERRORS - unknown DXCC; no mult credit", weight => 0, group_by => 'qso_date,time_on,band,call', where => {dxccprefix=>'??'} }, ], mults => [ { label => 'DXCC', group_by => 'dxccprefix' }, { label => 'States', group_by => 'state', where => {dxccprefix => [qw/K KH6 KL7/]} }, { label => 'Provinces', group_by => 'state', where => {dxccprefix => 'VE'} }, ], }, years => { 2010 => { sample => 'cd3fce68ea5efe8f0a7e6a03a27523aa', filter => { qso_date => { -between => [20100703, 20100704] }, }, closed => 1, }, 2011 => { sample => '', filter => { qso_date => { -between => [20110702, 20110703] }, }, }, }, }