From 49b00f2cc1d5fd7a536a9e30292f2eaec26ff825 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bernd=20Ble=C3=9Fmann?= Date: Mon, 14 Sep 2015 17:01:18 +0200 Subject: [PATCH] =?utf8?q?CVar-Helper:=20Beim=20Parsen=20darauf=20achten,?= =?utf8?q?=20ob=20unparsed=5Fvalue=20ein=20Objekt=20enth=C3=A4lt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Um Objekte mit der value-Methode einer CVar vom Typ Customer, Vendor oder Part zuweisen zu können, muss beim Parsen die Id des Objekts ermittelt werden. Dieses wird z.B. im Helper (SL::DB::Helper::CustomVariables.pm) verwendet, um bei neuen cvars eines sub-modules den Wert der Basis-CVar zu setzen, denn die value-Methode der CVar (hier der Basis-CVar) liefert ein Objekt zurück. Ohne diesen Patch gab es einen Fehler in der Art: "No such SL::DB::Part where id = 111286144 at SL/DB/Helper/CustomVariables.pm line 198" --- SL/DB/CustomVariable.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/SL/DB/CustomVariable.pm b/SL/DB/CustomVariable.pm index 46428fe82..26ff748f7 100644 --- a/SL/DB/CustomVariable.pm +++ b/SL/DB/CustomVariable.pm @@ -4,6 +4,9 @@ package SL::DB::CustomVariable; use strict; + +use List::MoreUtils qw(any); + use SL::DB::MetaSetup::CustomVariable; __PACKAGE__->meta->initialize; @@ -36,7 +39,9 @@ sub parse_value { my $unparsed = delete $self->{__unparsed_value}; if ($type =~ m{^(?:customer|vendor|part|number)}) { - return $self->number_value(defined($unparsed) ? $unparsed * 1 : undef); + return $self->number_value(!defined($unparsed) ? undef + : (any { ref($unparsed) eq $_ } qw(SL::DB::Customer SL::DB::Vendor SL::DB::Part)) ? $unparsed->id * 1 + : $unparsed * 1); } if ($type =~ m{^(?:bool)}) { -- 2.20.1