X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=FS%2FFS%2FRecord.pm;h=f806e4f88acd4cd08dd9477b33074b8fc153fa30;hb=06707641b711d9218aba36dc70cf86146fa2acef;hp=5dbcd4d4b04b8af14965be5f0ff0692333987aaa;hpb=d18a2abec5a0323c26fbc5704fb1a2675eaea352;p=freeside.git diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 5dbcd4d4b..f806e4f88 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -2,7 +2,7 @@ package FS::Record; use strict; use vars qw( $dbdef_file $dbdef $setup_hack $AUTOLOAD @ISA @EXPORT_OK $DEBUG - $me %dbdef_cache %virtual_fields_cache ); + $me %dbdef_cache %virtual_fields_cache $nowarn_identical ); use subs qw(reload_dbdef); use Exporter; use Carp qw(carp cluck croak confess); @@ -25,6 +25,8 @@ use Tie::IxHash; $DEBUG = 0; $me = '[FS::Record]'; +$nowarn_identical = 0; + my $conf; my $rsa_module; my $rsa_loaded; @@ -425,6 +427,34 @@ sub qsearch { return @return; } +=item by_key PRIMARY_KEY_VALUE + +This is a class method that returns the record with the given primary key +value. This method is only useful in FS::Record subclasses. For example: + + my $cust_main = FS::cust_main->by_key(1); # retrieve customer with custnum 1 + +is equivalent to: + + my $cust_main = qsearchs('cust_main', { 'custnum' => 1 } ); + +=cut + +sub by_key { + my ($class, $pkey_value) = @_; + + my $table = $class->table + or croak "No table for $class found"; + + my $dbdef_table = $dbdef->table($table) + or die "No schema for table $table found - ". + "do you need to create it or run dbdef-create?"; + my $pkey = $dbdef_table->primary_key + or die "No primary key for table $table"; + + return qsearchs($table, { $pkey => $pkey_value }); +} + =item jsearch TABLE, HASHREF, SELECT, EXTRA_SQL, PRIMARY_TABLE, PRIMARY_KEY Experimental JOINed search method. Using this method, you can execute a @@ -901,7 +931,9 @@ sub replace { return "Records not in same table!" unless $new->table eq $old->table; my $primary_key = $old->dbdef_table->primary_key; - return "Can't change $primary_key" + return "Can't change primary key $primary_key ". + 'from '. $old->getfield($primary_key). + ' to ' . $new->getfield($primary_key) if $primary_key && ( $old->getfield($primary_key) ne $new->getfield($primary_key) ); @@ -922,7 +954,8 @@ sub replace { ? ($_, $new->getfield($_)) : () } $old->fields; unless ( keys(%diff) ) { - carp "[warning]$me $new -> replace $old: records identical"; + carp "[warning]$me $new -> replace $old: records identical" + unless $nowarn_identical; return ''; }