allow exports to add links to customer view (#1407)
[freeside.git] / FS / FS / UI / Web.pm
index 7699a7d..e4a9ac1 100644 (file)
@@ -5,6 +5,7 @@ use vars qw($DEBUG @ISA @EXPORT_OK $me);
 use Exporter;
 use FS::Conf;
 use FS::Record qw(dbdef);
+use FS::cust_main;  # are sql_balance and sql_date_balance in the right module?
 
 #use vars qw(@ISA);
 #use FS::UI
@@ -148,6 +149,14 @@ sub svc_X_link {
   "$ahref$x</A>";
 }
 
+sub svc_export_links {
+  my ($m, $part_svc, $cust_svc) = @_ or return '';
+
+  my $ahref = $cust_svc->export_links;
+
+  join('', @$ahref);
+}
+
 sub parse_lt_gt {
   my($cgi, $field) = @_;
 
@@ -163,7 +172,7 @@ sub parse_lt_gt {
     warn "checking for ${field}_$op field\n"
       if $DEBUG;
 
-    if ( $cgi->param($field."_$op") =~ /^\s*\$?\s*([\d\,\s]+(\.\d\d)?)\s*$/ ) {
+    if ( $cgi->param($field."_$op") =~ /^\s*\$?\s*(-?[\d\,\s]+(\.\d\d)?)\s*$/ ) {
 
       my $num = $1;
       $num =~ s/[\,\s]+//g;
@@ -220,7 +229,10 @@ sub cust_header {
     'Country'                  => 'country_full',
     'Day phone'                => 'daytime', # XXX should use msgcat, but how?
     'Night phone'              => 'night',   # XXX should use msgcat, but how?
+    'Fax number'               => 'fax',
     'Invoicing email(s)'       => 'invoicing_list_emailonly_scalar',
+    'Payment Type'             => 'payby',
+    'Current Balance'          => 'current_balance',
   );
 
   my %header2colormethod = (
@@ -296,9 +308,14 @@ sub cust_sql_fields {
   #inefficientish, but tiny lists and only run once per page
   push @fields,
     grep { my $field = $_; grep { $_ eq $field } @cust_fields }
-         qw( address1 address2 city state zip daytime night );
+         qw( address1 address2 city state zip daytime night fax payby );
+
+  my @extra_fields = ();
+  if (grep { $_ eq 'current_balance' } @cust_fields) {
+    push @extra_fields, FS::cust_main->balance_sql . " AS current_balance";
+  }
 
-  map "cust_main.$_", @fields;
+  map("cust_main.$_", @fields), @extra_fields;
 }
 
 =item cust_fields OBJECT [ CUST_FIELDS_VALUE ]
@@ -410,7 +427,7 @@ use Carp;
 use Storable qw(nfreeze);
 use MIME::Base64;
 use JSON;
-use FS::UID;
+use FS::UID qw(getotaker);
 use FS::Record qw(qsearchs);
 use FS::queue;
 
@@ -483,6 +500,7 @@ sub start_job {
       push @{$param{$field}}, $value;
     }
   }
+  $param{CurrentUser} = getotaker();
   warn "FS::UI::Web::start_job\n".
        join('', map {
                       if ( ref($param{$_}) ) {