X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=yarrg%2Fweb%2Froutetrade;h=5db4c5852ec7716e7fa65f6972cb03330eb62f51;hb=4a6d70dd3122b15dd2446e7fc7ac2782f70f067f;hp=ce91b48726c40f4a59da3f5d8ad40f2204fb1e12;hpb=767e625796d67e5f5cc94d7e1949b1389f753764;p=ypp-sc-tools.db-live.git diff --git a/yarrg/web/routetrade b/yarrg/web/routetrade index ce91b48..5db4c58 100644 --- a/yarrg/web/routetrade +++ b/yarrg/web/routetrade @@ -50,6 +50,7 @@ my $loss_per_league= 1e-7; my @flow_conds; my @query_params; +my %dists; my $sd_condition= sub { my ($bs, $ix) = @_; @@ -161,6 +162,20 @@ my $sth= $dbh->prepare($stmt); $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 { @@ -190,9 +205,12 @@ $addcols->({ DoReverse => 1, SortColKey => 'MarginSortKey' }, 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); +} @@ -254,6 +272,12 @@ foreach my $f (@flows) { $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%%", @@ -263,6 +287,8 @@ foreach my $f (@flows) { $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, @@ -470,6 +496,7 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( + % if ($optimise) { % } @@ -482,6 +509,8 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( Deliver Profit Max + +Max % if ($optimise) { Planned % } @@ -500,6 +529,9 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( Qty Capital Profit +Dist +Mass +Vol % if ($optimise) { Qty Capital @@ -522,7 +554,8 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( % 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; @@ -555,20 +588,23 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( % WHERE islandid = ?'); % my %da_ages; % my $total_total= 0; +% my $total_dist= 0; %

Voyage trading plan

% foreach my $i (0..$#islandids) { - % } - <%perl> my $age_reported= 0; my %flowlists; @@ -675,7 +711,7 @@ Sail to <% $islandname |h %> } -
+
% $iquery->execute($islandids[$i]); % my ($islandname) = $iquery->fetchrow_array(); % if (!$i) { -Start at <% $islandname |h %> +Start at <% $islandname |h %> % } else { -Sail to <% $islandname |h %> +% my $this_dist= $distance->($islandids[$i-1],$islandids[$i]); +% $total_dist += $this_dist; +Sail to <% $islandname |h %> +- <% $this_dist |h %> leagues
+Total distance: <% $total_dist %> leagues. Overall net cash flow <% $total_total < 0 ? -$total_total." loss" : $total_total." gain"