PriceTaxCalculator: Doku-Fix
[kivitendo-erp.git] / SL / DB / Helper / LinkedRecords.pm
index b75597a..bb21ecf 100644 (file)
@@ -148,14 +148,20 @@ sub _linked_records_implementation {
       ORDER BY ${wanted}_table, ${wanted}_id, depth ASC;
 
     my $links     = selectall_hashref_query($::form, $::form->get_standard_dbh, $query, $self->id, $self->meta->table);
+
+    return [] unless @$links;
+
     my $link_objs = SL::DB::Manager::RecordLink->get_all(query => [ id => [ map { $_->{id} } @$links ] ]);
     my @objects = map { $get_objects->($_) } @$link_objs;
 
     if ($params{save_path}) {
        my %links_by_id = map { $_->{id} => $_ } @$links;
        for (@objects) {
-         $_->{_record_link_path}  = $links_by_id{$_->{_record_link}->id}->{path};
-         $_->{_record_link_depth} = $links_by_id{$_->{_record_link}->id}->{depth};
+         my $link = $links_by_id{$_->{_record_link}->id};
+         my $intermediate_links = SL::DB::Manager::RecordLink->get_all(query => [ id => $link->{path} ]);
+         $_->{_record_link_path}     = $link->{path};
+         $_->{_record_link_obj_path} = [ map { $get_objects->($_) } @$intermediate_links ];
+         $_->{_record_link_depth}    = $link->{depth};
        }
     }
 
@@ -364,7 +370,7 @@ names in an array reference in which case all links matching any of the model
 names will be returned.
 
 If no parameter C<direction> is given, but any of C<to>, C<from> or C<both>,
-then C<direction> is infered accordingly. If neither are given, C<direction> is
+then C<direction> is inferred accordingly. If neither are given, C<direction> is
 set to C<both>.
 
 The optional parameter C<via> can be used to retrieve all documents that may
@@ -386,7 +392,7 @@ delivery orders inbetween) then the call could look like this:
   );
 
 Retrieving all invoices from a quotation no matter whether or not
-orders or delivery orders where created:
+orders or delivery orders were created:
 
   my $invoices = $quotation->linked_records(
     direction => 'to',
@@ -429,7 +435,7 @@ visited twice, so this
 
 will find the path o1 -> o2 -> do -> o2 -> i without considering it a cycle.
 
-The optional extra flag C<save_path> will give you extra inforamtion saved in
+The optional extra flag C<save_path> will give you extra information saved in
 the returned objects:
 
   my $records = $order->linked_records(
@@ -444,8 +450,8 @@ Every record will have two fields set:
 
 =item C<_record_link_path>
 
-And array with the ids of the visited links. The shortest paths will be
-prefered, so in the previous example this would contain the ids of o1-o2 and
+An array with the ids of the visited links. The shortest paths will be
+preferred, so in the previous example this would contain the ids of o1-o2 and
 o2-i.
 
 =item C<_record_link_depth>
@@ -537,7 +543,7 @@ Note: If the latter has a default setting it will always mask the creation time.
 
 Returns an array reference.
 
-Can only be called both as a class function since it is noe exported.
+Can only be called both as a class function since it is not exported.
 
 =back