From: Ivan Kohler Date: Sun, 5 Jan 2014 03:51:10 +0000 (-0800) Subject: svc_video, RT#24390 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=0ce4ba640f3c216a37d78296a0e9d4dd262df2d9 svc_video, RT#24390 --- diff --git a/FS/FS.pm b/FS/FS.pm index 6f770da1a..71a7a2f95 100644 --- a/FS/FS.pm +++ b/FS/FS.pm @@ -228,6 +228,8 @@ L - Conferencing type class L - Conferencing quality class +L - Video (IPTV/video-on-demand) service class + L - Inventory classes L - Inventory items diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm index 35994dec0..207a308f5 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 8e700400a..00a3f70eb 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 07da81d24..73320fa61 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 61e5b7cc0..d7015dd01 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 000000000..a6ff13628 --- /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 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 + +=cut + +1; + diff --git a/FS/t/svc_video.t b/FS/t/svc_video.t new file mode 100644 index 000000000..26e1c5d4c --- /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";