1 package FS::ClientAPI::MyAccount::contact;
4 use FS::Record qw( qsearchs );
8 sub _custoragent_session_custnum {
9 FS::ClientAPI::MyAccount::_custoragent_session_custnum(@_);
14 my($context, $session, $custnum) = _custoragent_session_custnum($p);
15 return { 'error' => $session } if $context eq 'error';
17 return { 'error' => 'Not logged in as a contact.' }
18 unless $session->{'contactnum'};
20 return { 'error' => 'Enter new password' }
21 unless length($p->{'new_password'});
23 my $contact = _contact( $session->{'contactnum'}, $custnum )
24 or return { 'error' => "Email not found" };
28 # use these svc_acct length restrictions??
29 my $conf = new FS::Conf;
30 $error = 'Password too short.'
31 if length($p->{'new_password'}) < ($conf->config('passwordmin') || 6);
32 $error = 'Password too long.'
33 if length($p->{'new_password'}) > ($conf->config('passwordmax') || 8);
35 $error ||= $contact->change_password($p->{'new_password'});
37 return { 'error' => $error };
42 my( $contactnum, $custnum ) = @_;
44 #my $search = { 'custnum' => $custnum };
45 #$search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent';
46 $custnum =~ /^(\d+)$/ or die "illegal custnum";
47 my $search = " AND contact.selfservice_access IS NOT NULL ".
48 " AND contact.selfservice_access = 'Y' ".
49 " AND ( disabled IS NULL OR disabled = '' )".
51 # $search .= " AND agentnum = ". $session->{'agentnum'} if $context eq 'agent';
55 'addl_from' => 'LEFT JOIN cust_main USING ( custnum ) ',
56 'hashref' => { 'contactnum' => $contactnum, },
57 'extra_sql' => $search, #important
65 my($context, $session, $custnum) = _custoragent_session_custnum($p);
66 return { 'error' => $session } if $context eq 'error';
68 my $cust_main = qsearchs('cust_main', { custnum=>$custnum } );
70 my @contacts = ( map {
71 my $contact = $_->contact;
72 my @contact_email = $_->contact_email;
73 { 'contactnum' => $_->contactnum,
74 'class' => $_->contact_classname,
76 'last' => $_->get('last'),
78 'emailaddress' => join(',', map $_->emailaddress, @contact_email),
79 #TODO: contact phone numbers
80 'comment' => $_->comment,
81 'selfservice_access' => $_->selfservice_access,
82 'disabled' => $_->disabled,
84 } $cust_main->cust_contact );
86 return { 'error' => '',
87 'contacts' => \@contacts,
94 my($context, $session, $custnum) = _custoragent_session_custnum($p);
95 return { 'error' => $session } if $context eq 'error';
97 #shortcut: logged in as a contact? that must be the one you want to edit
98 my $contactnum = $p->{contactnum} || $session->{'contactnum'};
100 my $contact = _contact( $contactnum, $custnum )
101 or return { 'error' => "Email not found" };
103 #TODO: change more fields besides just these
105 foreach (qw( first last title emailaddress )) {
106 $contact->$_( $p->{$_} ) if length( $p->{$_} );
109 my $error = $contact->replace;
111 return { 'error' => $error, };
118 my($context, $session, $custnum) = _custoragent_session_custnum($p);
119 return { 'error' => $session } if $context eq 'error';
121 my $contact = qsearchs('contact', { contactnum =>$ p->{contactnum},
122 custnum => $custnum, } )
123 or return { 'error' => 'Unknown contactnum' };
125 my $error = $contact->delete;
126 return { 'error' => $error } if $error;
128 return { 'error' => '', };