self-service API new_contact, RT#37376
[freeside.git] / FS / FS / ClientAPI / MyAccount / contact.pm
index 72226e2..5690f86 100644 (file)
@@ -129,6 +129,9 @@ sub delete_contact {
   my($context, $session, $custnum) = _custoragent_session_custnum($p);
   return { 'error' => $session } if $context eq 'error';
 
+  return { 'error' => 'Cannot delete the currently-logged in contact.' }
+    if $p->{contactnum} == $session->{contactnum};
+
   my $cust_contact = qsearchs('cust_contact', { contactnum => $p->{contactnum},
                                                 custnum    => $custnum,       })
     or return { 'error' => 'Unknown contactnum' };
@@ -145,4 +148,25 @@ sub delete_contact {
   return { 'error' => '', };
 }
 
+sub new_contact {
+  my $p = shift;
+
+  my($context, $session, $custnum) = _custoragent_session_custnum($p);
+  return { 'error' => $session } if $context eq 'error';
+
+  #TODO: add phone numbers too
+  #TODO: specify a classnum by name and/or list_contact_classes method
+
+  my $contact = new FS::contact {
+    'custnum' => $custnum,
+    map { $_ => $p->{$_} }
+      qw( first last emailaddress classnum comment selfservice_access )
+  };
+
+  $contact->change_password_fields($p->{_password}) if length($p->{_password});
+
+  my $error = $contact->insert;
+  return { 'error' => $error, };
+}
+
 1;