diff --git a/lib/NGCP/Schema/Result/v_time_sets_ical.pm b/lib/NGCP/Schema/Result/v_time_sets_ical.pm new file mode 100644 index 00000000..8a49336d --- /dev/null +++ b/lib/NGCP/Schema/Result/v_time_sets_ical.pm @@ -0,0 +1,92 @@ +package NGCP::Schema::Result::v_time_sets_ical; + +use strict; +use warnings; + +use Scalar::Util qw(blessed); +use parent 'DBIx::Class::Core'; + +our $VERSION = '2.007'; + +__PACKAGE__->load_components("InflateColumn::DateTime", "Helper::Row::ToJSON"); +__PACKAGE__->table_class("DBIx::Class::ResultSource::View"); + + +__PACKAGE__->table("provisioning.v_time_sets_ical"); +__PACKAGE__->result_source_instance->view_definition("select `s`.`id` AS `id`,`s`.`name` AS `name`,concat('BEGIN:VCALENDAR\\n','PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN\\n','VERSION:2.0\\n\\n',group_concat(concat('BEGIN:VEVENT\\n','UID:','sipwise',`p`.`id`,'\@sipwise',`s`.`id`,'\\n','SUMMARY:',`s`.`name`,' event ',`p`.`id`,'\\n','DTSTART:',date_format(`p`.`start`,'%Y%m%dT%H%i%s'),'\\n','RRULE:','FREQ=',`p`.`freq`,ifnull(concat(';COUNT=',`p`.`count`),''),ifnull(concat(';UNTIL=',date_format(`p`.`until`,'%Y%m%dT%H%i%s')),''),ifnull(concat(';INTERVAL=',`p`.`interval`),''),ifnull(concat(';BYSECOND=',`p`.`bysecond`),''),ifnull(concat(';BYMINUTE=',`p`.`byminute`),''),ifnull(concat(';BYHOUR=',`p`.`byhour`),''),ifnull(concat(';BYDAY=',`p`.`byday`),''),ifnull(concat(';BYMONTHDAY=',`p`.`bymonthday`),''),ifnull(concat(';BYYEARDAY=',`p`.`byyearday`),''),ifnull(concat(';BYWEEKNO=',`p`.`byweekno`),''),ifnull(concat(';BYMONTH=',`p`.`bymonth`),''),ifnull(concat(';BYSETPOS=',`p`.`bysetpos`),''),'\\n',ifnull(concat('DESCRIPTION:',`p`.`comment`,'\\n'),''),'END:VEVENT\\n') separator '\n'),'END:VCALENDAR\\n') AS `ical` from (`provisioning`.`voip_time_sets` `s` join `provisioning`.`voip_time_periods` `p` on((`s`.`id` = `p`.`time_set_id`))) group by `s`.`id`"); + + +__PACKAGE__->add_columns( + "id", + { data_type => "integer", extra => { unsigned => 1 }, is_nullable => 1 }, + "name", + { data_type => "varchar", is_nullable => 0, size => 90 }, + "ical", + { data_type => "text", is_nullable => 1 }, +); + +sub TO_JSON { + my ($self) = @_; + return { + map { blessed($_) && $_->isa('DateTime') ? $_->datetime : $_ } %{ $self->next::method } + }; +} + +1; +__END__ + +=encoding UTF-8 + +=head1 NAME + +NGCP::Schema::Result::v_time_sets_ical - VIEW + +=head1 DESCRIPTION + +This module is a schema class for the NGCP database view "provisioning.v_time_sets_ical". + +=head1 COMPONENTS LOADED + +=over 4 + +=item * L + +=item * L + +=back + +=head1 TABLE: C + +=head1 ACCESSORS + +=head2 name + + data_type: 'varchar' + is_nullable: 0 + size: 90 + +=head2 ical + + data_type: 'text' + is_nullable: 1 + +=head1 AUTHOR + +Sipwise Development Team C<< >> + +=head1 LICENSE + +This software is Copyright © 2017 by Sipwise GmbH, Austria. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this package. If not, see . diff --git a/lib/NGCP/Schema/Result/voip_peer_groups.pm b/lib/NGCP/Schema/Result/voip_peer_groups.pm index 7b5b45bd..f71d39e4 100644 --- a/lib/NGCP/Schema/Result/voip_peer_groups.pm +++ b/lib/NGCP/Schema/Result/voip_peer_groups.pm @@ -30,6 +30,8 @@ __PACKAGE__->add_columns( { data_type => "integer", extra => { unsigned => 1 }, is_nullable => 1 }, "has_inbound_rules", { data_type => "tinyint", default_value => 0, is_nullable => 0 }, + "time_set_id", + { data_type => "integer", extra => { unsigned => 1 }, is_nullable => 1 }, ); __PACKAGE__->set_primary_key("id"); @@ -64,6 +66,13 @@ __PACKAGE__->belongs_to( { cascade_copy => 0, cascade_delete => 0 }, ); +__PACKAGE__->belongs_to( + "time_set", + "NGCP::Schema::Result::voip_time_sets", + { 'foreign.id' => "self.time_set_id" }, + { is_deferrable => 1, cascade_delete => 0, cascade_update => 0, join_type => "LEFT" }, +); + sub TO_JSON { my ($self) = @_; return { diff --git a/lib/NGCP/Schema/Result/voip_time_periods.pm b/lib/NGCP/Schema/Result/voip_time_periods.pm new file mode 100644 index 00000000..463f04df --- /dev/null +++ b/lib/NGCP/Schema/Result/voip_time_periods.pm @@ -0,0 +1,264 @@ +package NGCP::Schema::Result::voip_time_periods; + +use strict; +use warnings; + +use Scalar::Util qw(blessed); +use parent 'DBIx::Class::Core'; + +our $VERSION = '2.007'; + +__PACKAGE__->load_components("InflateColumn::DateTime", "Helper::Row::ToJSON"); + + +__PACKAGE__->table("provisioning.voip_time_periods"); + + +__PACKAGE__->add_columns( + "id", + { + data_type => "integer", + extra => { unsigned => 1 }, + is_auto_increment => 1, + is_nullable => 0, + }, + "time_set_id", + { data_type => "integer", extra => { unsigned => 1 }, is_nullable => 0 }, + "start", + { + data_type => "timestamp", + datetime_undef_if_invalid => 1, + is_nullable => 0, + }, + "end", + { + data_type => "timestamp", + datetime_undef_if_invalid => 1, + is_nullable => 0, + }, + "freq", + { + data_type => "enum", + extra => { + list => [ + "secondly", + "minutely", + "hourly", + "daily", + "weekly", + "monthly", + "yearly", + ], + }, + is_nullable => 1, + }, + "until", + { + data_type => "timestamp", + datetime_undef_if_invalid => 1, + is_nullable => 1, + }, + "count", + { data_type => "integer", is_nullable => 1 }, + "interval", + { data_type => "integer", is_nullable => 1 }, + "bysecond", + { data_type => "varchar", is_nullable => 1, size => 45 }, + "byminute", + { data_type => "varchar", is_nullable => 1, size => 45 }, + "byhour", + { data_type => "varchar", is_nullable => 1, size => 45 }, + "byday", + { data_type => "varchar", is_nullable => 1, size => 45 }, + "bymonthday", + { data_type => "varchar", is_nullable => 1, size => 45 }, + "byyearday", + { data_type => "varchar", is_nullable => 1, size => 45 }, + "byweekno", + { data_type => "varchar", is_nullable => 1, size => 45 }, + "bymonth", + { data_type => "varchar", is_nullable => 1, size => 45 }, + "bysetpos", + { data_type => "integer", is_nullable => 1 }, + "comment", + { data_type => "text", is_nullable => 1 }, +); + + +__PACKAGE__->set_primary_key("id"); + +__PACKAGE__->belongs_to( + "time_set", + "NGCP::Schema::Result::voip_time_sets", + { id => "time_set_id" }, +); + +sub TO_JSON { + my ($self) = @_; + return { + map { blessed($_) && $_->isa('DateTime') ? $_->datetime : $_ } %{ $self->next::method } + }; +} + +1; +__END__ + +=encoding UTF-8 + +=head1 NAME + +NGCP::Schema::Result::voip_time_periods + +=head1 DESCRIPTION + +This module is a schema class for the NGCP database table "provisioning.voip_time_periods". + +=head1 COMPONENTS LOADED + +=over 4 + +=item * L + +=item * L + +=back + +=head1 TABLE: C + +=head1 ACCESSORS + +=head2 id + + data_type: 'integer' + extra: {unsigned => 1} + is_auto_increment: 1 + is_nullable: 0 + +=head2 time_set_id + + data_type: 'integer' + extra: {unsigned => 1} + is_nullable: 0 + +=head2 start + + data_type: 'timestamp' + datetime_undef_if_invalid: 1 + default_value: current_timestamp + is_nullable: 0 + +=head2 end + + data_type: 'timestamp' + datetime_undef_if_invalid: 1 + default_value: '0000-00-00 00:00:00' + is_nullable: 0 + +=head2 freq + + data_type: 'enum' + extra: {list => ["secondly","minutely","hourly","daily","weekly","monthly","yearly"]} + is_nullable: 1 + +=head2 until + + data_type: 'timestamp' + datetime_undef_if_invalid: 1 + is_nullable: 1 + +=head2 count + + data_type: 'integer' + is_nullable: 1 + +=head2 interval + + data_type: 'integer' + is_nullable: 1 + +=head2 bysecond + + data_type: 'varchar' + is_nullable: 1 + size: 45 + +=head2 byminute + + data_type: 'varchar' + is_nullable: 1 + size: 45 + +=head2 byhour + + data_type: 'varchar' + is_nullable: 1 + size: 45 + +=head2 byday + + data_type: 'varchar' + is_nullable: 1 + size: 45 + +=head2 bymonthday + + data_type: 'varchar' + is_nullable: 1 + size: 45 + +=head2 byyearday + + data_type: 'varchar' + is_nullable: 1 + size: 45 + +=head2 byweekno + + data_type: 'varchar' + is_nullable: 1 + size: 45 + +=head2 bymonth + + data_type: 'varchar' + is_nullable: 1 + size: 45 + +=head2 bysetpos + + data_type: 'integer' + is_nullable: 1 + +=head2 comment + + data_type: 'text' + is_nullable: 1 + +=head1 PRIMARY KEY + +=over 4 + +=item * L + +=back + +=head1 AUTHOR + +Sipwise Development Team C<< >> + +=head1 LICENSE + +This software is Copyright © 2017 by Sipwise GmbH, Austria. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this package. If not, see . diff --git a/lib/NGCP/Schema/Result/voip_time_sets.pm b/lib/NGCP/Schema/Result/voip_time_sets.pm new file mode 100644 index 00000000..bd4c8d41 --- /dev/null +++ b/lib/NGCP/Schema/Result/voip_time_sets.pm @@ -0,0 +1,160 @@ +package NGCP::Schema::Result::voip_time_sets; + +use strict; +use warnings; + +use Scalar::Util qw(blessed); +use parent 'DBIx::Class::Core'; + +our $VERSION = '2.007'; + +__PACKAGE__->load_components("InflateColumn::DateTime", "Helper::Row::ToJSON"); + + +__PACKAGE__->table("provisioning.voip_time_sets"); + + +__PACKAGE__->add_columns( + "id", + { + data_type => "integer", + extra => { unsigned => 1 }, + is_auto_increment => 1, + is_nullable => 0, + }, + "reseller_id", + { data_type => "integer", is_nullable => 0 }, + "contract_id", + { data_type => "integer", is_nullable => 1 }, + "subscriber_id", + { data_type => "integer", is_nullable => 1 }, + "name", + { data_type => "varchar", is_nullable => 0, size => 90 }, +); + + +__PACKAGE__->set_primary_key("id"); + + +__PACKAGE__->add_unique_constraint("name_UNIQUE", ["name"]); + +__PACKAGE__->has_many( + "time_periods", + "NGCP::Schema::Result::voip_time_periods", + { "foreign.time_set_id" => "self.id" }, + # { cascade_copy => 0, cascade_delete => 0 }, # TODO: ?? +); + +__PACKAGE__->has_many( + "voip_peer_groups", + "NGCP::Schema::Result::voip_peer_groups", + { "foreign.time_set_id" => "self.id" }, + # { cascade_copy => 0, cascade_delete => 0 }, # TODO: ?? +); + +__PACKAGE__->belongs_to( + "reseller", + "NGCP::Schema::Result::resellers", + { id => "reseller_id" }, +); + +sub TO_JSON { + my ($self) = @_; + return { + map { blessed($_) && $_->isa('DateTime') ? $_->datetime : $_ } %{ $self->next::method } + }; +} + +1; +__END__ + +=encoding UTF-8 + +=head1 NAME + +NGCP::Schema::Result::voip_time_sets + +=head1 DESCRIPTION + +This module is a schema class for the NGCP database table "provisioning.voip_time_sets". + +=head1 COMPONENTS LOADED + +=over 4 + +=item * L + +=item * L + +=back + +=head1 TABLE: C + +=head1 ACCESSORS + +=head2 id + + data_type: 'integer' + extra: {unsigned => 1} + is_auto_increment: 1 + is_nullable: 0 + +=head2 reseller_id + + data_type: 'integer' + is_nullable: 0 + +=head2 contract_id + + data_type: 'integer' + is_nullable: 1 + +=head2 subscriber_id + + data_type: 'integer' + is_nullable: 1 + +=head2 name + + data_type: 'varchar' + is_nullable: 0 + size: 90 + +=head1 PRIMARY KEY + +=over 4 + +=item * L + +=back + +=head1 UNIQUE CONSTRAINTS + +=head2 C + +=over 4 + +=item * L + +=back + +=head1 AUTHOR + +Sipwise Development Team C<< >> + +=head1 LICENSE + +This software is Copyright © 2017 by Sipwise GmbH, Austria. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this package. If not, see .