X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=yarrg%2Fweb%2Froutetrade;h=4885782e58a440b7a773510a049daf363e5e0838;hb=66482684911b5a12a5182797de54a24c2b31c29a;hp=9fde77e7aa6783104b92fd80d636a0c0c45a970d;hpb=34203ee3033aeaa10eff8848ad869f5eeb1c789a;p=ypp-sc-tools.db-live.git diff --git a/yarrg/web/routetrade b/yarrg/web/routetrade index 9fde77e..4885782 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) = @_; @@ -85,10 +86,12 @@ foreach my $src_i (0..$#islandids) { if ($specific && !$confusing && # With a circular route, do not carry goods round the loop - !($src_i==0 && $dst_i==$#islandids && + !(($src_i==0 || $src_i==$#islandids) && + $dst_i==$#islandids && $src_isle == $islandids[$dst_i])) { if ($islandpair{$src_isle,$dst_isle}) { $confusing= 1; +print "confusing $src_i $src_isle $dst_i $dst_isle\n"; } else { $islandpair{$src_isle,$dst_isle}= [ $src_i, $dst_i ]; @@ -159,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 { @@ -188,7 +205,7 @@ $addcols->({ DoReverse => 1, SortColKey => 'MarginSortKey' }, qw( Margin )); $addcols->({ DoReverse => 1 }, - qw( unitprofit MaxQty + qw( unitprofit dist MaxQty MaxCapital MaxProfit )); @@ -261,6 +278,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, @@ -467,6 +486,7 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( + % if ($optimise) { @@ -479,6 +499,7 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( Collect Deliver Profit + Max % if ($optimise) { Planned @@ -495,6 +516,7 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( Qty Margin Unit +Dist Qty Capital Profit @@ -540,15 +562,10 @@ $addcols->({ Total => 0, DoReverse => 1 }, qw( % } -<& tabsort, cols => \@cols, table => 'trades', rowclass => 'datarow', +<&| tabsort, cols => \@cols, table => 'trades', rowclass => 'datarow', throw => 'trades_sort', tbrow => 'trades_total' &> -<&| script &> ts_sortkeys= <% to_json_protecttags(\%ts_sortkeys) %>; - function all_onload() { - ts_onload__trades(); - } - window.onload= all_onload; - + @@ -558,20 +575,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; @@ -580,6 +600,11 @@ Sail to <% $islandname |h %> next if $f->{Suppress}; next unless $f->{"${od}_id"} == $islandids[$i]; next unless $f->{OptQty}; + my $arbitrage= $f->{'org_id'} == $f->{'dst_id'}; + my $loop= $islandids[0] == $islandids[-1] && + ($i==0 || $i==$#islandids); + next if $loop and ($arbitrage ? $i : + !!$i == !!($od eq 'org')); my $price= $f->{"${od}_price"}; my $stallname= $f->{"${od}_stallname"}; my $todo= \$flowlists{$od}{ @@ -600,9 +625,7 @@ Sail to <% $islandname |h %> $$todo->{Qty} += $f->{OptQty}; $$todo->{Total}= $$todo->{Price} * $$todo->{Qty}; $$todo->{Stalls}= $f->{"${od}Stalls"}; - if ($f->{'org_id'} == $f->{'dst_id'}) { - $$todo->{"${od}Arbitrage"}= 1; - } + $$todo->{"${od}Arbitrage"}= 1 if $arbitrage; } } @@ -675,7 +698,7 @@ Sail to <% $islandname |h %> } -
+
% $iquery->execute($islandids[$i]); % my ($islandname) = $iquery->fetchrow_array(); +% my $this_dist= $distance->($islandids[$i-1],$islandids[$i]); +% $total_dist += $this_dist; % if (!$i) { -Start at <% $islandname |h %> +Start at <% $islandname |h %> % } else { -Sail to <% $islandname |h %> +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"