chiark / gitweb /
Max gems should be 24 not 25
[ypp-sc-tools.main.git] / yarrg / web / routetrade
index 9cd57122d66b8fd421fd040dc00ee45abbf66422..59b02674f1034bb82c983f803afa44e54600075b 100644 (file)
@@ -40,6 +40,7 @@ $dbh
 $qa
 $routeparams
 $reset_suppressions
+$quri
 </%args>
 <& query_age:pageload &>
 
@@ -48,6 +49,7 @@ $reset_suppressions
 my $loss_per_league= defined $routeparams->{LossPerLeaguePct}
        ? $routeparams->{LossPerLeaguePct}*0.01 : 1e-7;
 my $loss_per_delay_slot= 1e-8;
+my $max_gems= 24;
 
 my $minprofit= $routeparams->{MinProfit} || 0;
 
@@ -146,6 +148,7 @@ my $stmt= "
                commods.ordval                                  ordval,
                commods.posinclass                              posinclass,
                commods.commodclassid                           commodclassid,
+               commods.flags                                   flags,
                dist                                            dist,
                buy.price - sell.price                          unitprofit
        FROM commods
@@ -291,6 +294,8 @@ my $oppo_key= sub {
        return join '_', map { $f->{$_} } qw(org_id dst_id commodid);
 };
 
+my $any_previous_suppression= 0;
+
 foreach my $f (@flows) {
 
        $f->{MaxQty}= $f->{'org_qty_agg'} < $f->{'dst_qty_agg'}
@@ -389,6 +394,7 @@ foreach my $f (@flows) {
                }
        } else {
                if (!defined $qa->{"T$f->{UidShort}"}) {
+                       $any_previous_suppression= 1;
                        $f->{Suppress}= 1;
                }
        }
@@ -412,13 +418,24 @@ foreach my $f (@flows) {
 }
 </%perl>
 
-% my $optimise= $specific;
-% if (!$optimise) {
+% my $optimise= 1;
 
-<p>
 % if (!$specific) {
+%      $optimise= 0;
 Route contains archipelago(es), not just specific islands.
+% } elsif (!@subflows) {
+%      $optimise= 0;
+%      if ($any_previous_suppression) {
+All available trades deselected.
+%      } else {
+No available trades meet the specified minimum trade value, so
+all available trades deselected.
+%      }
 % }
+
+% if (!$optimise) {
+
+<p>
 Therefore, optimal voyage trade plan not calculated.
 
 % } else { # ========== OPTMISATION ==========
@@ -511,6 +528,14 @@ foreach my $ci (0..($#islandids-1)) {
        $applylimit->('mass',    sub { $_[0]{'unitmass'}  *1e-3 });
        $applylimit->('volume',  sub { $_[0]{'unitvolume'}*1e-3 });
        $applylimit->('capital', sub { $_[0]{'org_price'}       });
+
+       my @gem_subflows= grep { $_->{Flow}{flags} =~ m/g/ } @rel_subflows;
+       if (@gem_subflows) {
+               $cplex .= "
+   ". sprintf("%-10s","gems_$ci:")." ".
+               join(" + ", map { $_->{Var} } @gem_subflows). " <= $max_gems";
+       }
+
        $cplex.= "\n";
 }
 
@@ -735,6 +760,7 @@ Generated by YARRG at <strong><%
                        orgArbitrage => 0,
                        dstArbitrage => 0,
                } unless $$todo;
+               $$todo->{'commodid'}= $f->{'commodid'};
                $$todo->{'commodname'}= $f->{'commodname'};
                $$todo->{'posinclass'}= '';
                my $incl= $f->{'posinclass'};
@@ -822,9 +848,13 @@ END
 %              $total += $t->{Total};
 %              my $span= 0 + keys %{ $t->{Stalls} };
 %              my $td= "td rowspan=$span";
+%              my %linkqf= (%{ $qa->{'baseqf'} }, %{ $qa->{'queryqf'} });
+%              $linkqf{'query'}= 'commod';
+%              $linkqf{'commodstring'}= $t->{'commodname'};
+%              $linkqf{'commodid'}= $t->{'commodid'};
 % tr_datarow($m,$dline);
 <<% $td %>><% $collectdeliver %>
-<<% $td %>><% $t->{'commodname'} |h %>
+<<% $td %>><a href="<% $quri->(%linkqf) %>"><% $t->{'commodname'} |h %></a>
 <<% $td %>><% $t->{'posinclass'} %>
 %
 %              my @stalls= sort keys %{ $t->{Stalls} };