{ version => '01', contest_name => '160 Meter Great Pumpkin Sprint', contest_id => '070-160M-Sprint', filter => { mode => \"IN ('PSK31', 'BPSK', 'BPSK31', 'QPSK31')", band => "160M", }, defaults => { contest_url => 'http://www.podxs070.com/160-meter-great-pumpkin-sprint', log_cols => [qw/ call qso_date time_on band srx dxccprefix state /], placeholders => [qw/ TimeZone ADDRESS Email Category 070-Number /], scoreboard_cols => [qw/ timezone category 070-number /], dropbox_options => { Category => [ 'QRP 5 watts', 'Low Power 50 watts', 'Medium Power 100 watts' ], TimeZone => [ (map {sprintf '-%02d00',$_} 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"; } no warnings 'uninitialized'; $h{state} = 'MD' if $row->{state} =~ /^(MDC|DC)$/i; return \%h; }, Qs => [ # { label => 'QSOs', weight => 1, group_by => 'call', where => {} }, { label => 'Contacts', weight => 1, group_by => 'call', where => {band => '160M', 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', where=>{dxccprefix=>{'!='=>'??'}} }, { label => 'States', group_by => 'state', where => {dxccprefix => [qw/K KH6 KL7/]} }, { label => 'Provinces', group_by => 'state', where => {dxccprefix => 'VE'} }, ], }, years => { 2011 => { sample => '', filter => { qso_date => { -between => [20111015, 20111016] }, }, }, }, }