[freeside-commits] branch master updated. ce89af6a65868fd0f5cde05ef866611aacad39aa

Ivan ivan at 420.am
Tue Oct 8 23:04:21 PDT 2013


The branch, master has been updated
       via  ce89af6a65868fd0f5cde05ef866611aacad39aa (commit)
       via  fe4515eb37d76849dd08c62782d86bc7ba311dcd (commit)
       via  f2766e203e1aa144d046a26cf13e01e1f5b00f64 (commit)
       via  d046cb57be3c1a74362d15e90486239cc8a5f4d7 (commit)
      from  744c7da5bad2de7b4e0f9f3d416e46e0671eb3ff (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ce89af6a65868fd0f5cde05ef866611aacad39aa
Merge: fe4515e 744c7da
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Tue Oct 8 23:04:11 2013 -0700

    Merge branch 'master' of git.freeside.biz:/home/git/freeside


commit fe4515eb37d76849dd08c62782d86bc7ba311dcd
Merge: f2766e2 81ae099
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Tue Oct 8 23:00:26 2013 -0700

    Merge branch 'master' of git.freeside.biz:/home/git/freeside
    
    Conflicts:
    	FS/FS/cust_main.pm

diff --cc FS/FS/Mason.pm
index 780e3ff,f1fc5cb..1215ca4
--- a/FS/FS/Mason.pm
+++ b/FS/FS/Mason.pm
@@@ -353,6 -353,8 +353,9 @@@ if ( -e $addl_handler_use_file ) 
    use FS::sales_pkg_class;
    use FS::svc_alarm;
    use FS::cable_model;
+   use FS::invoice_mode;
+   use FS::invoice_conf;
++  use FS::cable_provider;
    # Sammath Naur
  
    if ( $FS::Mason::addl_handler_use ) {
diff --cc FS/FS/Record.pm
index fd03524,fd03524..71eddc1
--- a/FS/FS/Record.pm
+++ b/FS/FS/Record.pm
@@@ -3038,13 -3038,13 +3038,8 @@@ Checks to see if the string is encrypte
  
  sub is_encrypted {
    my ($self, $value) = @_;
--  # Possible Bug - Some work may be required here....
--
--  if ($value =~ /^M/ && length($value) > 80) {
--    return 1;
--  } else {
--    return 0;
--  }
++  # could be more precise about it, but this will do for now
++  $value =~ /^M/ && length($value) > 80;
  }
  
  =item decrypt($value)
diff --cc FS/FS/Schema.pm
index ed37904,5ea24e4..e44b74e
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@@ -4272,6 -4272,6 +4272,8 @@@ sub tables_hashref 
      'svc_cable' => {
        'columns' => [
          'svcnum',        'int',     '',      '', '', '', 
++        'providernum',   'int', 'NULL',      '', '', '',
++        # XXX "Circuit ID/Order number"
          'modelnum',      'int', 'NULL',      '', '', '',
          'serialnum', 'varchar', 'NULL', $char_d, '', '',
          'mac_addr',  'varchar', 'NULL',      12, '', '', 
@@@ -4292,6 -4292,6 +4294,17 @@@
        'index'  => [],
      },
  
++    'cable_provider' => {
++      'columns' => [
++        'providernum', 'serial',     '',      '', '', '',
++        'provider',   'varchar',     '', $char_d, '', '',
++        'disabled',      'char', 'NULL',       1, '', '', 
++      ],
++      'primary_key' => 'providernum',
++      'unique' => [ [ 'provider' ], ],
++      'index'  => [],
++    },
++
      'vend_main' => {
        'columns' => [
          'vendnum',   'serial',     '',      '', '', '',
diff --cc FS/FS/cable_provider.pm
index 0000000,0000000..e988192
new file mode 100644
--- /dev/null
+++ b/FS/FS/cable_provider.pm
@@@ -1,0 -1,0 +1,112 @@@
++package FS::cable_provider;
++
++use strict;
++use base qw( FS::Record );
++use FS::Record qw( qsearch qsearchs );
++
++=head1 NAME
++
++FS::cable_provider - Object methods for cable_provider records
++
++=head1 SYNOPSIS
++
++  use FS::cable_provider;
++
++  $record = new FS::cable_provider \%hash;
++  $record = new FS::cable_provider { 'column' => 'value' };
++
++  $error = $record->insert;
++
++  $error = $new_record->replace($old_record);
++
++  $error = $record->delete;
++
++  $error = $record->check;
++
++=head1 DESCRIPTION
++
++An FS::cable_provider object represents a cable service provider.
++FS::cable_provider inherits from FS::Record.  The following fields are
++currently supported:
++
++=over 4
++
++=item providernum
++
++primary key
++
++=item provider
++
++provider
++
++=item disabled
++
++disabled
++
++
++=back
++
++=head1 METHODS
++
++=over 4
++
++=item new HASHREF
++
++Creates a new provider.  To add the provider to the database, see L<"insert">.
++
++Note that this stores the hash reference, not a distinct copy of the hash it
++points to.  You can ask the object for a copy with the I<hash> method.
++
++=cut
++
++# the new method can be inherited from FS::Record, if a table method is defined
++
++sub table { 'cable_provider'; }
++
++=item insert
++
++Adds this record to the database.  If there is an error, returns the error,
++otherwise returns false.
++
++=item delete
++
++Delete this record from the database.
++
++=item replace OLD_RECORD
++
++Replaces the OLD_RECORD with this one in the database.  If there is an error,
++returns the error, otherwise returns false.
++
++=item check
++
++Checks all fields to make sure this is a valid provider.  If there is
++an error, returns the error, otherwise returns false.  Called by the insert
++and replace methods.
++
++=cut
++
++sub check {
++  my $self = shift;
++
++  my $error = 
++    $self->ut_numbern('providernum')
++    || $self->ut_text('provider')
++    || $self->ut_enum('disabled', [ '', 'Y' ] )
++  ;
++  return $error if $error;
++
++  $self->SUPER::check;
++}
++
++=back
++
++=head1 BUGS
++
++=head1 SEE ALSO
++
++L<FS::Record>, schema.html from the base documentation.
++
++=cut
++
++1;
++
diff --cc FS/FS/cust_pkg.pm
index 19ef1f3,19ef1f3..0cb1b50
--- a/FS/FS/cust_pkg.pm
+++ b/FS/FS/cust_pkg.pm
@@@ -2613,14 -2613,14 +2613,30 @@@ sub part_pkg_currency_option 
  
  =item cust_svc [ OPTION => VALUE ... ] (current usage)
  
++=item cust_svc_unsorted [ OPTION => VALUE ... ] 
++
  Returns the services for this package, as FS::cust_svc objects (see
  L<FS::cust_svc>).  Available options are svcpart and svcdb.  If either is
  spcififed, returns only the matching services.
  
++As an optimization, use the cust_svc_unsorted version if you are not displaying
++the results.
++
  =cut
  
  sub cust_svc {
    my $self = shift;
++  cluck "cust_pkg->cust_svc called" if $DEBUG > 2;
++  $self->_sort_cust_svc( $self->cust_svc_unsorted_arrayref );
++}
++
++sub cust_svc_unsorted {
++  my $self = shift;
++  @{ $self->cust_svc_unsorted_arrayref };
++}
++
++sub cust_svc_unsorted_arrayref {
++  my $self = shift;
  
    return () unless $self->num_cust_svc(@_);
  
@@@ -2645,13 -2645,13 +2661,7 @@@
      $search{extra_sql} = ' AND svcdb = '. dbh->quote( $opt{'svcdb'} );
    }
  
--  cluck "cust_pkg->cust_svc called" if $DEBUG > 2;
--
--  #if ( $self->{'_svcnum'} ) {
--  #  values %{ $self->{'_svcnum'}->cache };
--  #} else {
--    $self->_sort_cust_svc( [ qsearch(\%search) ] );
--  #}
++  [ qsearch(\%search) ];
  
  }
  
diff --cc FS/FS/part_event/Condition/pkg_age_Common.pm
index 726b01d,726b01d..33e49b8
--- a/FS/FS/part_event/Condition/pkg_age_Common.pm
+++ b/FS/FS/part_event/Condition/pkg_age_Common.pm
@@@ -49,7 -49,7 +49,7 @@@ sub condition 
  }
  
  sub pkg_age_age {
--  my( $self, $cust_pkg, %opt );
++  my( $self, $cust_pkg, %opt ) = @_;
    $self->option_age_from('age', $opt{'time'} );
  }
  
diff --cc FS/FS/part_export/domain_shellcommands.pm
index 582e292,582e292..8e85d71
--- a/FS/FS/part_export/domain_shellcommands.pm
+++ b/FS/FS/part_export/domain_shellcommands.pm
@@@ -49,8 -49,8 +49,7 @@@ The following variables are available f
    <LI><code>$uid</code> - of catchall account
    <LI><code>$gid</code> - of catchall account
    <LI><code>$dir</code> - home directory of catchall account
--  <LI>All other fields in
--    <a href="../docs/schema.html#svc_domain">svc_domain</a> are also available.
++  <LI>All other fields in <b>svc_domain</b> are also available.
  </UL>
  END
  );
diff --cc FS/FS/part_export/shellcommands_withdomain.pm
index 1b59589,1b59589..29715b7
--- a/FS/FS/part_export/shellcommands_withdomain.pm
+++ b/FS/FS/part_export/shellcommands_withdomain.pm
@@@ -141,7 -141,7 +141,32 @@@ The following variables are available f
    <LI><code>$shell</code>
    <LI><code>$quota</code>
    <LI><code>@radius_groups</code>
--  <LI>All other fields in <a href="../docs/schema.html#svc_acct">svc_acct</a> are also available.
++  <LI><code>$reasonnum (when suspending)</code>
++  <LI><code>$reasontext (when suspending)</code>
++  <LI><code>$reasontypenum (when suspending)</code>
++  <LI><code>$reasontypetext (when suspending)</code>
++  <LI><code>$pkgnum</code>
++  <LI><code>$custnum</code>
++  <LI>All other fields in <b>svc_acct</b> are also available.
++  <LI>The following fields from <b>cust_main</b> are also available (except during replace): company, address1, address2, city, state, zip, county, daytime, night, fax, otaker, agent_custid, locale.  When used on the command line (rather than STDIN), they will be quoted for the shell already (do not add additional quotes).
++</UL>
++For the package changed command only, the following fields are also available:
++<UL>
++  <LI>$old_pkgnum and $new_pkgnum
++  <LI>$old_pkgpart and $new_pkgpart
++  <LI>$old_agent_pkgid and $new_agent_pkgid
++  <LI>$old_order_date and $new_order_date
++  <LI>$old_start_date and $new_start_date
++  <LI>$old_setup and $new_setup
++  <LI>$old_bill and $new_bill
++  <LI>$old_last_bill and $new_last_bill
++  <LI>$old_susp and $new_susp
++  <LI>$old_adjourn and $new_adjourn
++  <LI>$old_resume and $new_resume
++  <LI>$old_cancel and $new_cancel
++  <LI>$old_unancel and $new_unancel
++  <LI>$old_expire and $new_expire
++  <LI>$old_contract_end and $new_contract_end
  </UL>
  END
  );
diff --cc FS/FS/svc_cable.pm
index 1980c0e,1980c0e..596f699
--- a/FS/FS/svc_cable.pm
+++ b/FS/FS/svc_cable.pm
@@@ -4,6 -4,6 +4,7 @@@ use base qw( FS::svc_Common ); #qw( FS:
  use strict;
  use Tie::IxHash;
  use FS::Record qw( qsearchs ); # qw( qsearch qsearchs );
++use FS::cable_provider;
  use FS::cable_model;
  
  =head1 NAME
@@@ -72,24 -72,24 +73,35 @@@ sub search_sql 
  sub table_info {
  
    tie my %fields, 'Tie::IxHash',
--    'svcnum'     => 'Service',
--    'modelnum'   => { label             => 'Model',
--                      type              => 'select-cable_model',
--                      disable_inventory => 1,
--                      disable_select    => 1,
--                      value_callback    => sub {
--                                             my $svc = shift;
--                                             $svc->cable_model->model_name;
--                                           },
--                    },
--    'serialnum'  => 'Serial number',
--    'mac_addr'   => { label          => 'MAC address',
--                      type           => 'input-mac_addr',
--                      value_callback => sub {
--                                          my $svc = shift;
--                                          join(':', $svc->mac_addr =~ /../g);
--                                        },
--                    },
++    'svcnum'      => 'Service',
++    'providernum' => { label             => 'Provider',
++                       type              => 'select-cable_provider',
++                       disable_inventory => 1,
++                       disable_select    => 1,
++                       value_callback    => sub {
++                                              my $svc = shift;
++                                              my $p = $svc->cable_provider;
++                                              $p ? $p->provider : '';
++                                            },
++                     },
++    #XXX "Circuit ID/Order number"
++    'modelnum'    => { label             => 'Model',
++                       type              => 'select-cable_model',
++                       disable_inventory => 1,
++                       disable_select    => 1,
++                       value_callback    => sub {
++                                              my $svc = shift;
++                                              $svc->cable_model->model_name;
++                                            },
++                     },
++    'serialnum'   => 'Serial number',
++    'mac_addr'    => { label          => 'MAC address',
++                       type           => 'input-mac_addr',
++                       value_callback => sub {
++                                           my $svc = shift;
++                                           join(':', $svc->mac_addr =~ /../g);
++                                         },
++                     },
    ;
  
    {
@@@ -130,6 -130,6 +142,7 @@@ sub check 
  
    my $error = 
         $self->ut_numbern('svcnum')
++    || $self->ut_foreign_key('providernum', 'cable_provider', 'providernum')
      || $self->ut_foreign_key('modelnum', 'cable_model', 'modelnum')
      || $self->ut_alpha('serialnum')
      || $self->ut_mac_addr('mac_addr')
@@@ -139,6 -139,6 +152,17 @@@
    $self->SUPER::check;
  }
  
++=item cable_provider
++
++Returns the cable_provider object for this record.
++
++=cut
++
++sub cable_provider {
++  my $self = shift;
++  qsearchs('cable_provider', { 'providernum'=>$self->providernum } );
++}
++
  =item cable_model
  
  Returns the cable_model object for this record.
diff --cc FS/MANIFEST
index a3b11f7,339965e..5dbe754
--- a/FS/MANIFEST
+++ b/FS/MANIFEST
@@@ -720,3 -720,7 +720,9 @@@ FS/svc_alarm.p
  t/svc_alarm.t
  FS/cable_model.pm
  t/cable_model.t
+ FS/invoice_mode.pm
+ t/invoice_mode.t
+ FS/invoice_conf.pm
+ t/invoice_conf.t
++FS/cable_provider.pm
++t/cable_provider.t
diff --cc FS/t/cable_provider.t
index 0000000,0000000..c794379
new file mode 100644
--- /dev/null
+++ b/FS/t/cable_provider.t
@@@ -1,0 -1,0 +1,5 @@@
++BEGIN { $| = 1; print "1..1\n" }
++END {print "not ok 1\n" unless $loaded;}
++use FS::cable_provider;
++$loaded=1;
++print "ok 1\n";
diff --cc bin/test-event
index d3a9f11,d3a9f11..73c9d31
mode 100644,100644..100755
--- a/bin/test-event
+++ b/bin/test-event
@@@ -34,7 -34,7 +34,10 @@@ print "\n"
  
  my @conditions = $part_event->part_event_condition;
  foreach my $condition ( @conditions ) {
--  my $sat = $condition->condition( $object, 'cust_event' => $cust_event );
++  my $sat = $condition->condition( $object,
++                                   'cust_event' => $cust_event,
++                                   'time' => time,
++                                 );
  
    my $sql = $condition->condition_sql();
    
diff --cc httemplate/browse/cable_provider.html
index 0000000,0000000..0d34498
new file mode 100644
--- /dev/null
+++ b/httemplate/browse/cable_provider.html
@@@ -1,0 -1,0 +1,32 @@@
++<& elements/browse.html,
++     'title'              => 'Cable providers',
++     'html_init'          => $html_init,
++     'name'               => 'providers',
++     'disableable'        => 1,
++     'disabled_statuspos' => 1,
++     'query'              => { 'table'     => 'cable_provider',
++                               'hashref'   => {},
++                               'order_by' => 'ORDER BY provider',
++                             },
++     'count_query'        => $count_query,
++     'header'             => $header,
++     'fields'             => $fields,
++     'links'              => $links,
++&>
++<%init>
++
++die "access denied"
++  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
++
++my $html_init =
++  qq!<A HREF="${p}edit/cable_provider.html"><I>Add a provider</I></A><BR><BR>!;
++
++my $count_query = 'SELECT COUNT(*) FROM cable_provider';
++
++my $link = [ $p.'edit/cable_provider.html?', 'providernum' ];
++
++my $header = [ 'Provider' ];
++my $fields = [ 'provider' ];
++my $links  = [ $link ];
++
++</%init>
diff --cc httemplate/docs/about.html
index c2ba4e4,c2ba4e4..80d9488
--- a/httemplate/docs/about.html
+++ b/httemplate/docs/about.html
@@@ -56,7 -56,7 +56,7 @@@ GNU <b>Affero</b> General Public Licens
  
  % unless ( $agentnum ) {
    <CENTER>
--  <FONT SIZE="-3">"I can't figure out ... if it's an end or the beginning" - R. Hunter</FONT>
++  <FONT SIZE="-3">"" - R. Hunter</FONT>
    </CENTER>
  % }
  
diff --cc httemplate/edit/cable_provider.html
index 0000000,0000000..9a911cc
new file mode 100644
--- /dev/null
+++ b/httemplate/edit/cable_provider.html
@@@ -1,0 -1,0 +1,20 @@@
++<& elements/edit.html,
++     'name_singular' => 'Provider',
++     'table'         => 'cable_provider',
++     'fields'        => [
++                          'provider',
++                          { field=>'disabled', type=>'checkbox', value=>'Y', },
++                        ],
++     'labels'        => {
++                          'providernum' => 'Provider',
++                          'provider'    => 'Provider',
++                          'disabled'    => 'Disabled',
++                        },
++     'viewall_dir'   => 'browse',
++&>
++<%init>
++
++die "access denied"
++  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
++
++</%init>
diff --cc httemplate/edit/process/cable_provider.html
index 0000000,0000000..ecffaf6
new file mode 100644
--- /dev/null
+++ b/httemplate/edit/process/cable_provider.html
@@@ -1,0 -1,0 +1,10 @@@
++<& elements/process.html,
++     'table'       => 'cable_provider',
++     'viewall_dir' => 'browse',
++&>
++<%init>
++
++die "access denied"
++  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
++
++</%init>
diff --cc httemplate/elements/menu.html
index 8cbbd17,c8fe5f2..8cb9675
--- a/httemplate/elements/menu.html
+++ b/httemplate/elements/menu.html
@@@ -517,6 -521,6 +521,7 @@@ tie my %config_radius, 'Tie::IxHash'
  ;
  
  tie my %config_cable, 'Tie::IxHash',
++  'Cable providers' => [ $fsurl.'browse/cable_provider.html', '' ],
    'Cable modem models' => [ $fsurl.'browse/cable_model.html', '' ],
  ;
  
diff --cc httemplate/elements/select-cable_provider.html
index 0000000,0000000..9530b78
new file mode 100644
--- /dev/null
+++ b/httemplate/elements/select-cable_provider.html
@@@ -1,0 -1,0 +1,7 @@@
++<% include( '/elements/select-table.html',
++    'table'            => 'cable_provider',
++    'name_col'         => 'provider',
++    'empty_label'      => 'Select provider',
++    @_,
++   )
++%>
diff --cc httemplate/elements/tr-select-cable_provider.html
index 0000000,0000000..abb8564
new file mode 100644
--- /dev/null
+++ b/httemplate/elements/tr-select-cable_provider.html
@@@ -1,0 -1,0 +1,12 @@@
++% #if ( scalar(@domains) < 2 ) {
++% #} else {
++  <TR>
++    <TD ALIGN="right"><% $opt{'label'} || 'Provider' %></TD>
++    <TD>
++      <% include( '/elements/select-cable_provider.html', %opt) %>
++    </TD>
++   </TR>
++% #}
++<%init>
++  my %opt = @_;
++</%init>
diff --cc httemplate/view/cust_main.cgi
index 430c50c,430c50c..3919881
--- a/httemplate/view/cust_main.cgi
+++ b/httemplate/view/cust_main.cgi
@@@ -147,7 -147,7 +147,6 @@@ function areyousure(href, message) 
  % if ( $br ) {
    <BR><BR>
  % }
--</%doc>
  
  %my $signupurl = $conf->config('signupurl');
  %if ( $signupurl ) {
diff --cc ng_selfservice/.freeside.class.php.swp
index 5c39524,5c39524..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.freeside.class.php.swp
+++ /dev/null
diff --cc ng_selfservice/.index.php.swp
index 50c9cfb,50c9cfb..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.index.php.swp
+++ /dev/null
diff --cc ng_selfservice/.logout.php.swp
index ec27faa,ec27faa..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.logout.php.swp
+++ /dev/null
diff --cc ng_selfservice/.main.php.swp
index cc55626,cc55626..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.main.php.swp
+++ /dev/null
diff --cc ng_selfservice/.password.php.swp
index e1e968f,e1e968f..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.password.php.swp
+++ /dev/null
diff --cc ng_selfservice/.payment.php.swp
index 2b705a3,2b705a3..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.payment.php.swp
+++ /dev/null
diff --cc ng_selfservice/.payment_ach.php.swp
index 1a87a2d,1a87a2d..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.payment_ach.php.swp
+++ /dev/null
diff --cc ng_selfservice/.payment_cc.php.swp
index 369d104,369d104..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.payment_cc.php.swp
+++ /dev/null
diff --cc ng_selfservice/.payment_paypal.php.swp
index 3abff2f,3abff2f..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.payment_paypal.php.swp
+++ /dev/null
diff --cc ng_selfservice/.payment_webpay.php.swp
index 6ef3df9,6ef3df9..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.payment_webpay.php.swp
+++ /dev/null
diff --cc ng_selfservice/.personal.php.swp
index f5e8c23,f5e8c23..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.personal.php.swp
+++ /dev/null
diff --cc ng_selfservice/.process_login.php.swp
index c530f11,c530f11..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.process_login.php.swp
+++ /dev/null
diff --cc ng_selfservice/.process_ticket_create.php.swp
index c286792,c286792..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.process_ticket_create.php.swp
+++ /dev/null
diff --cc ng_selfservice/.services.php.swp
index e063e40,e063e40..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.services.php.swp
+++ /dev/null
diff --cc ng_selfservice/.services_new.php.swp
index 8d0c657,8d0c657..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.services_new.php.swp
+++ /dev/null
diff --cc ng_selfservice/.ticket.php.swp
index e9b2503,e9b2503..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.ticket.php.swp
+++ /dev/null
diff --cc ng_selfservice/.ticket_create.php.swp
index 65b00fe,65b00fe..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.ticket_create.php.swp
+++ /dev/null
diff --cc ng_selfservice/.tickets.php.swp
index 7b4d67b,7b4d67b..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.tickets.php.swp
+++ /dev/null
diff --cc ng_selfservice/.tickets_resolved.php.swp
index 1b3c634,1b3c634..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.tickets_resolved.php.swp
+++ /dev/null
diff --cc ng_selfservice/.usage.php.swp
index 61fd4fa,61fd4fa..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.usage.php.swp
+++ /dev/null
diff --cc ng_selfservice/.usage_cdr.php.swp
index 83c270a,83c270a..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.usage_cdr.php.swp
+++ /dev/null
diff --cc ng_selfservice/.usage_data.php.swp
index e5a9272,e5a9272..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/.usage_data.php.swp
+++ /dev/null
diff --cc ng_selfservice/elements/.card.php.swp
index 15d30ce,15d30ce..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/elements/.card.php.swp
+++ /dev/null
diff --cc ng_selfservice/elements/.check.php.swp
index fe08303,fe08303..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/elements/.check.php.swp
+++ /dev/null
diff --cc ng_selfservice/elements/.error.php.swp
index 1a6eb28,1a6eb28..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/elements/.error.php.swp
+++ /dev/null
diff --cc ng_selfservice/elements/.header.php.swp
index 2371770,2371770..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/elements/.header.php.swp
+++ /dev/null
diff --cc ng_selfservice/elements/.menu.php.swp
index 0c29ff9,0c29ff9..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/elements/.menu.php.swp
+++ /dev/null
diff --cc ng_selfservice/elements/.menu_footer.php.swp
index 4bd2b30,4bd2b30..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/elements/.menu_footer.php.swp
+++ /dev/null
diff --cc ng_selfservice/elements/.session.php.swp
index ddd0137,ddd0137..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/elements/.session.php.swp
+++ /dev/null
diff --cc ng_selfservice/elements/.ticketlist.php.swp
index db3d0fe,db3d0fe..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/elements/.ticketlist.php.swp
+++ /dev/null
diff --cc ng_selfservice/js/.menu.js.swp
index 8df94a9,8df94a9..0000000
deleted file mode 100644,100644
--- a/ng_selfservice/js/.menu.js.swp
+++ /dev/null
diff --cc rt/lib/RT/Interface/Web.pm
index 4a6bfda,4a6bfda..2dc16e3
--- a/rt/lib/RT/Interface/Web.pm
+++ b/rt/lib/RT/Interface/Web.pm
@@@ -2070,7 -2070,7 +2070,6 @@@ sub _ProcessUpdateMessageRecipients 
      if (grep $_ eq 'Requestor' || $_ eq 'Requestors', @{ $args{ARGSRef}->{'SkipNotification'} || [] }) {
          push @txn_squelch, map $_->address, Email::Address->parse( $message_args->{Requestor} );
          push @txn_squelch, $args{TicketObj}->Requestors->MemberEmailAddresses;
--
      }
  
      push @txn_squelch, @{$args{ARGSRef}{SquelchMailTo}} if $args{ARGSRef}{SquelchMailTo};
@@@ -2092,6 -2092,6 +2091,39 @@@
      }
  }
  
++sub ProcessAttachments {
++    my %args = (
++        ARGSRef => {},
++        @_
++    );
++
++    my $ARGSRef = $args{ARGSRef} || {};
++    # deal with deleting uploaded attachments
++    foreach my $key ( keys %$ARGSRef ) {
++        if ( $key =~ m/^DeleteAttach-(.+)$/ ) {
++            delete $session{'Attachments'}{$1};
++        }
++        $session{'Attachments'} = { %{ $session{'Attachments'} || {} } };
++    }
++
++    # store the uploaded attachment in session
++    if ( defined $ARGSRef->{'Attach'} && length $ARGSRef->{'Attach'} )
++    {    # attachment?
++        my $attachment = MakeMIMEEntity( AttachmentFieldName => 'Attach' );
++
++        my $file_path = Encode::decode_utf8("$ARGSRef->{'Attach'}");
++        $session{'Attachments'} =
++          { %{ $session{'Attachments'} || {} }, $file_path => $attachment, };
++    }
++
++    # delete temporary storage entry to make WebUI clean
++    unless ( keys %{ $session{'Attachments'} } and $ARGSRef->{'UpdateAttach'} )
++    {
++        delete $session{'Attachments'};
++    }
++}
++
++
  =head2 MakeMIMEEntity PARAMHASH
  
  Takes a paramhash Subject, Body and AttachmentFieldName.
@@@ -2174,37 -2174,37 +2206,6 @@@ sub MakeMIMEEntity 
  
  }
  
--sub ProcessAttachments {
--    my %args = (
--        ARGSRef => {},
--        @_
--    );
--
--    my $ARGSRef = $args{ARGSRef} || {};
--    # deal with deleting uploaded attachments
--    foreach my $key ( keys %$ARGSRef ) {
--        if ( $key =~ m/^DeleteAttach-(.+)$/ ) {
--            delete $session{'Attachments'}{$1};
--        }
--        $session{'Attachments'} = { %{ $session{'Attachments'} || {} } };
--    }
--
--    # store the uploaded attachment in session
--    if ( defined $ARGSRef->{'Attach'} && length $ARGSRef->{'Attach'} )
--    {    # attachment?
--        my $attachment = MakeMIMEEntity( AttachmentFieldName => 'Attach' );
--
--        my $file_path = Encode::decode_utf8("$ARGSRef->{'Attach'}");
--        $session{'Attachments'} =
--          { %{ $session{'Attachments'} || {} }, $file_path => $attachment, };
--    }
--
--    # delete temporary storage entry to make WebUI clean
--    unless ( keys %{ $session{'Attachments'} } and $ARGSRef->{'UpdateAttach'} )
--    {
--        delete $session{'Attachments'};
--    }
--}
  
  
  =head2 ParseDateToISO
diff --cc rt/share/html/Ticket/Update.html
index 26a37e8,26a37e8..8a3d8e3
--- a/rt/share/html/Ticket/Update.html
+++ b/rt/share/html/Ticket/Update.html
@@@ -290,6 -290,6 +290,7 @@@ if ( $ARGS{'SubmitTicket'} ) 
  
      my %squelched = ProcessTransactionSquelching( \%ARGS );
      $ARGS{'SquelchMailTo'} = [keys %squelched] if keys %squelched;
++warn @{ $ARGS{'SquelchMailTo'} } if $ARGS{'SquelchMailTo'};
  
      my $CFs = $TicketObj->TransactionCustomFields;
      my $ValidCFs = $m->comp(
@@@ -311,6 -311,6 +312,7 @@@
      );
      $checks_failure = 1 unless $status;
  }
++warn @{ $ARGS{'SquelchMailTo'} } if $ARGS{'SquelchMailTo'};
  
  # check email addresses for RT's
  {

commit f2766e203e1aa144d046a26cf13e01e1f5b00f64
Merge: d046cb5 0d81877
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Sep 25 15:57:13 2013 -0700

    Merge branch 'master' of git.freeside.biz:/home/git/freeside


commit d046cb57be3c1a74362d15e90486239cc8a5f4d7
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Thu Sep 12 04:28:25 2013 -0700

    multiple payment options, RT#23741

diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 0c50b84..641d54a 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -2092,6 +2092,21 @@ sub cust_contact {
   qsearch('contact', { 'custnum' => $self->custnum } );
 }
 
+=item cust_payby
+
+Returns all payment methods (see L<FS::cust_payby>) for this customer.
+
+=cut
+
+sub cust_payby {
+  my $self = shift;
+  qsearch({
+    'table'    => 'cust_payby',
+    'hashref'  => { 'custnum' => $self->custnum },
+    'order_by' => 'ORDER BY weight ASC',
+  });
+}
+
 =item unsuspend
 
 Unsuspends all unflagged suspended packages (see L</unflagged_suspended_pkgs>
@@ -5125,7 +5140,6 @@ sub _upgrade_data { #class method
       die $error if $error;
 
       $cust_main->setfield($_, '') foreach @payfields;
-      $DEBUG = 2;
       $error = $cust_main->replace;
       die $error if $error;
 
diff --git a/FS/FS/payby.pm b/FS/FS/payby.pm
index e223a05..b33f8f3 100644
--- a/FS/FS/payby.pm
+++ b/FS/FS/payby.pm
@@ -70,12 +70,12 @@ tie %hash, 'Tie::IxHash',
     cust_pay  => 'CHEK', #this is a customer type only, payments are CHEK...
     realtime  => 1,
   },
-  'LECB' => {
-    tinyname  => 'phone bill',
-    shortname => 'Phone bill billing',
-    longname  => 'Phone bill billing',
-    realtime  => 1,
-  },
+  #'LECB' => {
+  #  tinyname  => 'phone bill',
+  #  shortname => 'Phone bill billing',
+  #  longname  => 'Phone bill billing',
+  #  realtime  => 1,
+  #},
   'BILL' => {
     tinyname  => 'billing',
     shortname => 'Billing',
diff --git a/httemplate/edit/cust_main-contacts.html b/httemplate/edit/cust_main-contacts.html
index bae58bd..cd83a29 100644
--- a/httemplate/edit/cust_main-contacts.html
+++ b/httemplate/edit/cust_main-contacts.html
@@ -1,8 +1,9 @@
-<% include('elements/edit.html',
+<& elements/edit.html,
      'name_singular'   => 'customer contacts', #yes, we're editing all of them
      'table'           => 'cust_main',
-     'post_url'       => popurl(1). 'process/cust_main-contacts.html',
-     'labels'          => { 'custnum'     => ' ', #XXX supress this line entirely, its being redundant
+     'post_url'        => popurl(1). 'process/cust_main-contacts.html',
+     'no_pkey_display' => 1,
+     'labels'          => {
                             'contactnum'  => 'Contact',
                             #'locationnum' => ' ',
                           },
@@ -20,17 +21,17 @@
      #'edit_callback'   => $edit_callback,
      #'error_callback'  => $error_callback,
      'agent_virt'      => 1,
-     'menubar'          => [], #remove "view all" link
+     'menubar'         => [], #remove "view all" link
 
      #XXX it would be nice if this could instead be after the error but before
      # the table
-     'html_init'        => include('/elements/small_custview.html',
-                                     $custnum,
-                                     $conf->config('countrydefault') || 'US',
-                                     1, #no balance
-                                  ),
-   )
-%>
+     'html_init'       => include('/elements/small_custview.html',
+                                    $custnum,
+                                    $conf->config('countrydefault') || 'US',
+                                    1, #no balance
+                                 ).
+                          '<BR>',
+&>
 <%init>
 
 my $curuser = $FS::CurrentUser::CurrentUser;
diff --git a/httemplate/edit/cust_payby.html b/httemplate/edit/cust_payby.html
new file mode 100644
index 0000000..67eb40a
--- /dev/null
+++ b/httemplate/edit/cust_payby.html
@@ -0,0 +1,184 @@
+%# #based on / some false laziness w/ cust_main-contacts.html
+<& elements/edit.html,
+     'name_singular'   => 'payment methods', #"customer payment methods" ?
+     'table'           => 'cust_main',
+     'post_url'        => popurl(1). 'process/cust_payby.html',
+     'no_pkey_display' => 1,
+     'labels'          => {
+                            'custpaybynum'  => ' ', #'Payment method',
+                            #'locationnum' => ' ',
+                          },
+     'fields'          => [
+       { field                 => 'custpaybynum',
+         type                  => 'selectlayers',
+         options               => [ '',
+                                    grep { ! /^(DCRD|DCHK)$/ }
+                                      FS::payby->cust_payby
+                                  ],
+         labels                => { '' => 'Select payment method',
+                                    FS::payby->payby2shortname
+                                  },
+         layer_fields          => \%payby_fields,
+         layer_values_callback => $payby_layer_values,
+         m2m_method            => 'cust_payby',
+         m2m_dstcol            => 'custpaybynum',   
+         m2_label              => ' ', #'Payment method',
+         m2_error_callback     => $m2_error_callback,
+       },
+     ],
+     #'new_callback'    => $new_callback,
+     #'edit_callback'   => $edit_callback,
+     #'error_callback'  => $error_callback,
+     'agent_virt'      => 1,
+     'menubar'         => [], #remove "view all" link
+
+     #XXX it would be nice if this could instead be after the error but before
+     # the table
+     'html_init'       => include('/elements/small_custview.html',
+                                    $custnum,
+                                    $conf->config('countrydefault') || 'US',
+                                    1, #no balance
+                                 ).
+                          '<BR>',
+&>
+<%init>
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+my $conf = new FS::Conf;
+
+my $custnum;
+if ( $cgi->param('error') ) {
+  $custnum = scalar($cgi->param('custnum'));
+
+  die "access denied"
+    unless $curuser->access_right(($custnum ? 'Edit' : 'New'). ' customer'); #payment methods?
+
+} elsif ( $cgi->keywords ) { #editing
+  $custnum = ($cgi->keywords)[0];
+
+  die "access denied"
+    unless $curuser->access_right('Edit customer');
+
+} else { #new customer
+
+  #this doesn't really work here, we're an edit only
+  die "guru meditation #53";
+
+  die "access denied"
+    unless $curuser->access_right('New customer');
+
+}
+
+
+#XXX
+my %payby_fields = (
+  'CARD' => [ 'CARD_payinfo' => mt('Card number'),
+              'CARD_exp'     => {
+                                  label => 'Expiration',
+                                  type  => 'select-month_year',
+                                  #XXX prefix?
+                                },
+              'CARD_paycvv'  => 'CVV2', #XXX help popup
+              'CARD_payname' => mt('Exact name on card'),
+              'CARD_payauto' => { label => mt('Charge future payments to this credit card automatically'),
+                                  type  => 'checkbox',
+                                },
+            ],
+  'CHEK' => [ 'CHEK_payinfo1'  => mt('Account number'),
+              'CHEK_paytype'   => { label => 'Type',
+                                    #XXX select values
+                                    #@FS::cust_main::paytypes #??
+                                  },
+              'CHEK_payinfo2'  => mt('ABA/Routing number'), #XXX help popup
+              'CHEK_exp_month' => { type  => 'hidden',
+                                    value => 12,
+                                  },
+              'CHEK_exp_year'  => { type  => 'hidden',
+                                    value => 2037,
+                                  },
+              'CHEK_payname'   => mt('Bank name'),
+              #'CHEK_paystate'  => { label => $paystate_label,
+              #                      type  => 'select-state',
+              #                    },
+              'CHEK_payauto' => { label => mt('Charge future payments to this electronic check automatically'),
+                                  type  => 'checkbox',
+                                },
+            ],
+  #'LECB'
+  'BILL' => [ 'BILL_payinfo' => mt('P.O.'),
+              'BILL_exp_month' => { type  => 'hidden',
+                                    value => 12,
+                                  },
+              'BILL_exp_year'  => { type  => 'hidden',
+                                    value => 2037,
+                                  },
+              'BILL_payname'   => mt('Attention'),
+            ],
+  'COMP' => [
+              'COMP_payinfo' => mt('Approved by'),
+            ],
+
+);
+
+#XXX
+my $payby_layer_values = sub {
+  my ( $cgi, $cust_payby, $switches ) = @_;
+  +{
+#     #map { $_ => { $part_event_condition->options } }
+#     #    keys %condition_fields
+#     map { my $conditionname = $_;
+#           my %opts = $switches->{'mode'} eq 'error'
+#                      ? %{ $cgi_conditions{$conditionname} || {} }
+#                      : $part_event_condition->options;
+#           %opts = (
+#             map { ( "$conditionname.$_" => $opts{$_} ); }
+#                 keys %opts
+#           );
+#           ( $conditionname => \%opts );
+#         }
+#         keys %condition_fields
+  };
+};
+
+
+#my $new_callback = sub {
+#  my( $cgi, $cust_main, $fields_listref, $opt_hashref ) = @_;
+#};
+
+#my $edit_callback = sub {
+# my( $cgi, $cust_main, $fields_listref, $opt_hashref ) = @_;
+#};
+
+#my $error_callback = sub {
+#  my( $cgi, $cust_main, $fields_listref, $opt_hashref ) = @_;
+#};
+
+my $m2_error_callback = sub {
+  my($cgi, $object) = @_;
+
+  #XXX
+
+  #process_o2m fields in process/cust_main-contacts.html
+  my @fields = qw( first last title comment );
+  my @gfields = ( '', map "_$_", @fields );
+
+  map {
+        if ( /^contactnum(\d+)$/ ) {
+          my $num = $1;
+          if ( grep $cgi->param("contactnum$num$_"), @gfields ) {
+            my $x = new FS::contact {
+              'contactnum' => scalar($cgi->param("contactnum$num")),
+              map { $_ => scalar($cgi->param("contactnum${num}_$_")) } @fields,
+            };
+            $x;
+          } else {
+            ();
+          }
+        } else {
+          ();
+        }
+      }
+      $cgi->param;
+};
+
+</%init>
diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html
index 3270f04..0602811 100644
--- a/httemplate/edit/elements/edit.html
+++ b/httemplate/edit/elements/edit.html
@@ -116,6 +116,9 @@ Example:
     # display of primary key, no submit button, no html_foot, no footer)
     'embed' => $object, #need to pass the object
 
+    #don't show the primary key label and value
+    'no_pkey_display' => 1,
+
     ###
     # HTML callbacks
     ###
@@ -236,13 +239,17 @@ Example:
   <INPUT TYPE="hidden" NAME="svcdb" VALUE="<% $table %>">
   <INPUT TYPE="hidden" NAME="<% $pkey %>" VALUE="<% $clone ? '' : $object->$pkey() %>">
 
-  <FONT SIZE="+1"><B>
-  <% ( $opt{labels} && exists $opt{labels}->{$pkey} )
-        ? $opt{labels}->{$pkey}
-        : $pkey
-  %>
-  </B></FONT>
-  #<% ( !$clone && $object->$pkey() ) || "(NEW)" %>
+%   unless ( $opt{'no_pkey_display'} ) {
+
+      <FONT SIZE="+1"><B>
+      <% ( $opt{labels} && exists $opt{labels}->{$pkey} )
+            ? $opt{labels}->{$pkey}
+            : $pkey
+      %>
+      </B></FONT>
+      #<% ( !$clone && $object->$pkey() ) || "(NEW)" %>
+
+%   }
 
 % }
 
diff --git a/httemplate/edit/process/cust_payby.html b/httemplate/edit/process/cust_payby.html
new file mode 100644
index 0000000..a999e4d
--- /dev/null
+++ b/httemplate/edit/process/cust_payby.html
@@ -0,0 +1,19 @@
+<% include('elements/process.html',
+     'table'          => 'cust_main',
+     'error_redirect' => popurl(3). 'edit/cust_payby.html?',
+     'agent_virt'     => 1,
+     'skip_process'   => 1, #we don't want to make any changes to cust_main
+     'process_o2m' => {
+       'table'  => 'cust_payby',
+       'fields' => \@payby_fields,
+     },
+     'redirect' => popurl(3). 'view/cust_main.cgi?',
+   )
+%>
+<%init>
+
+#XXX
+my @payby_fields = qw();
+}
+
+</%init>
diff --git a/httemplate/elements/tr-select-month_year.html b/httemplate/elements/tr-select-month_year.html
new file mode 100644
index 0000000..b1943bd
--- /dev/null
+++ b/httemplate/elements/tr-select-month_year.html
@@ -0,0 +1,22 @@
+% unless ( $opt{'js_only'} ) {
+
+    <% include('tr-td-label.html', %opt ) %>
+
+      <TD <% $colspan %> <% $style %>>
+% }
+
+    <% include('select-month_year.html', %opt ) %>
+
+% unless ( $opt{'js_only'} ) {
+      </TD>
+    </TR>
+% }
+<%init>
+
+my %opt = @_;
+
+my $style = $opt{'cell_style'} ? 'STYLE="'. $opt{'cell_style'}. '"' : '';
+
+my $colspan = $opt{'colspan'} ? 'COLSPAN="'.$opt{'colspan'}.'"' : '';
+
+</%init>

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Mason.pm                                    |    1 +
 FS/FS/Record.pm                                   |    9 +-
 FS/FS/Schema.pm                                   |   13 ++
 FS/FS/cable_provider.pm                           |  112 +++++++++++++
 FS/FS/cust_main.pm                                |   16 ++-
 FS/FS/cust_pkg.pm                                 |   24 ++-
 FS/FS/part_event/Condition/pkg_age_Common.pm      |    2 +-
 FS/FS/part_export/domain_shellcommands.pm         |    3 +-
 FS/FS/part_export/shellcommands_withdomain.pm     |   27 +++-
 FS/FS/payby.pm                                    |   12 +-
 FS/FS/svc_cable.pm                                |   60 +++++--
 FS/MANIFEST                                       |    2 +
 FS/t/cable_provider.t                             |    5 +
 bin/test-event                                    |    5 +-
 httemplate/browse/cable_provider.html             |   32 ++++
 httemplate/docs/about.html                        |    2 +-
 httemplate/edit/cable_provider.html               |   20 +++
 httemplate/edit/cust_main-contacts.html           |   23 ++--
 httemplate/edit/cust_payby.html                   |  184 +++++++++++++++++++++
 httemplate/edit/elements/edit.html                |   21 ++-
 httemplate/edit/process/cable_provider.html       |   10 +
 httemplate/edit/process/cust_payby.html           |   19 ++
 httemplate/elements/menu.html                     |    1 +
 httemplate/elements/select-cable_provider.html    |    7 +
 httemplate/elements/tr-select-cable_provider.html |   12 ++
 httemplate/elements/tr-select-month_year.html     |   22 +++
 httemplate/view/cust_main.cgi                     |    1 -
 ng_selfservice/.freeside.class.php.swp            |  Bin 12288 -> 0 bytes
 ng_selfservice/.index.php.swp                     |  Bin 12288 -> 0 bytes
 ng_selfservice/.logout.php.swp                    |  Bin 12288 -> 0 bytes
 ng_selfservice/.main.php.swp                      |  Bin 12288 -> 0 bytes
 ng_selfservice/.password.php.swp                  |  Bin 12288 -> 0 bytes
 ng_selfservice/.payment.php.swp                   |  Bin 12288 -> 0 bytes
 ng_selfservice/.payment_ach.php.swp               |  Bin 12288 -> 0 bytes
 ng_selfservice/.payment_cc.php.swp                |  Bin 12288 -> 0 bytes
 ng_selfservice/.payment_paypal.php.swp            |  Bin 12288 -> 0 bytes
 ng_selfservice/.payment_webpay.php.swp            |  Bin 12288 -> 0 bytes
 ng_selfservice/.personal.php.swp                  |  Bin 12288 -> 0 bytes
 ng_selfservice/.process_login.php.swp             |  Bin 12288 -> 0 bytes
 ng_selfservice/.process_ticket_create.php.swp     |  Bin 12288 -> 0 bytes
 ng_selfservice/.services.php.swp                  |  Bin 12288 -> 0 bytes
 ng_selfservice/.services_new.php.swp              |  Bin 20480 -> 0 bytes
 ng_selfservice/.ticket.php.swp                    |  Bin 12288 -> 0 bytes
 ng_selfservice/.ticket_create.php.swp             |  Bin 12288 -> 0 bytes
 ng_selfservice/.tickets.php.swp                   |  Bin 12288 -> 0 bytes
 ng_selfservice/.tickets_resolved.php.swp          |  Bin 12288 -> 0 bytes
 ng_selfservice/.usage.php.swp                     |  Bin 12288 -> 0 bytes
 ng_selfservice/.usage_cdr.php.swp                 |  Bin 12288 -> 0 bytes
 ng_selfservice/.usage_data.php.swp                |  Bin 12288 -> 0 bytes
 ng_selfservice/elements/.card.php.swp             |  Bin 12288 -> 0 bytes
 ng_selfservice/elements/.check.php.swp            |  Bin 12288 -> 0 bytes
 ng_selfservice/elements/.error.php.swp            |  Bin 12288 -> 0 bytes
 ng_selfservice/elements/.header.php.swp           |  Bin 12288 -> 0 bytes
 ng_selfservice/elements/.menu.php.swp             |  Bin 12288 -> 0 bytes
 ng_selfservice/elements/.menu_footer.php.swp      |  Bin 12288 -> 0 bytes
 ng_selfservice/elements/.session.php.swp          |  Bin 12288 -> 0 bytes
 ng_selfservice/elements/.ticketlist.php.swp       |  Bin 12288 -> 0 bytes
 ng_selfservice/js/.menu.js.swp                    |  Bin 12288 -> 0 bytes
 rt/lib/RT/Interface/Web.pm                        |   65 ++++----
 rt/share/html/Ticket/Update.html                  |    2 +
 60 files changed, 616 insertions(+), 96 deletions(-)
 create mode 100644 FS/FS/cable_provider.pm
 create mode 100644 FS/t/cable_provider.t
 mode change 100644 => 100755 bin/test-event
 create mode 100644 httemplate/browse/cable_provider.html
 create mode 100644 httemplate/edit/cable_provider.html
 create mode 100644 httemplate/edit/cust_payby.html
 create mode 100644 httemplate/edit/process/cable_provider.html
 create mode 100644 httemplate/edit/process/cust_payby.html
 create mode 100644 httemplate/elements/select-cable_provider.html
 create mode 100644 httemplate/elements/tr-select-cable_provider.html
 create mode 100644 httemplate/elements/tr-select-month_year.html
 delete mode 100644 ng_selfservice/.freeside.class.php.swp
 delete mode 100644 ng_selfservice/.index.php.swp
 delete mode 100644 ng_selfservice/.logout.php.swp
 delete mode 100644 ng_selfservice/.main.php.swp
 delete mode 100644 ng_selfservice/.password.php.swp
 delete mode 100644 ng_selfservice/.payment.php.swp
 delete mode 100644 ng_selfservice/.payment_ach.php.swp
 delete mode 100644 ng_selfservice/.payment_cc.php.swp
 delete mode 100644 ng_selfservice/.payment_paypal.php.swp
 delete mode 100644 ng_selfservice/.payment_webpay.php.swp
 delete mode 100644 ng_selfservice/.personal.php.swp
 delete mode 100644 ng_selfservice/.process_login.php.swp
 delete mode 100644 ng_selfservice/.process_ticket_create.php.swp
 delete mode 100644 ng_selfservice/.services.php.swp
 delete mode 100644 ng_selfservice/.services_new.php.swp
 delete mode 100644 ng_selfservice/.ticket.php.swp
 delete mode 100644 ng_selfservice/.ticket_create.php.swp
 delete mode 100644 ng_selfservice/.tickets.php.swp
 delete mode 100644 ng_selfservice/.tickets_resolved.php.swp
 delete mode 100644 ng_selfservice/.usage.php.swp
 delete mode 100644 ng_selfservice/.usage_cdr.php.swp
 delete mode 100644 ng_selfservice/.usage_data.php.swp
 delete mode 100644 ng_selfservice/elements/.card.php.swp
 delete mode 100644 ng_selfservice/elements/.check.php.swp
 delete mode 100644 ng_selfservice/elements/.error.php.swp
 delete mode 100644 ng_selfservice/elements/.header.php.swp
 delete mode 100644 ng_selfservice/elements/.menu.php.swp
 delete mode 100644 ng_selfservice/elements/.menu_footer.php.swp
 delete mode 100644 ng_selfservice/elements/.session.php.swp
 delete mode 100644 ng_selfservice/elements/.ticketlist.php.swp
 delete mode 100644 ng_selfservice/js/.menu.js.swp




More information about the freeside-commits mailing list