From 34fac1694565f2a835851d2d6a6aa0f83faee43b Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Fri, 1 Apr 2016 09:39:29 +0200 Subject: [PATCH] SL::DB::Note: Funktion trans_object zum Auslesen des referenzierten Objekts MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Ein Note-Objekt hängt immer an einem anderen Datenbankobject, das über trans_module+trans_id referenziert wird. Diese Funktion entscheidet anhand von trans_module, welche Rose-Klasse zu instantiieren ist, holt das entsprechende Objekt aus der Datenbank und gibt es zurück. Auch bei polymorphen Objekten wie Kunden/Lieferanten (für trans_module == ct) wird das richtige getan. --- SL/DB/Note.pm | 76 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/SL/DB/Note.pm b/SL/DB/Note.pm index c539d6a05..477ae3c81 100644 --- a/SL/DB/Note.pm +++ b/SL/DB/Note.pm @@ -1,10 +1,9 @@ -# This file has been auto-generated only because it didn't exist. -# Feel free to modify it at will; it will not be overwritten automatically. - package SL::DB::Note; use strict; +use Carp; + use SL::DB::MetaSetup::Note; @@ -21,5 +20,76 @@ __PACKAGE__->meta->initialize; # Creates get_all, get_all_count, get_all_iterator, delete_all and update_all. __PACKAGE__->meta->make_manager_class; +sub trans_object { + my $self = shift; + + croak "Method is not a setter" if @_; + + return undef if !$self->trans_id || !$self->trans_module; + + if ($self->trans_module eq 'fu') { + require SL::DB::FollowUp; + return SL::DB::Manager::FollowUp->find_by(id => $self->trans_id); + } + + if ($self->trans_module eq 'ct') { + require SL::DB::Customer; + require SL::DB::Vendor; + return SL::DB::Manager::Customer->find_by(id => $self->trans_id) + || SL::DB::Manager::Vendor ->find_by(id => $self->trans_id); + } + + return undef; +} 1; +__END__ + +=pod + +=encoding utf8 + +=head1 NAME + +SL::DB::Note - Notes + +=head1 FUNCTIONS + +=over 4 + +=item C + +A note object is always attached to another database entity. Which one +is determined by the columns C and C. This +function looks at both, retrieves the corresponding object from the +database and returns it. + +Currently the following three types are supported: + +=over 2 + +=item * C for C + +=item * C or C for C (which class is used depends on the value of C; +customers are looked up first) + +=back + +The method returns C in three cases: if no C or no +C has been assigned yet; if C is unknown; +if the referenced object doesn't exist. + +This method is a getter only, not a setter. + +=back + +=head1 BUGS + +Nothing here yet. + +=head1 AUTHOR + +Moritz Bunkus Em.bunkus@linet-services.deE + +=cut -- 2.20.1