X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FElements%2FServiceFields;h=0fe52041c22a94af1fa6043f56570179ff5fbe1c;hb=cb28905b4bc28f3d7a1a67d14cf9c8b44fafe2d5;hp=9c9a248c8bdadfcc04f621db02a2729022f106d8;hpb=a6fe07e49e3fc12169e801b1ed6874c3a5bd8500;p=freeside.git diff --git a/rt/share/html/Elements/ServiceFields b/rt/share/html/Elements/ServiceFields index 9c9a248c8..0fe52041c 100644 --- a/rt/share/html/Elements/ServiceFields +++ b/rt/share/html/Elements/ServiceFields @@ -43,6 +43,11 @@ my @service_fields = ( # ordered OrderBy => 'Service.svcpart', }, { + Name => 'ServiceLocation', + Label => 'Service Location', + Display => svc_location_attribute('location'), + }, + { Name => 'ServiceKey', # loosely corresponds to smartsearch/label field Label => '', # not displayable @@ -118,10 +123,37 @@ sub svc_info_attribute { }; } +sub svc_location_attribute { + # Tricky: if the ticket is linked to a service, we want to return the + # service's location, but if it's not, we want to return the customer's + # default service location. + # If it's linked to Customer A and also to Service A, it should return + # Service A's location (and not Customer A's default service location). + # But if it's linked to Service A and also to Customer B, then what? We + # can't satisfy all the constraints here. + my $attribute = shift; + sub { + my @return; + my $Ticket = shift; + my @svc_resolvers = ticket_svc_resolvers($Ticket); + if (@svc_resolvers) { + foreach my $s (@svc_resolvers) { + push @return, $s->ServiceInfo->{$attribute}, '
'; + } + } else { + my @cust_resolvers = map $_->TargetURI->Resolver, + @{ $Ticket->Customers->ItemsArrayRef }; + foreach my $c (@cust_resolvers) { + push @return, $c->CustomerInfo->{"ship_$attribute"}, '
'; + } + } + pop @return; #trailing
+ @return; + }; +} + <%init> -use Data::Dumper; -#warn Dumper(\@service_fields); my $arg = shift; if ( $arg eq 'Names' ) {