1 package FS::ClientAPI::MyAccount::contact;
4 use FS::Record qw( qsearchs );
9 sub _custoragent_session_custnum {
10 FS::ClientAPI::MyAccount::_custoragent_session_custnum(@_);
15 my($context, $session, $custnum) = _custoragent_session_custnum($p);
16 return { 'error' => $session } if $context eq 'error';
18 return { 'error' => 'Not logged in as a contact.' }
19 unless $session->{'contactnum'};
21 return { 'error' => 'Enter new password' }
22 unless length($p->{'new_password'});
24 my $contact = _contact( $session->{'contactnum'}, $custnum )
25 or return { 'error' => "Email not found" };
29 # use these svc_acct length restrictions??
30 my $conf = new FS::Conf;
31 $error = 'Password too short.'
32 if length($p->{'new_password'}) < ($conf->config('passwordmin') || 6);
33 $error = 'Password too long.'
34 if length($p->{'new_password'}) > ($conf->config('passwordmax') || 8);
36 $error ||= $contact->change_password($p->{'new_password'});
38 return { 'error' => $error };
43 my( $contactnum, $custnum ) = @_;
45 #my $search = { 'custnum' => $custnum };
46 #$search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent';
47 $custnum =~ /^(\d+)$/ or die "illegal custnum";
48 my $search = " AND contact.selfservice_access IS NOT NULL ".
49 " AND contact.selfservice_access = 'Y' ".
50 " AND ( disabled IS NULL OR disabled = '' )".
52 # $search .= " AND agentnum = ". $session->{'agentnum'} if $context eq 'agent';
56 'addl_from' => 'LEFT JOIN cust_main USING ( custnum ) ',
57 'hashref' => { 'contactnum' => $contactnum, },
58 'extra_sql' => $search, #important
66 my($context, $session, $custnum) = _custoragent_session_custnum($p);
67 return { 'error' => $session } if $context eq 'error';
69 my $cust_main = qsearchs('cust_main', { custnum=>$custnum } );
71 my @contacts = ( map {
72 my $contact = $_->contact;
73 my @contact_email = $_->contact_email;
74 { 'contactnum' => $_->contactnum,
75 'class' => $_->contact_classname,
77 'last' => $_->get('last'),
79 'emailaddress' => join(',', map $_->emailaddress, @contact_email),
80 #TODO: contact phone numbers
81 'comment' => $_->comment,
82 'selfservice_access' => $_->selfservice_access,
83 'disabled' => $_->disabled,
85 } $cust_main->cust_contact );
87 return { 'error' => '',
88 'contacts' => \@contacts,
95 my($context, $session, $custnum) = _custoragent_session_custnum($p);
96 return { 'error' => $session } if $context eq 'error';
98 #shortcut: logged in as a contact? that must be the one you want to edit
99 my $contactnum = $p->{contactnum} || $session->{'contactnum'};
101 my $contact = _contact( $contactnum, $custnum )
102 or return { 'error' => "Email not found" };
104 #TODO: change more fields besides just these
106 foreach (qw( first last title emailaddress )) {
107 $contact->$_( $p->{$_} ) if length( $p->{$_} );
110 my $error = $contact->replace;
112 return { 'error' => $error, };
119 my($context, $session, $custnum) = _custoragent_session_custnum($p);
120 return { 'error' => $session } if $context eq 'error';
122 my $contact = qsearchs('contact', { contactnum =>$ p->{contactnum},
123 custnum => $custnum, } )
124 or return { 'error' => 'Unknown contactnum' };
126 my $error = $contact->delete;
127 return { 'error' => $error } if $error;
129 return { 'error' => '', };