Merge branch 'fix_category_table' of https://github.com/jgoodman/Freeside into jgoodm...
authorIvan Kohler <ivan@freeside.biz>
Sat, 17 Jan 2015 02:38:06 +0000 (18:38 -0800)
committerIvan Kohler <ivan@freeside.biz>
Sat, 17 Jan 2015 02:38:06 +0000 (18:38 -0800)
FS/FS/cust_main/Billing_Realtime.pm
FS/FS/part_pkg/voip_cdr.pm
FS/FS/svc_acct.pm
httemplate/elements/mac_addr.html [new file with mode: 0644]
httemplate/view/cust_main/packages/package.html
httemplate/view/elements/svc_Common.html

index 6c75fe9..330a454 100644 (file)
@@ -3,6 +3,7 @@ package FS::cust_main::Billing_Realtime;
 use strict;
 use vars qw( $conf $DEBUG $me );
 use vars qw( $realtime_bop_decline_quiet ); #ugh
+use Carp;
 use Data::Dumper;
 use Business::CreditCard 0.28;
 use FS::UID qw( dbh );
@@ -319,6 +320,10 @@ my %bop_method2payby = (
 sub realtime_bop {
   my $self = shift;
 
+  confess "Can't call realtime_bop within another transaction ".
+          '($FS::UID::AutoCommit is false)'
+    unless $FS::UID::AutoCommit;
+
   local($DEBUG) = $FS::cust_main::DEBUG if $FS::cust_main::DEBUG > $DEBUG;
  
   my %options = ();
index e3fdd79..205335b 100644 (file)
@@ -683,6 +683,7 @@ sub reset_usage {
 
 # tells whether cust_bill_pkg_detail should return a single line for 
 # each phonenum
+# i think this is currently unused?
 sub sum_usage {
   my $self = shift;
   $self->option('output_format') =~ /^sum_/;
index 62d7b87..452f250 100644 (file)
@@ -294,25 +294,21 @@ sub table_info {
                          label => 'Quota', #Mail storage limit
                          type => 'text',
                          disable_inventory => 1,
-                         disable_select => 1,
                        },
         'file_quota'=> { 
                          label => 'File storage limit',
                          type => 'text',
                          disable_inventory => 1,
-                         disable_select => 1,
                        },
         'file_maxnum'=> { 
                          label => 'Number of files limit',
                          type => 'text',
                          disable_inventory => 1,
-                         disable_select => 1,
                        },
         'file_maxsize'=> { 
                          label => 'File size limit',
                          type => 'text',
                          disable_inventory => 1,
-                         disable_select => 1,
                        },
         '_password' => 'Password',
         'gid'       => {
diff --git a/httemplate/elements/mac_addr.html b/httemplate/elements/mac_addr.html
new file mode 100644 (file)
index 0000000..1d867f5
--- /dev/null
@@ -0,0 +1,53 @@
+% if (!$init) {
+%   if ($clipboard_hack) {
+<& init_overlib.html &>
+<script>
+<&| /elements/onload.js &>
+  var transform_text = function(str) {
+    var regexp = new RegExp('.*(..):(..):(..):(..):(..):(..).*');
+    return  str.replace(regexp, '$1$2$3$4$5$6');
+  }
+  var span_onclick = function() {
+    var input = document.createElement('INPUT');
+    // IE8 doesn't support textContent
+    var str = this.textContent || this.innerText || '';
+    input.value = transform_text(str);
+    input.style.position = 'absolute';
+    input.style.top = '0px';
+    input.style.left = '0px';
+    input.onblur = function() { input.parentNode.removeChild(input) }
+    this.appendChild(input);
+    input.select();
+  }
+  // set this on any ".mac_addr" object in the doc
+
+  // IE8 doesn't support getElementsByClassName
+  var els = document.getElementsByTagName('span');
+  for (var i = 0; i < els.length; i++) {
+    if (els[i].className = 'mac_addr') {
+      els[i].id = 'span_mac_addr' + i;
+      els[i].onclick = span_onclick;
+    }
+  }
+</&>
+</SCRIPT>
+<style type="text/css">
+.mac_addr {
+  border-bottom: 1px dotted blue;
+  color: blue;
+  position: relative;
+}
+</style>
+%   } # if $clipboard_hack
+% $init++;
+% }
+%# the only part to be included in every instance
+<SPAN CLASS="mac_addr"><% $value |h %></SPAN>
+<%shared>
+my $init = 0;
+</%shared>
+<%init>
+my $clipboard_hack =
+  $FS::CurrentUser::CurrentUser->option('enable_mask_clipboard_hack');
+my $value = shift; # no other params
+</%init>
index cf5c98a..e47d891 100644 (file)
 %           # One-time charge.  Nothing you can do with this, unless:
 %           if ( $curuser->access_right('Modify one-time charge') ) {
                 (&nbsp;<%onetime_change_link($cust_pkg)%>&nbsp;)
-                <BR>
 %           }
+%           # also, you can discount it
+%           if ( $curuser->access_right('Discount customer package')
+%                && ! scalar($cust_pkg->cust_pkg_discount_active)
+%                && ! scalar($cust_pkg->part_pkg->part_pkg_discount)
+%              ) {
+              (&nbsp;<%pkg_discount_link($cust_pkg)%>&nbsp;)
+%           }
+          <BR>
 %
 %         } elsif ( !$cust_pkg->get('cancel') and !$opt{no_links} ) {
 %
index 6c5c902..b7f7a2c 100644 (file)
@@ -222,6 +222,7 @@ my $format_field = sub {
     $field = $f;
     $type = 'text';
   }
+  warn "$field\t$type\t$value\n";
 
   my $columndef = $part_svc->part_svc_column($field);
   # skip fields that are fixed and empty
@@ -273,8 +274,10 @@ my $format_field = sub {
     $value = time2str("$date_format %H:%M",$value)
   } elsif ( $type eq 'checkbox' ) {
     $value = $value eq 'Y' ? emt('Yes') : emt('No');
-  } elsif ( $type eq 'mac_addr' and $value =~ /\w/) {
-    $value .= ' ('. (Net::MAC::Vendor::lookup($value))->[0]. ')'
+  } elsif ( $type =~ /(input-)?mac_addr/ and $value =~ /\w/) {
+    my $vendor = Net::MAC::Vendor::lookup($value)->[0];
+    $value .= " ($vendor)" if $vendor;
+    $value = $m->scomp('/elements/mac_addr.html', $value);
   }
 
   # 'link' option