self-service API list_contacts doc, RT#37372
[freeside.git] / FS / FS / ClientAPI / MyAccount / contact.pm
index 72226e2..31bbb0c 100644 (file)
@@ -82,7 +82,7 @@ sub list_contacts {
       #TODO: contact phone numbers
       'comment'            => $_->comment,
       'selfservice_access' => $_->selfservice_access,
-      'disabled'           => $contact->disabled,
+      #'disabled'           => $contact->disabled,
     };
   } $cust_main->cust_contact );
 
@@ -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;