X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FElements%2FServiceFields;h=70eea232f45800a4490328d38f99c5c899308d35;hb=ddebcd39ef2ec217e1c3a3070893c511568ef16d;hp=9c9a248c8bdadfcc04f621db02a2729022f106d8;hpb=1c59bba12621e154765a8255534e94a041dfd200;p=freeside.git diff --git a/rt/share/html/Elements/ServiceFields b/rt/share/html/Elements/ServiceFields index 9c9a248c8..70eea232f 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,6 +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) { + warn '#' . $Ticket->id . ", service attribute $attribute\n"; + foreach my $s (@svc_resolvers) { + push @return, $s->ServiceInfo->{$attribute}, '
'; + } + } else { + warn '#' . $Ticket->id . ", customer attribute ship_$attribute\n"; + 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;