torrus various changes, RT10574
[freeside.git] / fs_selfservice / FS-SelfService / cgi / selfservice.cgi
index 3f0562a..1db0c58 100644 (file)
@@ -8,6 +8,7 @@ use CGI::Carp qw(fatalsToBrowser);
 use Text::Template;
 use HTML::Entities;
 use Date::Format;
+use Date::Parse 'str2time';
 use Number::Format 1.50;
 use FS::SelfService qw(
   access_info login_info login customer_info edit_info invoice
@@ -16,8 +17,8 @@ use FS::SelfService qw(
   part_svc_info provision_acct provision_external provision_phone
   unprovision_svc change_pkg suspend_pkg domainselector
   list_svcs list_svc_usage list_cdr_usage list_support_usage
-  myaccount_passwd list_invoices create_ticket get_ticket
-  mason_comp
+  myaccount_passwd list_invoices create_ticket get_ticket did_report
+  mason_comp port_graph
 );
 
 $template_dir = '.';
@@ -128,8 +129,8 @@ die $@ if $@;
 
 warn Dumper($result) if $DEBUG;
 
-if ( $result->{error} eq "Can't resume session"
-  || $result->{error} eq "Expired session" ) { #ick
+if ( $result->{error} && ( $result->{error} eq "Can't resume session"
+  || $result->{error} eq "Expired session") ) { #ick
 
   my $login_info = login_info();
   do_template('login', $login_info);
@@ -679,6 +680,15 @@ sub logout {
   FS::SelfService::logout( 'session_id' => $session_id );
 }
 
+sub didreport {
+  my $result = did_report( 'session_id' => $session_id, 
+           'format' => $cgi->param('type'),
+           'recentonly' => $cgi->param('recentonly'),
+       );
+  die $result->{'error'} if exists $result->{'error'} && $result->{'error'};
+  $result;
+}
+
 sub provision {
   my $result = list_pkgs( 'session_id' => $session_id );
   die $result->{'error'} if exists $result->{'error'} && $result->{'error'};
@@ -701,6 +711,7 @@ sub provision_svc {
   $action .= "_$1";
 
   $result->{'numavail'} = $cgi->param('numavail');
+  $result->{'lnp'} = $cgi->param('lnp');
 
   $result;
 }
@@ -708,14 +719,26 @@ sub provision_svc {
 sub process_svc_phone {
     my @bulkdid = $cgi->param('bulkdid');
     my $phonenum = $cgi->param('phonenum');
+    my $lnp = $cgi->param('lnp');
+
+    my $result;
+    if($lnp) {
+       $result = provision_phone (
+           'session_id' => $session_id,
+           'countrycode' => '1',
+            map { $_ => $cgi->param($_) } qw( pkgnum svcpart phonenum 
+               lnp_desired_due_date lnp_other_provider 
+               lnp_other_provider_account )
+       );
+    } else {
+       $result = provision_phone (
+           'session_id' => $session_id,
+           'bulkdid' => [ @bulkdid ],
+           'countrycode' => '1',
+            map { $_ => $cgi->param($_) } qw( pkgnum svcpart phonenum )
+       );
+    }
 
-    my $result = provision_phone (
-       'session_id' => $session_id,
-       'bulkdid' => [ @bulkdid ],
-       'countrycode' => '1',
-        map { $_ => $cgi->param($_) } qw( pkgnum svcpart phonenum )
-    );
-    
     if ( exists $result->{'error'} && $result->{'error'} ) { 
        $action = 'provision_svc_phone';
        return {
@@ -774,18 +797,31 @@ sub delete_svc {
 sub view_usage {
   list_svcs(
     'session_id'  => $session_id,
-    'svcdb'       => [ 'svc_acct', 'svc_phone' ],
+    'svcdb'       => [ 'svc_acct', 'svc_phone', 'svc_port', ],
     'ncancelled'  => 1,
   );
 }
 
 sub view_usage_details {
-  list_svc_usage(
-    'session_id'  => $session_id,
-    'svcnum'      => $cgi->param('svcnum'),
-    'beginning'   => $cgi->param('beginning') || '',
-    'ending'      => $cgi->param('ending') || '',
-  );
+   my $svcnum = $cgi->param('svcnum');
+
+    # for svc_port graphs
+    if($cgi->param($svcnum.'_start') && $cgi->param($svcnum.'_end')) {
+       return port_graph(
+           'session_id'  => $session_id,
+           'svcnum'      => $svcnum,
+           'start'       => str2time($cgi->param($svcnum.'_start')),
+           'end'       => str2time($cgi->param($svcnum.'_end')),
+           );
+    }
+    else {
+      return list_svc_usage(
+       'session_id'  => $session_id,
+       'svcnum'      => $svcnum,
+       'beginning'   => $cgi->param('beginning') || '',
+       'ending'      => $cgi->param('ending') || '',
+      );
+    }
 }
 
 sub view_cdr_details {
@@ -865,14 +901,32 @@ sub do_template {
                                    )
     or die $Text::Template::ERROR;
 
-  #warn "filling in $template with $fill_in\n";
-  my $data = $template->fill_in( 
-    PACKAGE => 'FS::SelfService::_selfservicecgi',
-    HASH    => $fill_in,
-  ) || "Error processing template $source"; # at least print _something_
-  print $cgi->header( '-expires' => 'now' );
-  print $data;
-}
+    if($result && ref($result) && $result->{'format'} && $result->{'content'}
+       && $result->{'format'} eq 'csv') {
+       print $cgi->header('-expires' => 'now',
+               '-Content-Type' => 'text/csv',
+               '-Content-Disposition' => "attachment;filename=output.csv",
+               ),
+           $result->{'content'};
+    }
+    elsif($result && ref($result) && $result->{'format'} && $result->{'content'}
+        && $result->{'format'} eq 'xls') {
+       print $cgi->header('-expires' => 'now',
+                   '-Content-Type' => 'application/vnd.ms-excel',
+                   '-Content-Disposition' => "attachment;filename=output.xls",
+                   '-Content-Length' => length($result->{'content'}),
+                   ),
+                   $result->{'content'};
+    }
+    else {
+       my $data = $template->fill_in( 
+           PACKAGE => 'FS::SelfService::_selfservicecgi',
+           HASH    => $fill_in,
+         ) || "Error processing template $source"; # at least print _something_
+         print $cgi->header( '-expires' => 'now' );
+         print $data;
+    }
+ }
 
 #*FS::SelfService::_selfservicecgi::include = \&Text::Template::fill_in_file;