X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FMyAccount.pm;h=9564e9c9fbe51886d5562d7f8817d1324204da06;hb=06b3cebdee3d838cf25d51b5bd5668b47fec7a4e;hp=8ab14fce9c9060ecf2aac4d1a29a9171321624b9;hpb=5bc19ba554e29029e7963e40012e43432892306b;p=freeside.git diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 8ab14fce9..9564e9c9f 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -2342,7 +2342,7 @@ sub order_pkg { my $conf = new FS::Conf; if ( $conf->exists('signup_server-realtime') ) { - my $bill_error = _do_bop_realtime( $cust_main, $status ); + my $bill_error = _do_bop_realtime( $cust_main, $status, 'collect'=>$p->{run_bill_events} ); if ($bill_error) { $cust_pkg->cancel('quiet'=>1); @@ -2468,39 +2468,45 @@ sub order_recharge { sub _do_bop_realtime { my ($cust_main, $status, %opt) = @_; - my $old_balance = $cust_main->balance; + my $old_balance = $cust_main->balance; - my @cust_bill; - my $bill_error = $cust_main->bill( - 'return_bill' => \@cust_bill, - ); - - $bill_error ||= $cust_main->apply_payments_and_credits; + my @cust_bill; + my $bill_error = $cust_main->bill( + 'return_bill' => \@cust_bill, + ); - $bill_error ||= $cust_main->realtime_collect('selfservice' => 1) - if $cust_main->payby =~ /^(CARD|CHEK)$/; + $bill_error ||= $cust_main->apply_payments_and_credits; - if ( $cust_main->balance > $old_balance - && $cust_main->balance > 0 - && ( $cust_main->payby !~ /^(BILL|DCRD|DCHK)$/ - || $status eq 'suspended' - ) - ) - { - unless ( $opt{'no_invoice_void'} ) { + $bill_error ||= $cust_main->realtime_collect('selfservice' => 1) + if $cust_main->payby =~ /^(CARD|CHEK)$/; - #this used to apply a credit, but now we can void invoices... - foreach my $cust_bill (@cust_bill) { - my $voiderror = $cust_bill->void('automatic payment failed'); - warn "Error voiding cust bill after decline: $voiderror" if $voiderror; - } + if ( $cust_main->balance > $old_balance + && $cust_main->balance > 0 + && ( $cust_main->payby !~ /^(BILL|DCRD|DCHK)$/ + || $status eq 'suspended' + ) + ) + { + unless ( $opt{'no_invoice_void'} ) { + #this used to apply a credit, but now we can void invoices... + foreach my $cust_bill (@cust_bill) { + my $voiderror = $cust_bill->void('automatic payment failed'); + warn "Error voiding cust bill after decline: $voiderror" if $voiderror; } - return { 'error' => '_decline', 'bill_error' => $bill_error }; } - ''; + return { 'error' => '_decline', 'bill_error' => $bill_error }; + } + + if ( $opt{'collect'} ) { + my $collect_error = $cust_main->collect(); + return { 'error' => '_decline', 'bill_error' => $collect_error } + if $collect_error; #? + } + + ''; } sub renew_info { @@ -2606,19 +2612,18 @@ sub cancel_pkg { or return { 'error' => "Can't resume session" }; #better error message my $custnum = $session->{'custnum'}; - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) or return { 'error' => "unknown custnum $custnum" }; my $pkgnum = $p->{'pkgnum'}; - my $cust_pkg = qsearchs('cust_pkg', { 'custnum' => $custnum, 'pkgnum' => $pkgnum, } ) or return { 'error' => "unknown pkgnum $pkgnum" }; - my $error = $cust_pkg->cancel('quiet' => 1); + my $error = $cust_pkg->cancel( 'quiet' => 1, + 'date' => $p->{'date'}, + ); return { 'error' => $error }; - } sub provision_phone { @@ -2947,12 +2952,6 @@ sub myaccount_passwd { ) && ! $svc_acct->check_password($p->{'old_password'}); - # should move password length checks into is_password_allowed - $error = 'Password too short.' - if length($p->{'new_password'}) < ($conf->config('passwordmin') || 6); - $error = 'Password too long.' - if length($p->{'new_password'}) > ($conf->config('passwordmax') || 8); - $error ||= $svc_acct->is_password_allowed($p->{'new_password'}) || $svc_acct->set_password($p->{'new_password'}) || $svc_acct->replace(); @@ -3251,6 +3250,52 @@ sub process_reset_passwd { } +sub validate_passwd { + my $p = shift; + + my %result; + %result = ( 'fieldid' => $p->{'fieldid'} ) + if $p->{'fieldid'} =~ /^\w+$/; + + return { %result, 'password_invalid' => 'Enter new password' } + unless length($p->{'check_password'}); + + my $svc_acct; + if ($p->{'svcnum'}) { + # false laziness with myaccount_passwd + my($context, $session, $custnum) = _custoragent_session_custnum($p); + return { %result, 'error' => $session } if $context eq 'error'; + + $custnum =~ /^(\d+)$/ or die "illegal custnum"; + my $search = " AND custnum = $1"; + $search .= " AND agentnum = ". $session->{'agentnum'} if $context eq 'agent'; + + $svc_acct = qsearchs( { + 'table' => 'svc_acct', + 'addl_from' => 'LEFT JOIN cust_svc USING ( svcnum ) '. + 'LEFT JOIN cust_pkg USING ( pkgnum ) '. + 'LEFT JOIN cust_main USING ( custnum ) ', + 'hashref' => { 'svcnum' => $p->{'svcnum'}, }, + 'extra_sql' => $search, #important + } ) + or return { %result, 'error' => "Service not found" }; + # end false laziness + } + + unless ($svc_acct) { + my $conf = new FS::Conf; + my $agentnum = $p->{'agentnum'}; + return { %result, 'password_valid' => 1 } + if $conf->config_bool('password-insecure', $p->{'agentnum'}); + } + + $svc_acct ||= new FS::svc_acct {}; + + my $error = $svc_acct->is_password_allowed($p->{'check_password'}); + return { %result, 'password_invalid' => $error } if $error; + return { %result, 'password_valid' => 1 }; +} + sub list_tickets { my $p = shift; my($context, $session, $custnum) = _custoragent_session_custnum($p);