=cut
sub cust_location {
- my $self = shift;
+ my( $self, %opt ) = @_;
+
return '' unless $self->locationnum;
- qsearchs( 'cust_location', { 'locationnum' => $self->locationnum } );
+
+ return $opt{_cache}->{$self->locationnum}
+ if $opt{_cache} && $opt{_cache}->{$self->locationnum};
+
+ my $cust_location =
+ qsearchs( 'cust_location', { 'locationnum' => $self->locationnum } );
+
+ $opt{_cache}->{$self->locationnum} = $cust_location
+ if $opt{_cache};
+
+ $cust_location;
}
=item cust_location_or_main
sub cust_location_or_main {
my $self = shift;
- $self->cust_location || $self->cust_main;
+ $self->cust_location(@_) || $self->cust_main;
}
=item location_label [ OPTION => VALUE ... ]
sub location_label {
my $self = shift;
- my $object = $self->cust_location_or_main;
+ my $object = $self->cust_location_or_main or return '';
$object->location_label(@_);
}
+=item location_hash
+
+Returns a hash of values for the location, either from the location object,
+the cust_main shipping address, or the cust_main address, whichever is present
+first.
+
+=cut
+
+sub location_hash {
+ my $self = shift;
+ my $object = $self->cust_location_or_main;
+ $object->location_hash(@_);
+}
+
1;