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;
+ };
+}
+
%once>
<%init>
-use Data::Dumper;
-#warn Dumper(\@service_fields);
my $arg = shift;
if ( $arg eq 'Names' ) {