[freeside-commits] branch master updated. 0ce4ba640f3c216a37d78296a0e9d4dd262df2d9

Ivan ivan at 420.am
Sat Jan 4 19:51:26 PST 2014


The branch, master has been updated
       via  0ce4ba640f3c216a37d78296a0e9d4dd262df2d9 (commit)
      from  994d99c9e0c6888d3fa55b4b1169a7bc9d894814 (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 0ce4ba640f3c216a37d78296a0e9d4dd262df2d9
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sat Jan 4 19:51:10 2014 -0800

    svc_video, RT#24390

diff --git a/FS/FS.pm b/FS/FS.pm
index 6f770da..71a7a2f 100644
--- a/FS/FS.pm
+++ b/FS/FS.pm
@@ -228,6 +228,8 @@ L<FS::conferencing_type> - Conferencing type class
 
 L<FS::conferencing_quality> - Conferencing quality class
 
+L<FS::svc_video> - Video (IPTV/video-on-demand) service class
+
 L<FS::inventory_class> - Inventory classes
 
 L<FS::inventory_item> - Inventory items
diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm
index 35994de..207a308 100644
--- a/FS/FS/AccessRight.pm
+++ b/FS/FS/AccessRight.pm
@@ -305,6 +305,7 @@ tie my %rights, 'Tie::IxHash',
     'Services: Ports',
     'Services: Mailing lists',
     'Services: Alarm services',
+    'Services: Video',
     'Services: External services',
     'Usage: RADIUS sessions',
     'Usage: Call Detail Records (CDRs)',
diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm
index 8e70040..00a3f70 100644
--- a/FS/FS/Mason.pm
+++ b/FS/FS/Mason.pm
@@ -365,6 +365,7 @@ if ( -e $addl_handler_use_file ) {
   use FS::svc_conferencing;
   use FS::conferencing_type;
   use FS::conferencing_quality;
+  use FS::svc_video;
   # Sammath Naur
 
   if ( $FS::Mason::addl_handler_use ) {
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index 07da81d..73320fa 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -6110,6 +6110,23 @@ sub tables_hashref {
       'index'       => [],
     },
 
+    'svc_video' => {
+      'columns' => [
+        'svcnum',            'int', '', '', '', '',
+        'smartcard_num', 'varchar', '', 16, '', '',
+        'mac_addr',      'varchar', '', 12, '', '', 
+        'duration',          'int', '', '', '', '',
+      ],
+      'primary_key' => 'svcnum',
+      'unique' => [], # [ 'smartcard_num' ], [ 'mac_addr' ], ],
+      'index'  => [],
+      'foreign_keys' => [
+                          { columns => [ 'svcnum' ],
+                            table   => 'cust_svc',
+                          },
+                        ],
+    },
+
     'vend_main' => {
       'columns' => [
         'vendnum',   'serial',     '',      '', '', '',
diff --git a/FS/FS/access_right.pm b/FS/FS/access_right.pm
index 61e5b7c..d7015dd 100644
--- a/FS/FS/access_right.pm
+++ b/FS/FS/access_right.pm
@@ -241,6 +241,7 @@ sub _upgrade_data { # class method
     'Configuration' => 'Edit sales people',
     'Configuration' => 'Alarm global configuration',
     'Services: Accounts' => 'Services: Conferencing',
+    'Services: Accounts' => 'Services: Video',
   );
 
 #  foreach my $old_acl ( keys %onetime ) {
diff --git a/FS/FS/svc_video.pm b/FS/FS/svc_video.pm
new file mode 100644
index 0000000..a6ff136
--- /dev/null
+++ b/FS/FS/svc_video.pm
@@ -0,0 +1,172 @@
+package FS::svc_video;
+use base qw( FS::svc_MAC_Mixin FS::svc_Common );
+
+use strict;
+use Tie::IxHash;
+#use FS::Record qw( qsearch qsearchs );
+
+=head1 NAME
+
+FS::svc_video - Object methods for svc_video records
+
+=head1 SYNOPSIS
+
+  use FS::svc_video;
+
+  $record = new FS::svc_video \%hash;
+  $record = new FS::svc_video { 'column' => 'value' };
+
+  $error = $record->insert;
+
+  $error = $new_record->replace($old_record);
+
+  $error = $record->delete;
+
+  $error = $record->check;
+
+=head1 DESCRIPTION
+
+An FS::svc_video object represents an IPTV or video-on-demand service.
+FS::svc_video inherits from FS::Record.  The following fields are currently
+supported:
+
+=over 4
+
+=item svcnum
+
+primary key
+
+=item smartcard_num
+
+smartcard_num
+
+=item mac_addr
+
+mac_addr
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Creates a new record.  To add the record 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
+
+sub table { 'svc_video'; }
+
+sub search_sql {
+  my( $class, $string ) = @_;
+  if ( $string =~ /^([A-F0-9]{12})$/i ) {
+    $class->search_sql_field('mac_addr', uc($string));
+  } elsif ( $string =~ /^(([A-F0-9]{2}:){5}([A-F0-9]{2}))$/i ) {
+    $string =~ s/://g;
+    $class->search_sql_field('mac_addr', uc($string) );
+  } elsif ( $string =~ /^(\d+)$/ ) {
+    $class->search_sql_field('smartcard_num', $1);
+  } else {
+    '1 = 0'; #false
+  }
+}
+
+sub table_info {
+  my %opts = ( 'type' => 'text', 
+               'disable_select' => 1,
+               'disable_inventory' => 1,
+             );
+
+  tie my %fields, 'Tie::IxHash',
+    'svcnum'         => { label => 'Service' },
+    'smartcard_num'  => { label     => 'Smartcard #',
+                          size      => 17,
+                          maxlength => 16,
+                          %opts,
+                        },
+    'mac_addr'       => { label          => 'MAC address',
+                          type           => 'input-mac_addr',
+                          value_callback => sub {
+                                             my $svc = shift;
+                                             join(':', $svc->mac_addr =~ /../g);
+                                            },
+                        },
+    'duration'       => { label     => 'Duration (days)',
+                          size      => 4,
+                          maxlength => 3,
+                          %opts,
+                        },
+  ;
+
+  {
+    'name'                => 'Video', # service',
+    #'name_plural'     => '', #optional,
+    #'longname_plural' => '', #optional
+    'fields'              => \%fields,
+    #'sorts'               => [ 'smartcard_num' ],
+    'display_weight'      => 57.5,
+    'cancel_weight'       => 70, #?  no deps, so
+  };
+
+}
+
+sub label {
+  my $self = shift;
+  my $label = $self->smartcard_num;
+  $label .= ', MAC:'. $self->mac_addr
+    if $self->mac_addr;
+  return $label;
+}
+
+=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 record.  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('svcnum')
+    || $self->ut_number('smartcard_num')
+    || $self->ut_mac_addr('mac_addr')
+    || $self->ut_number('duration')
+  ;
+  return $error if $error;
+
+  $self->SUPER::check;
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::Record>
+
+=cut
+
+1;
+
diff --git a/FS/t/svc_video.t b/FS/t/svc_video.t
new file mode 100644
index 0000000..26e1c5d
--- /dev/null
+++ b/FS/t/svc_video.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::svc_video;
+$loaded=1;
+print "ok 1\n";

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

Summary of changes:
 FS/FS.pm                         |    2 +
 FS/FS/AccessRight.pm             |    1 +
 FS/FS/Mason.pm                   |    1 +
 FS/FS/Schema.pm                  |   17 ++++
 FS/FS/access_right.pm            |    1 +
 FS/FS/svc_video.pm               |  172 ++++++++++++++++++++++++++++++++++++++
 FS/t/{ConfItem.t => svc_video.t} |    2 +-
 7 files changed, 195 insertions(+), 1 deletions(-)
 create mode 100644 FS/FS/svc_video.pm
 copy FS/t/{ConfItem.t => svc_video.t} (84%)




More information about the freeside-commits mailing list