diff options
author | Ivan Kohler <ivan@freeside.biz> | 2014-01-04 16:23:54 -0800 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2014-01-04 16:23:54 -0800 |
commit | 5264cbf1175e3ea73cf9bcf5087c5028e6cf3b1c (patch) | |
tree | 01c07f0d3f21feaf8fa606355ed38da700fd6db1 /FS | |
parent | 50e89d97c110d58e0755c69775e0d243a82e352d (diff) |
svc_conferencing, RT#24389
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS.pm | 6 | ||||
-rw-r--r-- | FS/FS/AccessRight.pm | 1 | ||||
-rw-r--r-- | FS/FS/Schema.pm | 55 | ||||
-rw-r--r-- | FS/FS/access_right.pm | 1 | ||||
-rw-r--r-- | FS/FS/conferencing_quality.pm | 113 | ||||
-rw-r--r-- | FS/FS/conferencing_type.pm | 113 | ||||
-rw-r--r-- | FS/FS/svc_conferencing.pm | 260 | ||||
-rw-r--r-- | FS/MANIFEST | 6 | ||||
-rw-r--r-- | FS/t/conferencing_quality.t | 5 | ||||
-rw-r--r-- | FS/t/conferencing_type.t | 5 | ||||
-rw-r--r-- | FS/t/svc_conferencing.t | 5 |
11 files changed, 570 insertions, 0 deletions
@@ -222,6 +222,12 @@ L<FS::alarm_type> - Alarm type (inputs and outputs) class L<FS::alarm_station> - Alarm central station class +L<FS::svc_conferencing> - Conferencing service class + +L<FS::conferencing_type> - Conferencing type class + +L<FS::conferencing_quality> - Conferencing quality 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 41ca954ac..35994dec0 100644 --- a/FS/FS/AccessRight.pm +++ b/FS/FS/AccessRight.pm @@ -295,6 +295,7 @@ tie my %rights, 'Tie::IxHash', 'Services: Wireless broadband services: Advanced search', 'Services: DSLs', 'Services: Cable subscribers', + 'Services: Conferencing', 'Services: Dish services', 'Services: Hardware', 'Services: Hardware: Advanced search', diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 862e40afa..07da81d24 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -6055,6 +6055,61 @@ sub tables_hashref { 'index' => [], }, + 'svc_conferencing' => { + 'columns' => [ + 'svcnum', 'int', '', '', '', '', + 'conf_id', 'int', 'NULL', '', '', '', #"system assigned" + 'conf_name', 'varchar', '', $char_d, '', '', + 'conf_password', 'varchar', '', $char_d, '', '', + 'access_code', 'varchar', '', 16, '', '', + 'duration', 'int', '', '', '', '', + 'participants', 'int', '', '', '', '', + 'conftypenum', 'int', '', '', '', '', + 'confqualitynum', 'int', '', '', '', '', + 'opt_recording', 'char', 'NULL', 1, '', '', + 'opt_sip', 'char', 'NULL', 1, '', '', + 'opt_phone', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'svcnum', + 'unique' => [], + 'index' => [], + 'foreign_keys' => [ + { columns => [ 'svcnum' ], + table => 'cust_svc', + }, + { columns => [ 'conftypenum' ], + table => 'conferencing_type', + }, + { columns => [ 'confqualitynum' ], + table => 'conferencing_quality', + }, + ], + }, + + 'conferencing_type' => { + 'columns' => [ + 'conftypenum', 'int', '', '', '', '', + 'typeid' , 'int', '', '', '', '', + 'typename', 'varchar', '', $char_d, '', '', + 'disabled', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'conftypenum', + 'unique' => [ [ 'typeid', 'disabled' ], [ 'typename', 'disabled' ] ], + 'index' => [], + }, + + 'conferencing_quality' => { + 'columns' => [ + 'confqualitynum', 'int', '', '', '', '', + 'qualityid' , 'int', '', '', '', '', + 'qualityname', 'varchar', '', $char_d, '', '', + 'disabled', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'confqualitynum', + 'unique' => [ [ 'qualityid', 'disabled' ], [ 'qualityname', 'disabled' ] ], + 'index' => [], + }, + 'vend_main' => { 'columns' => [ 'vendnum', 'serial', '', '', '', '', diff --git a/FS/FS/access_right.pm b/FS/FS/access_right.pm index 4931c7f48..61e5b7cc0 100644 --- a/FS/FS/access_right.pm +++ b/FS/FS/access_right.pm @@ -240,6 +240,7 @@ sub _upgrade_data { # class method 'Bulk change customer packages' => 'Bulk move customer services', 'Configuration' => 'Edit sales people', 'Configuration' => 'Alarm global configuration', + 'Services: Accounts' => 'Services: Conferencing', ); # foreach my $old_acl ( keys %onetime ) { diff --git a/FS/FS/conferencing_quality.pm b/FS/FS/conferencing_quality.pm new file mode 100644 index 000000000..78b1e0e56 --- /dev/null +++ b/FS/FS/conferencing_quality.pm @@ -0,0 +1,113 @@ +package FS::conferencing_quality; +use base qw( FS::Record ); + +use strict; + +=head1 NAME + +FS::conferencing_quality - Object methods for conferencing_quality records + +=head1 SYNOPSIS + + use FS::conferencing_quality; + + $record = new FS::conferencing_quality \%hash; + $record = new FS::conferencing_quality { 'column' => 'value' }; + + $error = $record->insert; + + $error = $new_record->replace($old_record); + + $error = $record->delete; + + $error = $record->check; + +=head1 DESCRIPTION + +An FS::conferencing_quality object represents a conferencing quality level. +FS::conferencing_quality inherits from FS::Record. The following fields are +currently supported: + +=over 4 + +=item confqualitynum + +primary key + +=item qualityid + +Numeric (vendor) ID for this quality + +=item qualityname + +Name for this quality + +=item disabled + +Empty or 'Y' + +=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 { 'conferencing_quality'; } + +=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('confqualitynum') + || $self->ut_number('qualityid') + || $self->ut_text('qualityname') + || $self->ut_enum('disabled', [ '', 'Y' ] ) + ; + return $error if $error; + + $self->SUPER::check; +} + +=back + +=head1 BUGS + +=head1 SEE ALSO + +L<FS::svc_conferencing>, L<FS::Record> + +=cut + +1; + diff --git a/FS/FS/conferencing_type.pm b/FS/FS/conferencing_type.pm new file mode 100644 index 000000000..3df8913d4 --- /dev/null +++ b/FS/FS/conferencing_type.pm @@ -0,0 +1,113 @@ +package FS::conferencing_type; +use base qw( FS::Record ); + +use strict; + +=head1 NAME + +FS::conferencing_type - Object methods for conferencing_type records + +=head1 SYNOPSIS + + use FS::conferencing_type; + + $record = new FS::conferencing_type \%hash; + $record = new FS::conferencing_type { 'column' => 'value' }; + + $error = $record->insert; + + $error = $new_record->replace($old_record); + + $error = $record->delete; + + $error = $record->check; + +=head1 DESCRIPTION + +An FS::conferencing_type object represents a conferencing type. +FS::conferencing_type inherits from FS::Record. The following fields are +currently supported: + +=over 4 + +=item conftypenum + +primary key + +=item typeid + +Numeric (vendor) ID for type type + +=item typename + +Name for this type + +=item disabled + +Empty or 'Y' + +=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 { 'conferencing_type'; } + +=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('conftypenum') + || $self->ut_number('typeid') + || $self->ut_text('typename') + || $self->ut_enum('disabled', [ '', 'Y' ] ) + ; + return $error if $error; + + $self->SUPER::check; +} + +=back + +=head1 BUGS + +=head1 SEE ALSO + +L<FS::svc_conferencing>, L<FS::Record> + +=cut + +1; + diff --git a/FS/FS/svc_conferencing.pm b/FS/FS/svc_conferencing.pm new file mode 100644 index 000000000..cae61121a --- /dev/null +++ b/FS/FS/svc_conferencing.pm @@ -0,0 +1,260 @@ +package FS::svc_conferencing; +use base qw( FS::svc_Common ); + +use strict; +use Tie::IxHash; +#use FS::Record qw( qsearch qsearchs ); + +=head1 NAME + +FS::svc_conferencing - Object methods for svc_conferencing records + +=head1 SYNOPSIS + + use FS::svc_conferencing; + + $record = new FS::svc_conferencing \%hash; + $record = new FS::svc_conferencing { 'column' => 'value' }; + + $error = $record->insert; + + $error = $new_record->replace($old_record); + + $error = $record->delete; + + $error = $record->check; + +=head1 DESCRIPTION + +An FS::svc_conferencing object represents a conferencing service. +FS::svc_conferencing inherits from FS::Record. The following fields are +currently supported: + +=over 4 + +=item svcnum + +primary key + +=item conf_id + +conf_id + +=item conf_name + +conf_name + +=item conf_password + +conf_password + +=item access_code + +access_code + +=item duration + +duration + +=item participants + +participants + +=item conftypenum + +conftypenum + +=item confqualitynum + +confqualitynum + +=item opt_recording + +opt_recording + +=item opt_sip + +opt_sip + +=item opt_phone + +opt_phone + + +=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_conferencing'; } + +sub table_info { + + my %opts = ( 'type' => 'text', + 'disable_select' => 1, + 'disable_inventory' => 1, + ); + + tie my %fields, 'Tie::IxHash', + 'svcnum' => { label => 'Service' }, + 'conf_id' => { label => 'Conference ID', %opts, }, + 'conf_name' => { label => 'Conference Name', + size => 31, + maxlength => 30, + %opts, + }, + 'conf_password' => { label => 'Password', + size => 31, + maxlength => 30, + %opts, + }, + 'access_code' => { label => 'Access code' , + size => 17, + maxlength => 16, + %opts, + }, + 'duration' => { label => 'Duration', + type => 'duration', + disable_select => 1, + disable_inventory => 1, + value_callback => sub { + my $min = shift->duration; + int($min/60)."h". + sprintf("%02d",$min%60)."m"; + }, + }, + 'participants' => { label => 'Num. participants', size=>5, %opts }, + 'conftypenum' => { label => 'Conference type', + type => 'select-conferencing_type', + disable_select => 1, + disable_inventory => 1, + value_callback => sub { + shift->conferencing_type->typename; + }, + }, + 'confqualitynum' => { label => 'Quality', + type => 'select-conferencing_quality', + disable_select => 1, + disable_inventory => 1, + value_callback => sub { + shift->conferencing_quality->qualityname; + }, + }, + 'opt_recording' => { label => 'Recording', + type => 'checkbox', + value => 'Y', + disable_select => 1, + disable_inventory => 1, + }, + 'opt_sip' => { label => 'SIP participation', + type => 'checkbox', + value => 'Y', + disable_select => 1, + disable_inventory => 1, + }, + 'opt_phone' => { label => 'Phone participation', + type => 'checkbox', + value => 'Y', + disable_select => 1, + disable_inventory => 1, + }, + ; + + { + 'name' => 'Conferencing', # service', + #'name_plural' => '', #optional, + #'longname_plural' => '', #optional + 'fields' => \%fields, + 'addl_process_fields' => [ 'duration_units' ], + 'sorts' => [ 'conf_id', 'conf_name' ], + 'display_weight' => 57, + 'cancel_weight' => 70, #? no deps, so + }; + +} + +sub label { + my $self = shift; + $self->conf_id.': '. $self->conf_name; +} + +=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; + + if ( $self->duration_units && $self->duration_units > 1 ) { + $self->duration( int( ($self->duration * $self->duration_units) + .5) ); + + $self->duration_units(1); + } + + my $error = + $self->ut_numbern('svcnum') + || $self->ut_numbern('conf_id') + || $self->ut_text('conf_name') + || $self->ut_text('conf_password') + || $self->ut_text('access_code') + || $self->ut_number('duration') + || $self->ut_number('participants') + || $self->ut_number('conftypenum') + || $self->ut_number('confqualitynum') + || $self->ut_enum('opt_recording', [ '', 'Y' ]) + || $self->ut_enum('opt_sip', [ '', 'Y' ]) + || $self->ut_enum('opt_phone', [ '', 'Y' ]) + ; + return $error if $error; + + return 'Meeting name must be at least 4 characters' + unless length($self->conf_name) >= 4; + return 'Password must be at least 4 characters' + unless length($self->conf_password) >= 4; + return 'Access code must be at least 4 digits' + unless length($self->access_code) >= 4; + + + $self->SUPER::check; +} + +=back + +=head1 BUGS + +=head1 SEE ALSO + +L<FS::Record> + +=cut + +1; + diff --git a/FS/MANIFEST b/FS/MANIFEST index 1f2dfccc4..bfc47c68f 100644 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@ -737,3 +737,9 @@ FS/alarm_station.pm t/alarm_station.t FS/addr_range.pm t/addr_range.t +FS/svc_conferencing.pm +t/svc_conferencing.t +FS/conferencing_type.pm +t/conferencing_type.t +FS/conferencing_quality.pm +t/conferencing_quality.t diff --git a/FS/t/conferencing_quality.t b/FS/t/conferencing_quality.t new file mode 100644 index 000000000..987ec8791 --- /dev/null +++ b/FS/t/conferencing_quality.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::conferencing_quality; +$loaded=1; +print "ok 1\n"; diff --git a/FS/t/conferencing_type.t b/FS/t/conferencing_type.t new file mode 100644 index 000000000..2bcd68869 --- /dev/null +++ b/FS/t/conferencing_type.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::conferencing_type; +$loaded=1; +print "ok 1\n"; diff --git a/FS/t/svc_conferencing.t b/FS/t/svc_conferencing.t new file mode 100644 index 000000000..e480c670e --- /dev/null +++ b/FS/t/svc_conferencing.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::svc_conferencing; +$loaded=1; +print "ok 1\n"; |