sub CustomerInfo {
my $self = shift;
- $self = $self->CustomerResolver;
return $self->{CustomerInfo} if $self->{CustomerInfo};
+ $self = $self->CustomerResolver;
my $rec = $self->_FreesideGetRecord() if $self;
if (!$rec) {
$info->{"bill_location"} = $bill_location->location_label(no_prefix => 1);
$info->{"ship_location"} = $ship_location->location_label(no_prefix => 1);
-
return $self->{CustomerInfo} = $info;
}
sub ServiceInfo {
my $self = shift;
$self->{fstable} eq 'cust_svc' or return;
+ return $self->{ServiceInfo} if $self->{ServiceInfo};
+
my $rec = $self->_FreesideGetRecord() or return;
my $cust_svc = $rec->{'_object'};
my $svc_x = $cust_svc->svc_x;
my $part_svc = $cust_svc->part_svc;
- return $self->{ServiceInfo} ||= {
+ my $locationnum = $cust_svc->cust_pkg->locationnum;
+ my $cust_location = qsearchs('cust_location', { locationnum => $locationnum});
+ my @lf = FS::cust_main->location_fields;
+
+ # location fields are not prefixed
+ my $info = {
$cust_svc->hash,
$svc_x->hash,
+ $cust_location->hash,
ServiceType => $part_svc->svc,
Label => $self->AsString,
- }
+ };
+ $info->{'location'} = $cust_location->location_label(no_prefix => 1);
+
+ return $self->{ServiceInfo} = $info;
}
1;
# RT-SQL sort key (if any)
OrderBy => 'Service.svcpart',
},
+ {
+ Name => 'ServiceLocation',
+ Label => 'Service Location',
+ Display => svc_location_attribute('location'),
+ },
{
Name => 'ServiceKey', # loosely corresponds to smartsearch/label field
Label => '',
};
}
+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}, '<BR>';
+ }
+ } 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"}, '<BR>';
+ }
+ }
+ pop @return; #trailing <BR>
+ @return;
+ };
+}
+
</%once>
<%init>
use Data::Dumper;