X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FObject.pm;h=f2f12c00d7f9806f5bfb7eebdb1380744ae94d7e;hb=0ebb8f829ac2d23b65e8d993c7d03aa0b172b637;hp=4c3e18439f2ca8894b2942590db8adf764442a06;hpb=0b84f51fd598e4b5a1cb139aa582297d089b1602;p=kivitendo-erp.git diff --git a/SL/DB/Object.pm b/SL/DB/Object.pm index 4c3e18439..f2f12c00d 100755 --- a/SL/DB/Object.pm +++ b/SL/DB/Object.pm @@ -12,6 +12,7 @@ use SL::DB; use SL::DB::Helper::Attr; use SL::DB::Helper::Metadata; use SL::DB::Helper::Manager; +use SL::DB::Helper::Presenter; use SL::DB::Object::Hooks; use base qw(Rose::DB::Object); @@ -21,6 +22,12 @@ my @rose_reserved_methods = qw( not_found save update import ); +my %db_to_presenter_mapping = ( + Customer => 'CustomerVendor', + PurchaseInvoice => 'Invoice', + Vendor => 'CustomerVendor', +); + sub new { my $class = shift; my $self = $class->SUPER::new(); @@ -148,7 +155,7 @@ sub save { SL::DB::Object::Hooks::run_hooks($self, 'after_save', $result); 1; - }) || die $self->error; + }) || die $self->db->error; return $result; } @@ -164,7 +171,7 @@ sub delete { SL::DB::Object::Hooks::run_hooks($self, 'after_delete', $result); 1; - }) || die $self->error; + }) || die $self->db->error; return $result; } @@ -238,6 +245,29 @@ sub clone_and_reset { return $clone; } +sub presenter { + my ($self) = @_; + + my $class = ref $self; + $class =~ s{^SL::DB::}{}; + $class = "SL::Presenter::" . ($db_to_presenter_mapping{$class} // $class); + + return SL::DB::Helper::Presenter->new($class, $self); +} + +sub as_debug_info { + my ($self) = @_; + + return { + map { + my $column_name = $_->name; + my $value = $self->$column_name; + $value = !defined($value) ? undef : "${value}"; + ($_ => $value) + } $self->meta->columns + }; +} + 1; __END__ @@ -324,6 +354,14 @@ Loads objects from the database which haven't been cached before and caches them for the duration of the current request (see L). +If you know in advance that you will likely need all objects of a +particular type then you can pre-cache them by calling the manager's +C function. For example, if you expect to need all unit +objects, you can use Ccache_all> before +you start the actual work. Later you can use +Cload_cached> to retrieve individual objects and be +sure that they're already cached. + This method can be called both as an instance method and a class method. It loads objects for the corresponding class (e.g. both Cload_cached(…)> and @@ -353,6 +391,20 @@ The difference between Rose's and this function is that this function will also skip setting the following fields if such columns exist for C<$self>: C, C. +=item C + +Returns a proxy wrapper that will dispatch all method calls to the presenter +with the same name as the class of the involking object. + +For the full documentation about its capabilites see +L + +=item C + +Returns a hash containing solely the essentials for dumping it with +L. The returned hash consists of the column names with +associated column values in stringified form. + =back =head1 AUTHOR