3 #some false laziness w/selfservice.cgi
6 use vars qw($DEBUG $me $cgi $session_id $form_max $template_dir);
7 use subs qw(do_template);
9 use CGI::Carp qw(fatalsToBrowser);
10 use Business::CreditCard;
13 use FS::SelfService qw( agent_login agent_logout agent_info
15 signup_info new_customer
16 customer_info list_pkgs order_pkg
17 part_svc_info provision_acct unprovision_svc
27 warn "$me starting\n" if $DEBUG;
29 warn "$me initializing CGI\n" if $DEBUG;
32 unless ( defined $cgi->param('session') ) {
33 warn "$me no session defined, sending login page\n" if $DEBUG;
34 do_template('agent_login',{});
38 if ( $cgi->param('session') eq 'login' ) {
40 warn "$me processing login\n" if $DEBUG;
42 $cgi->param('username') =~ /^\s*([a-z0-9_\-\.\&]{0,$form_max})\s*$/i
43 or die "illegal username";
46 $cgi->param('password') =~ /^(.{0,$form_max})$/
47 or die "illegal password";
51 'username' => $username,
52 'password' => $password,
55 do_template('agent_login', {
56 'error' => $rv->{error},
57 'username' => $username,
61 $cgi->param('session' => $rv->{session_id} );
62 $cgi->param('action' => 'agent_main' );
66 $session_id = $cgi->param('session');
68 warn "$me checking action\n" if $DEBUG;
69 $cgi->param('action') =~
70 /^(agent_main|signup|process_signup|list_customers|view_customer|agent_provision|provision_svc|process_svc_acct|delete_svc|agent_order_pkg|process_order_pkg|logout)$/
71 or die "unknown action ". $cgi->param('action');
74 warn "$me running $action\n" if $DEBUG;
75 my $result = eval "&$action();";
78 if ( $result->{error} eq "Can't resume session" ) { #ick
79 do_template('agent_login',{});
83 warn "$me processing template $action\n" if $DEBUG;
84 do_template($action, {
85 'session_id' => $session_id,
88 warn "$me done processing template $action\n" if $DEBUG;
93 $action = 'agent_logout';
94 agent_logout( 'session_id' => $session_id );
97 sub agent_main { agent_info( 'session_id' => $session_id ); }
99 sub signup { signup_info( 'session_id' => $session_id ); }
103 my $init_data = signup_info( 'session_id' => $session_id );
104 if ( $init_data->{'error'} ) {
105 if ( $init_data->{'error'} eq "Can't resume session" ) { #ick
106 do_template('agent_login',{});
109 die $init_data->{'error'};
115 #some false laziness w/signup.cgi
116 my $payby = $cgi->param('payby');
117 if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) {
118 #$payinfo = join('@', map { $cgi->param( $payby. "_payinfo$_" ) } (1,2) );
119 $cgi->param('payinfo' => $cgi->param($payby. '_payinfo1'). '@'.
120 $cgi->param($payby. '_payinfo2')
123 $cgi->param('payinfo' => $cgi->param( $payby. '_payinfo' ) );
125 $cgi->param('paydate' => $cgi->param( $payby. '_month' ). '-'.
126 $cgi->param( $payby. '_year' )
128 $cgi->param('payname' => $cgi->param( $payby. '_payname' ) );
129 $cgi->param('paycvv' => defined $cgi->param( $payby. '_paycvv' )
130 ? $cgi->param( $payby. '_paycvv' )
134 if ( $cgi->param('invoicing_list') ) {
135 $cgi->param('invoicing_list' => $cgi->param('invoicing_list'). ', POST')
136 if $cgi->param('invoicing_list_POST');
138 $cgi->param('invoicing_list' => 'POST' );
141 if ( $cgi->param('_password') ne $cgi->param('_password2') ) {
142 $error = $init_data->{msgcat}{passwords_dont_match}; #msgcat
143 $cgi->param('_password', '');
144 $cgi->param('_password2', '');
147 if ( $payby =~ /^(CARD|DCRD)$/ && $cgi->param('CARD_type') ) {
148 my $payinfo = $cgi->param('payinfo');
151 $payinfo =~ /^(\d{13,16})$/
152 or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo;
155 or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo;
156 cardtype($payinfo) eq $cgi->param('CARD_type')
157 or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type');
161 my $rv = new_customer ( {
162 'session_id' => $session_id,
163 map { $_ => $cgi->param($_) }
164 qw( last first ss company
165 address1 address2 city county state zip country
167 payby payinfo paycvv paydate payname invoicing_list
168 pkgpart username sec_phrase _password popnum refnum
170 grep { /^snarf_/ } $cgi->param
172 $error = $rv->{'error'};
182 #warn join('\n', map "$_ => $r->{$_}", keys %$r )."\n";
185 $action = 'agent_main';
186 my $agent_info = agent_info( 'session_id' => $session_id );
187 $agent_info->{'message'} = 'Signup sucessful';
196 agent_list_customers( 'session_id' => $session_id,
197 map { $_ => $cgi->param($_) }
198 grep defined($cgi->param($_)),
199 qw(prospect active susp cancel),
203 if ( scalar( @{$results->{'customers'}} ) == 1 ) {
204 $action = 'view_customer';
206 'agent_session_id' => $session_id,
207 'custnum' => $results->{'customers'}[0]{'custnum'},
217 #my $init_data = signup_info( 'session_id' => $session_id );
218 #if ( $init_data->{'error'} ) {
219 # if ( $init_data->{'error'} eq "Can't resume session" ) { #ick
220 # do_template('agent_login',{});
223 # die $init_data->{'error'};
229 'agent_session_id' => $session_id,
230 'custnum' => $cgi->param('custnum'),
234 # ( map { $_ => $init_data->{$_} }
235 # qw( part_pkg security_phrase svc_acct_pop ),
241 sub agent_order_pkg {
243 my $init_data = signup_info( 'session_id' => $session_id );
244 if ( $init_data->{'error'} ) {
245 if ( $init_data->{'error'} eq "Can't resume session" ) { #ick
246 do_template('agent_login',{});
249 die $init_data->{'error'};
253 my $customer_info = customer_info (
254 'agent_session_id' => $session_id,
255 'custnum' => $cgi->param('custnum'),
259 ( map { $_ => $init_data->{$_} }
260 qw( part_pkg security_phrase svc_acct_pop ),
267 sub agent_provision {
268 my $result = list_pkgs(
269 'agent_session_id' => $session_id,
270 'custnum' => $cgi->param('custnum'),
272 die $result->{'error'} if exists $result->{'error'} && $result->{'error'};
278 my $result = part_svc_info(
279 'agent_session_id' => $session_id,
280 map { $_ => $cgi->param($_) } qw( pkgnum svcpart custnum ),
282 die $result->{'error'} if exists $result->{'error'} && $result->{'error'};
284 $result->{'svcdb'} =~ /^svc_(.*)$/
285 #or return { 'error' => 'Unknown svcdb '. $result->{'svcdb'} };
286 or die 'Unknown svcdb '. $result->{'svcdb'};
288 $action = "agent_$action";
293 sub process_svc_acct {
295 my $result = provision_acct (
296 'agent_session_id' => $session_id,
297 map { $_ => $cgi->param($_) } qw(
298 custnum pkgnum svcpart username _password _password2 sec_phrase popnum )
301 if ( exists $result->{'error'} && $result->{'error'} ) {
302 #warn "$result $result->{'error'}";
303 $action = 'provision_svc_acct';
304 $action = "agent_$action";
307 %{ part_svc_info( 'agent_session_id' => $session_id,
308 map { $_ => $cgi->param($_) } qw(pkgnum svcpart custnum)
311 'error' => $result->{'error'},
314 #warn "$result $result->{'error'}";
315 $action = 'agent_provision';
317 %{agent_provision()},
318 'message' => $result->{'svc'}. ' setup sucessfully.',
325 my $result = unprovision_svc(
326 'agent_session_id' => $session_id,
327 'custnum' => $cgi->param('custnum'),
328 'svcnum' => $cgi->param('svcnum'),
331 $action = 'agent_provision';
334 %{agent_provision()},
335 'message' => $result->{'error'}
336 ? '<FONT COLOR="#FF0000">'. $result->{'error'}. '</FONT>'
337 : $result->{'svc'}. ' removed.'
342 sub process_order_pkg {
346 unless ( length($cgi->param('_password')) ) {
347 my $init_data = signup_info( 'session_id' => $session_id );
348 #die $init_data->{'error'} if $init_data->{'error'};
349 $results = { 'error' => $init_data->{msgcat}{empty_password} };
351 if ( $cgi->param('_password') ne $cgi->param('_password2') ) {
352 my $init_data = signup_info( 'session_id' => $session_id );
353 $results = { 'error' => $init_data->{msgcat}{passwords_dont_match} };
354 $cgi->param('_password', '');
355 $cgi->param('_password2', '');
358 $results ||= order_pkg (
359 'agent_session_id' => $session_id,
360 map { $_ => $cgi->param($_) }
361 qw( custnum pkgpart username _password _password2 sec_phrase popnum )
364 if ( $results->{'error'} ) {
365 $action = 'agent_order_pkg';
368 %{agent_order_pkg()},
369 #'message' => '<FONT COLOR="#FF0000">'. $results->{'error'}. '</FONT>',
370 'error' => '<FONT COLOR="#FF0000">'. $results->{'error'}. '</FONT>',
373 $action = 'view_customer';
374 #$cgi->delete( grep { $_ ne 'custnum' } $cgi->param );
377 'message' => 'Package order sucessful.',
388 #warn join(' / ', map { "$_=>".$fill_in->{$_} } keys %$fill_in). "\n";
391 $fill_in->{'selfurl'} = $cgi->self_url;
392 $fill_in->{'cgi'} = \$cgi;
394 my $template = new Text::Template( TYPE => 'FILE',
395 SOURCE => "$template_dir/$name.html",
396 DELIMITERS => [ '<%=', '%>' ],
398 or die $Text::Template::ERROR;
401 print $cgi->header( '-expires' => 'now' ),
402 $template->fill_in( PACKAGE => 'FS::SelfService::_agentcgi',
407 package FS::SelfService::_agentcgi;
410 use FS::SelfService qw(regionselector expselect popselector);
412 #false laziness w/selfservice.cgi
415 my $template = new Text::Template( TYPE => 'FILE',
416 SOURCE => "$main::template_dir/$name.html",
417 DELIMITERS => [ '<%=', '%>' ],
420 or die $Text::Template::ERROR;
422 $template->fill_in( PACKAGE => 'FS::SelfService::_agentcgi',