chiark / gitweb /
routetrade: put trades table below voyage plan; include toc
[ypp-sc-tools.web-live.git] / yarrg / web / routetrade
index f9ebfeaf3f60fa783ce8c796090906d38c4eefc0..61484391130a9341b3b90d099c4b2889f27d0619 100644 (file)
@@ -38,10 +38,7 @@ $dbh
 @islandids
 @archipelagoes
 $qa
-$max_mass
-$max_volume
-$lossperleaguepct
-$max_capital
+$routeparams
 </%args>
 <&| script &>
   da_pageload= Date.now();
@@ -49,7 +46,8 @@ $max_capital
 
 <%perl>
 
-my $loss_per_league= defined $lossperleaguepct ? $lossperleaguepct*0.01 : 1e-7;
+my $loss_per_league= defined $routeparams->{LossPerLeaguePct}
+       ? $routeparams->{LossPerLeaguePct}*0.01 : 1e-7;
 my $loss_per_delay_slot= 1e-8;
 
 my $now= time;
@@ -468,7 +466,8 @@ foreach my $ci (0..($#islandids-1)) {
        }
 
        my $applylimit= sub {
-               my ($mv, $max, $f2val) = @_;
+               my ($mv, $f2val) = @_;
+               my $max= $routeparams->{"Max".ucfirst $mv};
                $max= 1e9 unless defined $max;
 #print " DEFINED MAX $mv $max ";
                $cplex .= "
@@ -480,9 +479,9 @@ foreach my $ci (0..($#islandids-1)) {
                " <= $max";
        };
 
-       $applylimit->('mass',   $max_mass,   sub { $_[0]{'unitmass'}  *1e-3 });
-       $applylimit->('volume', $max_volume, sub { $_[0]{'unitvolume'}*1e-3 });
-       $applylimit->('capital',$max_capital,sub { $_[0]{'org_price'}       });
+       $applylimit->('mass',    sub { $_[0]{'unitmass'}  *1e-3 });
+       $applylimit->('volume',  sub { $_[0]{'unitvolume'}*1e-3 });
+       $applylimit->('capital', sub { $_[0]{'org_price'}       });
        $cplex.= "\n";
 }
 
@@ -588,120 +587,16 @@ $addcols->({ Total => 0, DoReverse => 1, TotalSubflows => 1 }, qw(
 
 % } # ========== OPTIMISATION ==========
 
-% my %ts_sortkeys;
-% {
-%      my $cdspan= $qa->{ShowStalls} ? ' colspan=2' : '';
-%      my $cdstall= $qa->{ShowStalls} ? '<th>Stall</th>' : '';
-<table id="trades" rules=groups>
-<colgroup span=1>
-<colgroup span=2>
-<% $qa->{ShowStalls} ? '<colgroup span=2>' : '' %>
-<colgroup span=1>
-<colgroup span=2>
-<colgroup span=2>
-<colgroup span=2>
-<colgroup span=3>
-<colgroup span=3>
-%      if ($optimise) {
-<colgroup span=3>
-%      }
-<tr class="spong">
-<th>
-<th<% $cdspan %>>Collect
-<th<% $cdspan %>>Deliver
-<th>
-<th colspan=2>Collect
-<th colspan=2>Deliver
-<th colspan=2>Profit
-<th colspan=3>Max
-<th colspan=1>
-<th colspan=2>Max
-%      if ($optimise) {
-<th colspan=3>Planned
-%      }
-
-<tr>
-<th>
-<th>Island <% $cdstall %>
-<th>Island <% $cdstall %>
-<th>Commodity
-<th>Price
-<th>Qty
-<th>Price
-<th>Qty
-<th>Margin
-<th>Unit
-<th>Qty
-<th>Capital
-<th>Profit
-<th>Dist
-<th>Mass
-<th>Vol
-%      if ($optimise) {
-<th>Qty
-<th>Capital
-<th>Profit
-%      }
-% }
-
-<tr id="trades_sort">
-% foreach my $col (@cols) {
-<th>
+<h2>Contents</h2>
+<ul>
+% if ($optimise) {
+ <li><a href="#plan">Voyage trading plan</a>
+  <ul>
+   <li><a href="#summary">Summary statistics</a>
+  </ul>
 % }
-
-% foreach my $flowix (0..$#flows) {
-%      my $flow= $flows[$flowix];
-%      my $rowid= "id_row_$flow->{UidShort}";
-<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' %> >
-%      my $ci= 1;
-%      while ($ci < @cols) {
-%              my $col= $cols[$ci];
-%              my $spec= {
-%                      Span => 1,
-%                      Align => ($col->{Text} ? '' : 'align=right')
-%              };
-%              my $cn= $col->{Name};
-%              my $v;
-%              if (!$col->{TotalSubflows}) {
-%                      $v= $flow->{$cn};
-%              } else {
-%                      $v= 0;
-%                      $v += $_->{$cn} foreach @{ $flow->{Subflows} };
-%              }
-%              if ($col->{Special}) { $col->{Special}($flow,$col,$v,$spec); }
-%              $col->{Total} += $v
-%                      if defined $col->{Total} and not $flow->{Suppress};
-%              $v='' if !$col->{Text} && !$v;
-%              my $sortkey= $col->{SortColKey} ?
-%                      $flow->{$col->{SortColKey}} : $v;
-%              $ts_sortkeys{$ci}{$rowid}= $sortkey;
-<td <% $spec->{Span} ? "colspan=$spec->{Span}" : ''
- %> <% $spec->{Align}
- %>><% exists $spec->{String} ? $spec->{String} : $v |h %>
-%              $ci += $spec->{Span};
-%      }
-% }
-<tr id="trades_total">
-<th>
-<th colspan=2>Total
-% foreach my $ci (3..$#cols) {
-%      my $col= $cols[$ci];
-<td align=right>
-%      if (defined $col->{Total}) {
-<% $col->{Total} |h %>
-%      }
-% }
-</table>
-
-<&| tabsort, cols => \@cols, table => 'trades', rowclass => 'datarow',
-       throw => 'trades_sort', tbrow => 'trades_total' &>
-  ts_sortkeys= <% to_json_protecttags(\%ts_sortkeys) %>;
-</&tabsort>
-
-<input type=submit name=update value="Update">
+ <li><a href="#trades">Relevant trades</a>
+</ul>
 
 % if ($optimise) { # ========== TRADING PLAN ==========
 %
@@ -711,7 +606,8 @@ $addcols->({ Total => 0, DoReverse => 1, TotalSubflows => 1 }, qw(
 % my $total_total= 0;
 % my $total_dist= 0;
 %
-<h1>Voyage trading plan</h1>
+<h2><a name="plan">Voyage trading plan</a></h2>
+
 <table rules=groups>
 % foreach my $i (0..$#islandids) {
 <tbody>
@@ -865,13 +761,13 @@ $addcols->({ Total => 0, DoReverse => 1, TotalSubflows => 1 }, qw(
                $totals .= sprintf "%g %s", ($max-$got), $units;
                $delim= ', ';
        };
-       $domv->($max_mass,   $sail_total[$i]{mass},   'kg');
-       $domv->($max_volume, $sail_total[$i]{volume}, 'l');
+       $domv->($routeparams->{MaxMass},   $sail_total[$i]{mass},   'kg');
+       $domv->($routeparams->{MaxVolume}, $sail_total[$i]{volume}, 'l');
        $totals .= ".\n";
      }
      $show_total_now->($totals);
 }
-</%perl>
+</%perl><a name="summary"></a>
 <tbody><tr>
 <td colspan=2>Total distance: <% $total_dist %> leagues.
 <td colspan=3 align=right>Overall net cash flow
@@ -886,6 +782,122 @@ Expected average profit:
 %
 % } # ========== TRADING PLAN ==========
 
+% my %ts_sortkeys;
+% {
+%      my $cdspan= $qa->{ShowStalls} ? ' colspan=2' : '';
+%      my $cdstall= $qa->{ShowStalls} ? '<th>Stall</th>' : '';
+<h2><a name="trades">Relevant trades</a></h2>
+<table id="trades" rules=groups>
+<colgroup span=1>
+<colgroup span=2>
+<% $qa->{ShowStalls} ? '<colgroup span=2>' : '' %>
+<colgroup span=1>
+<colgroup span=2>
+<colgroup span=2>
+<colgroup span=2>
+<colgroup span=3>
+<colgroup span=3>
+%      if ($optimise) {
+<colgroup span=3>
+%      }
+<tr>
+<th>
+<th<% $cdspan %>>Collect
+<th<% $cdspan %>>Deliver
+<th>
+<th colspan=2>Collect
+<th colspan=2>Deliver
+<th colspan=2>Profit
+<th colspan=3>Max
+<th colspan=1>
+<th colspan=2>Max
+%      if ($optimise) {
+<th colspan=3>Planned
+%      }
+
+<tr>
+<th>
+<th>Island <% $cdstall %>
+<th>Island <% $cdstall %>
+<th>Commodity
+<th>Price
+<th>Qty
+<th>Price
+<th>Qty
+<th>Margin
+<th>Unit
+<th>Qty
+<th>Capital
+<th>Profit
+<th>Dist
+<th>Mass
+<th>Vol
+%      if ($optimise) {
+<th>Qty
+<th>Capital
+<th>Profit
+%      }
+% }
+
+<tr id="trades_sort">
+% foreach my $col (@cols) {
+<th>
+% }
+
+% foreach my $flowix (0..$#flows) {
+%      my $flow= $flows[$flowix];
+%      my $rowid= "id_row_$flow->{UidShort}";
+<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' %> >
+%      my $ci= 1;
+%      while ($ci < @cols) {
+%              my $col= $cols[$ci];
+%              my $spec= {
+%                      Span => 1,
+%                      Align => ($col->{Text} ? '' : 'align=right')
+%              };
+%              my $cn= $col->{Name};
+%              my $v;
+%              if (!$col->{TotalSubflows}) {
+%                      $v= $flow->{$cn};
+%              } else {
+%                      $v= 0;
+%                      $v += $_->{$cn} foreach @{ $flow->{Subflows} };
+%              }
+%              if ($col->{Special}) { $col->{Special}($flow,$col,$v,$spec); }
+%              $col->{Total} += $v
+%                      if defined $col->{Total} and not $flow->{Suppress};
+%              $v='' if !$col->{Text} && !$v;
+%              my $sortkey= $col->{SortColKey} ?
+%                      $flow->{$col->{SortColKey}} : $v;
+%              $ts_sortkeys{$ci}{$rowid}= $sortkey;
+<td <% $spec->{Span} ? "colspan=$spec->{Span}" : ''
+ %> <% $spec->{Align}
+ %>><% exists $spec->{String} ? $spec->{String} : $v |h %>
+%              $ci += $spec->{Span};
+%      }
+% }
+<tr id="trades_total">
+<th>
+<th colspan=2>Total
+% foreach my $ci (3..$#cols) {
+%      my $col= $cols[$ci];
+<td align=right>
+%      if (defined $col->{Total}) {
+<% $col->{Total} |h %>
+%      }
+% }
+</table>
+
+<&| tabsort, cols => \@cols, table => 'trades', rowclass => 'datarow',
+       throw => 'trades_sort', tbrow => 'trades_total' &>
+  ts_sortkeys= <% to_json_protecttags(\%ts_sortkeys) %>;
+</&tabsort>
+
+<input type=submit name=update value="Update">
+
 <%init>
 use CommodsWeb;
 use Commods;