chiark / gitweb /
Trade plan; wip data age
[ypp-sc-tools.web-live.git] / yarrg / web / routetrade
index d152eed6a0f6485456340deb404546fcc4cb0620..0adf9920bbbc6bb96bd0f05ad0f7d4fa78ece764 100644 (file)
@@ -35,8 +35,6 @@
 ========== TODO ==========
 16:36 <ceb> alpha,byrne,papaya,turtle,jorvik,luthien is my example
 
-16:39 <ceb> Also, maybe colour to highlight the suggested trades?
-
 16:46 <ceb> Also trading plan not functional but I guess you know that :-)
 
 use POST for update.  Hrrm.
@@ -47,8 +45,6 @@ adjustable potential cost of losses (rather than fixed 1e-BIG per league)
 
 max volume/mass
 
-16:38 <ceb> I don't know how hard this is, but can you show only the suggested 
-            trades to start ith and have a button to show all?
 ========== TODO ==========
 
 </%doc>
@@ -119,9 +115,11 @@ my $stmt= "
        SELECT  sell_islands.islandname                         org_name,
                sell_islands.islandid                           org_id,
                sell.price                                      org_price,
+               sell_uploads.timestamp                          org_timestamp,
                buy_islands.islandname                          dst_name,
                buy_islands.islandid                            dst_id,
                buy.price                                       dst_price,
+               buy_uploads.timestamp                           dst_timestamp,
 ".($qa->{ShowStalls} ? "
                sell.stallid                                    org_stallid,
                sell_stalls.stallname                           org_stallname,
@@ -144,6 +142,8 @@ my $stmt= "
        JOIN sell ON commods.commodid = sell.commodid
        JOIN islands AS sell_islands ON sell.islandid = sell_islands.islandid
        JOIN islands AS buy_islands  ON buy.islandid  = buy_islands.islandid
+       JOIN uploads AS sell_uploads ON sell.islandid = sell_uploads.islandid
+       JOIN uploads AS buy_uploads  ON buy.islandid  = buy_uploads.islandid
 ".($qa->{ShowStalls} ? "
        JOIN stalls  AS sell_stalls  ON sell.stallid  = sell_stalls.stallid
        JOIN stalls  AS buy_stalls   ON buy.stallid   = buy_stalls.stallid
@@ -438,7 +438,7 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw(
 %      if ($optimise) {
 <colgroup span=3>
 %      }
-<tr>
+<tr class="spong">
 <th>
 <th<% $cdspan %>>Collect
 <th<% $cdspan %>>Deliver
@@ -477,9 +477,10 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw(
 <th>
 % }
 
-% foreach my $flow (@flows) {
+% foreach my $flowix (0..$#flows) {
+%      my $flow= $flows[$flowix];
 %      my $rowid= "id_row_$flow->{UidShort}";
-<tr id="<% $rowid %>">
+<tr id="<% $rowid %>" class="datarow<% $flowix & 1 %>">
 <td><input type=hidden   name=R<% $flow->{UidShort} %> value="">
     <input type=checkbox name=T<% $flow->{UidShort} %> value=""
        <% $flow->{Suppress} ? '' : 'checked' %> >
@@ -504,7 +505,7 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw(
 % }
 </table>
 
-<& tabsort, cols => \@cols, table => 'trades',
+<& tabsort, cols => \@cols, table => 'trades', rowclass => 'datarow',
        throw => 'trades_sort', tbrow => 'trades_total' &>
 <&| script &>
   ts_sortkeys= <% to_json_protecttags(\%ts_sortkeys) %>;
@@ -535,15 +536,55 @@ Sail to <% $islandname |h %>
 </strong>
 %    foreach my $od (qw(dst org)) {
 %      my $sign= $od eq 'dst' ? -1 : +1;
-%      foreach my $f (sort {
-%                      $a->{'commodname'} cmp $b->{'commodname'}
-%              or $sign * ($a->{"${od}_price"} <=> $b->{"${od}_price"})
-%              or      $a->{"${od}_stallname"} cmp $b->{"${od}_stallname"}
-%              } @flows) {
+%      my %todo;
+%      foreach my $f (@flows) {
 %              next if $f->{Suppress};
 %              next unless $f->{"${od}_id"} == $islandids[$i];
 %              next unless $f->{OptQty};
-<tr><td>Buy or sell flow 
+%              my $price= $f->{"${od}_price"};
+%              my $stallname= $f->{"${od}_stallname"};
+%              my $todo= \$todo{ $f->{'commodname'},
+%                                (sprintf "%07d", $price),
+%                                $stallname };
+%              $$todo= { } unless $$todo;
+%              $$todo->{'commodname'}= $f->{'commodname'};
+%              $$todo->{'stallname'}= $stallname;
+%              $$todo->{Price} += $price;
+%              $$todo->{Qty} += $f->{OptQty};
+%              $$todo->{Total} = $$todo->{Price} * $$todo->{Qty};
+%              $$todo->{Timestamp} = $f->{"${od}_timestamp"};
+%      }
+%      my $total= 0;
+%      my $dline= 0;
+%      foreach my $tkey (sort keys %todo) {
+%              my $t= $todo{$tkey};
+%              $total += $t->{Total};
+<tr class="datarow<% $dline %>"><td>
+%              if ($od eq 'org') {
+Collect
+%              } else {
+Deliver
+%              }
+<td><% $t->{'commodname'} |h %>
+<td align=right><% $t->{Price} |h %> each
+%              if ($qa->{ShowStalls}) {
+<td><% $t->{'stallname'} |h %>
+%              }
+<td align=right><% $t->{Qty} |h %> unit(s)
+<td align=right><% $t->{Total} |h %> total
+%              $dline ^= 1;
+%      }
+%      if (%todo) {
+<tr><td>
+<td colspan=<% 2+!!$qa->{ShowStalls} %>>
+<% (values %todo)[0]->{Timestamp} %>
+<td align=right>
+%              if ($od eq 'org') {
+Outlay
+%              } else {
+Proceeds
+%              }
+<td align=right><% $total |h %> total
 %      }
 %    }
 % }