From 38d7ed9d33840a59bbbf6895e3c7a6d191094c03 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 23 Dec 2003 00:51:37 +0000 Subject: [PATCH] add edit_info to selfservice API --- FS/FS/ClientAPI/MyAccount.pm | 34 ++++++++++++++++++++++++++++ fs_selfservice/FS-SelfService/SelfService.pm | 18 ++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index c9a749424..290022148 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -20,6 +20,7 @@ use FS::ClientAPI; #hmm FS::ClientAPI->register_handlers( 'MyAccount/login' => \&login, 'MyAccount/customer_info' => \&customer_info, + 'MyAccount/edit_info' => \&edit_info, 'MyAccount/invoice' => \&invoice, 'MyAccount/cancel' => \&cancel, 'MyAccount/payment_info' => \&payment_info, @@ -29,6 +30,14 @@ FS::ClientAPI->register_handlers( 'MyAccount/cancel_pkg' => \&cancel_pkg, ); +use vars qw( @cust_main_editable_fields ); +@cust_main_editable_fields = qw( + first last company address1 address2 city + county state zip country daytime night fax + ship_first ship_last ship_company ship_address1 ship_address2 ship_city + ship_state ship_zip ship_country ship_daytime ship_night ship_fax +); + #store in db? my $cache = new Cache::SharedMemoryCache(); @@ -104,6 +113,10 @@ sub customer_info { $return{name} = $cust_main->first. ' '. $cust_main->get('last'); + for (@cust_main_editable_fields) { + $return{$_} = $cust_main->get($_); + } + } else { #no customer record my $svc_acct = qsearchs('svc_acct', { 'svcnum' => $session->{'svcnum'} } ) @@ -119,6 +132,27 @@ sub customer_info { } +sub edit_info { + my $p = shift; + my $session = $cache->get($p->{'session_id'}) + or return { 'error' => "Can't resume session" }; #better error message + + my $custnum = $session->{'custnum'} + or return { 'error' => "no customer record" }; + + my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) + or return { 'error' => "unknown custnum $custnum" }; + + my $new = new FS::cust_main { $cust_main->hash }; + $new->set( $_ => $p->{$_} ) + foreach grep { exists $p->{$_} } @cust_main_editable_fields; + my $error = $new->replace($cust_main); + return { 'error' => $error } if $error; + #$cust_main = $new; + + return { 'error' => '' }; +} + sub payment_info { my $p = shift; my $session = $cache->get($p->{'session_id'}) diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index be6dd3a8a..715f935f3 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -23,6 +23,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'chsh' => 'passwd/passwd', 'login' => 'MyAccount/login', 'customer_info' => 'MyAccount/customer_info', + 'edit_info' => 'MyAccount/edit_info', 'invoice' => 'MyAccount/invoice', 'cancel' => 'MyAccount/cancel', 'payment_info' => 'MyAccount/payment_info', @@ -113,7 +114,7 @@ FS::SelfService - Freeside self-service API my $customer_info = customer_info( { 'session_id' => $session_id } ); #payment_info and process_payment are available in 1.5+ only - my $payment_info = payment_info) { 'session_id' => $session_id } ); + my $payment_info = payment_info( { 'session_id' => $session_id } ); #!!! process_payment example @@ -244,8 +245,23 @@ the following keys: invnum, date, owed An HTML fragment containing shipping and billing addresses. +=item The following fields are also returned: first last company address1 address2 city county state zip country daytime night fax ship_first ship_last ship_company ship_address1 ship_address2 ship_city ship_state ship_zip ship_country ship_daytime ship_night ship_fax + =back +=item edit_info HASHREF + +Takes a hash reference as parameter with any of the following keys: + +first last company address1 address2 city county state zip country daytime night fax ship_first ship_last ship_company ship_address1 ship_address2 ship_city ship_state ship_zip ship_country ship_daytime ship_night ship_fax + +If a field exists, the customer record is updated with the new value of that +field. If a field does not exist, that field is not changed on the customer +record. + +Returns a hash reference with a single key, B, empty on success, or an +error message on errors + =item invoice HASHREF Returns an invoice. Takes a hash reference as parameter with two keys: -- 2.11.0