Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 02a56915

Von Moritz Bunkus vor fast 14 Jahren hinzugefügt

  • ID 02a569152e91ec064bb3d4ccc46564b25dc6b930
  • Vorgänger f49ad7f1
  • Nachfolger f203aa21

Hilfs-Mixin zum Abholen von über record_links verknüpften Dokumenten zu einem Model

Unterschiede anzeigen:

SL/DB/Helper/LinkedRecords.pm
1
package SL::DB::Helpers::LinkedRecords;
2

  
3
require Exporter;
4
our @ISA    = qw(Exporter);
5
our @EXPORT = qw(linked_records);
6

  
7
use Carp;
8

  
9
use SL::DB::Helpers::Mappings;
10
use SL::DB::RecordLink;
11

  
12
sub linked_records {
13
  my $self     = shift;
14
  my %params   = @_;
15

  
16
  my $wanted   = $params{direction} || croak("Missing parameter `direction'");
17
  my $myself   = $wanted eq 'from' ? 'to' : 'from';
18

  
19
  my $my_table = SL::DB::Helpers::Mappings::get_table_for_package(ref($self));
20

  
21
  my @query    = ( "${myself}_table" => $my_table,
22
                   "${myself}_id"    => $self->id );
23

  
24
  if ($params{$wanted}) {
25
    my $wanted_table = SL::DB::Helpers::Mappings::get_table_for_package($params{$wanted}) || croak("Invalid parameter `${wanted}'");
26
    push @query, ("${wanted}_table" => $wanted_table);
27
  }
28

  
29
  my $links            = SL::DB::Manager::RecordLink->get_all(query => [ and => \@query ]);
30

  
31
  my $sub_wanted_table = "${wanted}_table";
32
  my $sub_wanted_id    = "${wanted}_id";
33

  
34
  my $records          = [];
35
  @query               = ref($params{query}) eq 'ARRAY' ? @{ $params{query} } : ();
36

  
37
  foreach my $link (@{ $links }) {
38
    my $class = SL::DB::Helpers::Mappings::get_manager_package_for_table($link->$sub_wanted_table);
39
    push @{ $records }, @{ $class->get_all(query => [ id => $link->$sub_wanted_id, @query ]) };
40
  }
41

  
42
  return $records;
43
}
44

  
45
1;
46

  
47
__END__
48

  
49
=encoding utf8
50

  
51
=head1 NAME
52

  
53
SL::DB::Helpers::LinkedRecords - Mixin for retrieving linked records via the table C<record_links>
54

  
55
=head1 FUNCTIONS
56

  
57
=over 4
58

  
59
=item C<linked_records %params>
60

  
61
Retrieves records linked from or to C<$self> via the table
62
C<record_links>. The mandatory parameter C<direction> (either C<from>
63
or C<to>) determines whether the function retrieves records that link
64
to C<$self> (for C<direction> = C<to>) or that are linked from
65
C<$self> (for C<direction> = C<from>).
66

  
67
The optional parameter C<from> or C<to> (same as C<direction>)
68
contains the package name of a Rose model for table limitation. If you
69
only need invoices created from an order C<$order> then the call could
70
look like this:
71

  
72
  my $invoices = $order->linked_records(direction => 'to',
73
                                        to        => 'SL::DB::Invoice');
74

  
75
The optional parameter C<query> can be used to limit the records
76
returned. The following call limits the earlier example to invoices
77
created today:
78

  
79
  my $invoices = $order->linked_records(direction => 'to',
80
                                        to        => 'SL::DB::Invoice',
81
                                        query     => [ transdate => DateTime->today ]);
82

  
83
Returns an array reference.
84

  
85
=back
86

  
87
=head1 BUGS
88

  
89
Nothing here yet.
90

  
91
=head1 AUTHOR
92

  
93
Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
94

  
95
=cut

Auch abrufbar als: Unified diff