X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.web-live.git;a=blobdiff_plain;f=yarrg%2Fweb%2Fquery_commod;h=052d019f998b137cd103f806c46bbbb0f3e0fd4a;hp=9a7d2bc36dc7bad67e67bfbc6c92688e6902862a;hb=2b6a88303ee81419e9583c4fc34e71f4e692a2e0;hpb=b939ad368af00f2265a915d259041b8e2cb303c4 diff --git a/yarrg/web/query_commod b/yarrg/web/query_commod index 9a7d2bc..052d019 100644 --- a/yarrg/web/query_commod +++ b/yarrg/web/query_commod @@ -52,6 +52,7 @@ my $qa= \%ARGS;

Commodity enquiry

% $prselector->('BuySell'); +% $prselector->('ShowBlank'); %#---------- textbox, user enters route as string ---------- % if (!$qa->{Dropdowns}) { @@ -88,18 +89,22 @@ $someresults->(); #---------- actually compute the results and print them ---------- +my $onloads= ""; + foreach my $bs (split /_/, $ARGS{BuySell}) { $bs =~ m/^(buy|sell)$/ or die; $bs= $1; my ($ascdesc) = ($bs eq 'buy') ? ('DESC') : ('ASC'); - + my $joinkind= $ARGS{ShowBlank} eq 'show' + ? 'LEFT OUTER JOIN' : 'INNER JOIN'; my $islands= $dbh->prepare( - "SELECT islandid, archipelago, islandname, sum(qty) as tqty - FROM $bs NATURAL JOIN islands - WHERE commodid = ? - GROUP BY islandid, + "SELECT islands.islandid AS islandid, archipelago, islandname, + sum(qty) as tqty + FROM islands $joinkind $bs offers + ON islands.islandid == offers.islandid AND commodid == ? + GROUP BY islands.islandid, ORDER BY archipelago, islandname" ); @@ -115,51 +120,108 @@ foreach my $bs (split /_/, $ARGS{BuySell}) {

Offers to <% uc $bs |h %> <% $commodname |h %>

- +
+ % $islands->execute($commodid); % my $island; +% my %ts_sortkeys; % while ($island= $islands->fetchrow_hashref) { % my $islandid= $island->{'islandid'}; % $offers->execute($commodid, $islandid); -% my ($offer, $best, $median); +% my ($offer, $bestprice, $marginal, @beststalls); % my $tqty= $island->{'tqty'}; -% my $cqty= 0; +% my $cqty= ''; +% my $bestqty= ''; +% my $approxqty= ''; +% my $median= '-'; % while ($offer= $offers->fetchrow_hashref) { -% if (!$best) { -% $best= { 'price' => $offer->{'price'} }; +% my $price= $offer->{'price'}; +% my $qty= $offer->{'qty'}; +% length $bestqty or $bestprice= $price; +% if ($price == $bestprice) { +% $bestqty += $qty; +% push @beststalls, $offer->{'stallname'}; % } -% if ($offer->{'price'} == $best->{'price'}) { -% $best->{'qty'} += $offer->{'qty'}; -% push @{ $best->{'stalls'} }, -% $offer->{'stallname'}; +% $cqty += $qty; +% if ($cqty*2 >= $tqty && $median eq '-') { +% $median= $price; % } -% $cqty += $offer->{'qty'}; -% if ($cqty*2 >= $tqty && !defined $median) { -% $median= $offer->{'price'}; +% if ($bestprice*9 <= $price*10 and +% $price*10 <= $bestprice*11) { +% $approxqty += $qty; % } % } +% my $stallname; +% +% my $rowid= "id_${bs}_$islandid"; +% my $s= [ ]; +% +% $s->[2]= sprintf "%06d", scalar @beststalls; +% if (!@beststalls) { +% $stallname= '-'; +% } elsif (@beststalls==1) { +% $stallname= $beststalls[0]; +% $s->[2] .= " $stallname"; +% } else { +% $stallname= sprintf "%d offers", scalar @beststalls; +% } +% % $cqty == $tqty or die "$bs $cqty $tqty $commodid $islandid "; -% my $nstalls= @{ $best->{'stalls'} }; - > + +% for my $cix (0..$#$s) { +% $ts_sortkeys{$cix}{$rowid}= $s->[$cix]; +% } % }
+Prices +Quantity at price +
Archipelago Island -Unique best stall -Best price -Qty at best -Median price -Total qty +Stall(s) +Best +Median +Best ++/-10% +Any
<% $island->{'archipelago'} |h %> - <% $island->{'islandname'} |h %> - <% $nstalls==1 ? $best->{'stalls'}[0] : "$nstalls offers" |h %> - <% $best->{'price'} %> - <% $best->{'qty'} %> - <% $median %> - <% $tqty %> +
<% $s->[0]= $island->{'archipelago'} |h %> + <% $s->[1]= $island->{'islandname'} |h %> + <% $stallname |h %> + <% $s->[3]= (length $bestqty ? $bestprice : '-') %> + <% $s->[4]= $median %> + <% $s->[5]= $bestqty %> + <% $s->[6]= $approxqty %> + <% $s->[7]= $cqty %>
+<& tabsort, table => "${bs}_table", sortkeys => "${bs}_sortkeys", + throw => "${bs}_table_thr", cols => [ + {}, {}, + { DoReverse => 1 }, + { DoReverse => 1, Numeric => 1, MapFn => "ts_Pricemap_${bs}" }, + { DoReverse => 1, Numeric => 1, MapFn => "ts_Pricemap_${bs}" }, + { DoReverse => 1, Numeric => 1 }, + { DoReverse => 1, Numeric => 1 }, + { DoReverse => 1, Numeric => 1 }, + ] &> +<&| script &> + <% $bs %>_sortkeys= <% to_json_protecttags(\%ts_sortkeys) %>; + function ts_Pricemap_<% $bs %>(price) { + if (price=='-') { return <% $bs eq 'buy' ? '-1' : '99999999' %>; } + return price; + } + +% $onloads .= " ts_onload__${bs}_table();\n"; + <%perl> } + +<&| script &> + function all_onload() { +<% $onloads %> + } + window.onload= all_onload; +