@islandids
@archipelagoes
$qa
+$max_mass
+$max_volume
+$lossperleaguepct
</%args>
<&| script &>
da_pageload= Date.now();
</&script>
+% if (defined $max_mass || defined $max_volume) {
+<strong>WARNING - VESSEL CAPACITY LIMIT NOT YET IMPLEMENTED</strong>
+<p>
+% }
+% if (defined $lossperleaguepct) {
+<strong>WARNING - DEFINED LOSS PER LEAGUE NOT YET IMPLEMENTED</strong>
+<% $lossperleaguepct |h %>
+<p>
+% }
+
<%perl>
my $now= time;
my @flow_conds;
my @query_params;
+my %dists;
my $sd_condition= sub {
my ($bs, $ix) = @_;
$sth->execute(@query_params);
my @flows;
+my $distquery= $dbh->prepare("
+ SELECT dist FROM dists WHERE aiid = ? AND biid = ?
+ ");
+my $distance= sub {
+ my ($from,$to)= @_;
+ my $d= $dists{$from}{$to};
+ return $d if defined $d;
+ $distquery->execute($from,$to);
+ $d = $distquery->fetchrow_array();
+ defined $d or die "$from $to ?";
+ $dists{$from}{$to}= $d;
+ return $d;
+};
+
my @cols= ({ NoSort => 1 });
my $addcols= sub {
qw( Margin
));
$addcols->({ DoReverse => 1 },
- qw( unitprofit MaxQty
- MaxCapital MaxProfit
+ qw( unitprofit MaxQty MaxCapital MaxProfit dist
));
+foreach my $v (qw(MaxMass MaxVolume)) {
+ $addcols->({
+ DoReverse => 1, Total => 0, SortColKey => "${v}SortKey" }, $v);
+}
</%perl>
$f->{MaxProfit}= $f->{MaxQty} * $f->{'unitprofit'};
$f->{MaxCapital}= $f->{MaxQty} * $f->{'org_price'};
+ $f->{MaxMassSortKey}= $f->{MaxQty} * $f->{'unitmass'};
+ $f->{MaxVolumeSortKey}= $f->{MaxQty} * $f->{'unitvolume'};
+ foreach my $v (qw(Mass Volume)) {
+ $f->{"Max$v"}= sprintf "%.1f", $f->{"Max${v}SortKey"} * 1e-6;
+ }
+
$f->{MarginSortKey}= sprintf "%d",
$f->{'dst_price'} * 10000 / $f->{'org_price'};
$f->{Margin}= sprintf "%3.1f%%",
$f->{'dst_price'} * (1.0 - $loss_per_league) ** $f->{'dist'}
- $f->{'org_price'};
+ $dists{'org_id'}{'dst_id'}= $f->{'dist'};
+
my @uid= $f->{commodid};
foreach my $od (qw(org dst)) {
push @uid,
<p>
% if (@islandids<=1) {
-Route is trivial.
+Route contains only one location.
% }
% if (!$specific) {
Route contains archipelago(es), not just specific islands.
<colgroup span=2>
<colgroup span=2>
<colgroup span=3>
+<colgroup span=3>
% if ($optimise) {
<colgroup span=3>
% }
<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
% }
<th>Qty
<th>Capital
<th>Profit
+<th>Dist
+<th>Mass
+<th>Vol
% if ($optimise) {
<th>Qty
<th>Capital
% foreach my $ci (1..$#cols) {
% my $col= $cols[$ci];
% my $v= $flow->{$col->{Name}};
-% $col->{Total} += $v if defined $col->{Total};
+% $col->{Total} += $v
+% if defined $col->{Total} and not $flow->{Suppress};
% $v='' if !$col->{Text} && !$v;
% my $sortkey= $col->{SortColKey} ?
% $flow->{$col->{SortColKey}} : $v;
% WHERE islandid = ?');
% my %da_ages;
% my $total_total= 0;
+% my $total_dist= 0;
%
<h1>Voyage trading plan</h1>
<table rules=groups>
% foreach my $i (0..$#islandids) {
<tbody>
-<tr><td colspan=3><strong>
+<tr><td colspan=3>
% $iquery->execute($islandids[$i]);
% my ($islandname) = $iquery->fetchrow_array();
% if (!$i) {
-Start at <% $islandname |h %>
+<strong>Start at <% $islandname |h %></strong>
% } else {
-Sail to <% $islandname |h %>
+% my $this_dist= $distance->($islandids[$i-1],$islandids[$i]);
+% $total_dist += $this_dist;
+<strong>Sail to <% $islandname |h %></strong>
+- <% $this_dist |h %> leagues </td>
% }
-</strong>
<%perl>
my $age_reported= 0;
my %flowlists;
}
</%perl>
<tbody><tr>
-<td colspan=2>
+<td colspan=2>Total distance: <% $total_dist %> leagues.
<td colspan=3 align=right>Overall net cash flow
<td align=right><strong><%
$total_total < 0 ? -$total_total." loss" : $total_total." gain"