agent-virtualize credit card surcharge percentage, RT#72961
[freeside.git] / FS / FS / cust_main_note.pm
index 118ccd4..4c48eb6 100644 (file)
@@ -1,8 +1,10 @@
 package FS::cust_main_note;
+use base qw( FS::otaker_Mixin FS::Record );
 
 use strict;
-use base qw( FS::otaker_Mixin FS::Record );
-use FS::Record qw( qsearch qsearchs );
+use Carp;
+use FS::Record qw( qsearchs ); #qw( qsearch qsearchs );
+use FS::Conf;
 
 =head1 NAME
 
@@ -37,6 +39,8 @@ primary key
 
 =item custnum
 
+=item classnum
+
 =item _date
 
 =item usernum
@@ -105,15 +109,65 @@ sub check {
   my $error = 
     $self->ut_numbern('notenum')
     || $self->ut_number('custnum')
+    || $self->ut_foreign_keyn('classnum', 'cust_note_class', 'classnum')
     || $self->ut_numbern('_date')
     || $self->ut_textn('otaker')
     || $self->ut_anything('comments')
+    || $self->ut_numbern('sticky')
   ;
   return $error if $error;
 
+  if (!$self->classnum) {
+    my $conf = new FS::Conf;
+    return 'Note class is required'
+      if $conf->exists('note-classes')
+        and $conf->config('note-classes') eq 'Required';
+  }
+
   $self->SUPER::check;
 }
 
+=item cust_note_class
+
+Returns the customer note class, as an FS::cust_note_class object, or the empty
+string if there is no note class.
+
+=item classname 
+
+Returns the customer note class name, or the empty string if there is no 
+customer note class.
+
+=cut
+
+sub classname {
+  my $self = shift;
+  my $cust_note_class = $self->cust_note_class;
+  $cust_note_class ? $cust_note_class->classname : '';
+}
+
+
+#false laziness w/otaker_Mixin & cust_attachment
+sub otaker {
+  my $self = shift;
+  if ( scalar(@_) ) { #set
+    my $otaker = shift;
+    my($l,$f) = (split(', ', $otaker));
+    my $access_user =  qsearchs('access_user', { 'username'=>$otaker }     )
+                    || qsearchs('access_user', { 'first'=>$f, 'last'=>$l } )
+      or croak "can't set otaker: $otaker not found!"; #confess?
+    $self->usernum( $access_user->usernum );
+    $otaker; #not sure return is used anywhere, but just in case
+  } else { #get
+    if ( $self->usernum ) {
+      $self->access_user->username;
+    } elsif ( length($self->get('otaker')) ) {
+      $self->get('otaker');
+    } else {
+      '';
+    }
+  }
+}
+
 # Used by FS::Upgrade to migrate to a new database.
 sub _upgrade_data {  # class method
   my ($class, %opts) = @_;