@ -89,7 +89,11 @@ sub create :Chained('list') :PathPart('create') :Args(0) {
my ( $ self , $ c ) = @ _ ;
my $ posted = ( $ c - > request - > method eq 'POST' ) ;
my $ params = { } ;
my $ upload = $ c - > req - > upload ( 'calendarfile' ) ;
my $ params = {
% { $ c - > request - > params } ,
calendarfile = > $ posted ? $ upload : undef ,
} ;
$ params = merge ( $ params , $ c - > session - > { created_objects } ) ;
my $ form ;
if ( $ c - > user - > roles eq "admin" ) {
@ -99,8 +103,8 @@ sub create :Chained('list') :PathPart('create') :Args(0) {
}
$ form - > process (
posted = > $ posted ,
params = > $ c- > request - > params,
item = > $ params ,
params = > $ params,
action = > $ c - > uri_for_action ( '/timeset/create' ) ,
) ;
NGCP::Panel::Utils::Navigation:: check_form_buttons (
c = > $ c ,
@ -112,17 +116,11 @@ sub create :Chained('list') :PathPart('create') :Args(0) {
) ;
if ( $ posted && $ form - > validated ) {
try {
my $ resource = $ form - > values ;
if ( $ c - > user - > roles eq "admin" ) {
$ resource - > { reseller_id } = $ form - > values - > { reseller } { id } ;
delete $ resource - > { reseller } ;
} else {
$ resource - > { reseller_id } = $ c - > user - > reseller_id ;
}
my $ resource = $ c - > forward ( 'timeset_resource' , [ $ form ] ) ;
$ c - > model ( 'DB' ) - > schema - > txn_do ( sub {
NGCP::Panel::Utils::TimeSet:: create_timeset (
c = > $ c ,
resource = > $ fo rm- > valu es,
resource = > $ resource ,
) ;
} ) ;
delete $ c - > session - > { created_objects } - > { reseller } ;
@ -148,9 +146,17 @@ sub edit :Chained('base') :PathPart('edit') {
my ( $ self , $ c ) = @ _ ;
my $ posted = ( $ c - > request - > method eq 'POST' ) ;
my $ params = NGCP::Panel::Utils::TimeSet:: get_timeset ( c = > $ c , timeset = > $ c - > stash - > { timeset_rs } ) ;
$ params - > { reseller } { id } = delete $ params - > { reseller_id } ;
$ params = merge ( $ params , $ c - > session - > { created_objects } ) ;
my $ upload = $ c - > req - > upload ( 'calendarfile' ) ;
my $ params = {
% { $ c - > request - > params } ,
calendarfile = > $ posted ? $ upload : undef ,
} ;
my $ item = NGCP::Panel::Utils::TimeSet:: get_timeset ( c = > $ c , timeset = > $ c - > stash - > { timeset_rs } ) ;
$ item - > { reseller } { id } = delete $ params - > { reseller_id } ;
$ item = merge ( $ item , $ c - > session - > { created_objects } ) ;
my $ form ;
if ( $ c - > user - > roles eq "admin" ) {
$ form = NGCP::Panel::Form:: get ( "NGCP::Panel::Form::TimeSet::Admin" , $ c ) ;
@ -159,8 +165,8 @@ sub edit :Chained('base') :PathPart('edit') {
}
$ form - > process (
posted = > $ posted ,
params = > $ c- > request - > params,
item = > $ params ,
params = > $ params,
item = > $ item ,
) ;
NGCP::Panel::Utils::Navigation:: check_form_buttons (
c = > $ c ,
@ -173,13 +179,7 @@ sub edit :Chained('base') :PathPart('edit') {
if ( $ posted && $ form - > validated ) {
try {
$ c - > model ( 'DB' ) - > schema - > txn_do ( sub {
my $ resource = $ form - > values ;
if ( $ c - > user - > roles eq "admin" ) {
$ resource - > { reseller_id } = $ form - > values - > { reseller } { id } ;
delete $ resource - > { reseller } ;
} else {
$ resource - > { reseller_id } = $ c - > user - > reseller_id ;
}
my $ resource = $ c - > forward ( 'timeset_resource' , [ $ form ] ) ;
NGCP::Panel::Utils::TimeSet:: update_timeset (
c = > $ c ,
timeset = > $ c - > stash - > { timeset_rs } ,
@ -225,10 +225,39 @@ sub delete_timeset :Chained('base') :PathPart('delete') {
NGCP::Panel::Utils::Navigation:: back_or ( $ c , $ c - > uri_for ( '/timeset' ) ) ;
}
sub timeset_resource :Private {
my ( $ self , $ c , $ form ) = @ _ ;
my $ resource = $ form - > values ;
return NGCP::Panel::Utils::TimeSet:: timeset_resource (
c = > $ c ,
resource = > $ resource
) ;
}
sub download :Chained('base') :PathPart('download') :Args(0) {
my ( $ self , $ c ) = @ _ ;
my $ data_ref = NGCP::Panel::Utils::TimeSet:: get_timeset_icalendar (
c = > $ c ,
timeset = > $ c - > stash - > { 'timeset_rs' } ,
) ;
$$ data_ref // = '' ;
my $ mime_type = NGCP::Panel::Utils::TimeSet:: CALENDAR_MIME_TYPE ;
my $ extension = mime_type_to_extension ( $ mime_type ) ;
my $ filename = NGCP::Panel::Utils::TimeSet:: get_calendar_file_name ( c = > $ c , timeset = > $ c - > stash - > { 'timeset_rs' } ) . '.' . $ extension ;
$ c - > response - > header ( 'Content-Disposition' = > 'attachment; filename="' . $ filename . '"' ) ;
$ c - > response - > content_type ( $ mime_type ) ;
$ c - > response - > body ( $$ data_ref ) ;
return ;
}
sub event_list :Chained('base') :PathPart('event') :CaptureArgs(0) {
my ( $ self , $ c ) = @ _ ;
$ c - > stash - > { events_rs } = $ c - > model ( 'DB' ) - > resultset ( 'voip_time_periods' ) ;
$ c - > stash - > { events_rs } = $ c - > stash - > { timeset_rs } - > time_periods ;
$ c - > stash - > { event_dt_columns } = NGCP::Panel::Utils::Datatables:: set_columns ( $ c , [
{ name = > 'id' , search = > 1 , title = > $ c - > loc ( '#' ) } ,
@ -372,4 +401,62 @@ sub event_delete :Chained('event_base') :PathPart('delete') :Args(0) {
}
NGCP::Panel::Utils::Navigation:: back_or ( $ c , $ c - > uri_for ( '/event' ) ) ;
}
sub event_upload :Chained('event_list') :PathPart('upload') :Args(0) {
my ( $ self , $ c ) = @ _ ;
my $ form = NGCP::Panel::Form:: get ( "NGCP::Panel::Form::TimeSet::EventUpload" , $ c ) ;
my $ upload = $ c - > req - > upload ( 'calendarfile' ) ;
my $ posted = $ c - > req - > method eq 'POST' ;
my @ params = ( calendarfile = > $ posted ? $ upload : undef , ) ;
$ form - > process (
posted = > $ posted ,
params = > { @ params } ,
action = > $ c - > uri_for_action ( '/timeset/event_upload' , $ c - > req - > captures ) ,
) ;
if ( $ form - > validated ) {
# TODO: check by formhandler?
unless ( $ upload ) {
NGCP::Panel::Utils::Message:: error (
c = > $ c ,
desc = > $ c - > loc ( 'No iCalendar file specified!' ) ,
) ;
$ c - > response - > redirect ( $ c - > uri_for ( $ c - > stash - > { timeset } - > { id } , 'event' ) ) ;
return ;
}
if ( $ c - > req - > params - > { purge_existing } ) {
$ c - > stash - > { 'timeset_rs' } - > time_periods - > delete ;
}
my ( $ events , $ fails , $ text_success ) ;
try {
my $ schema = $ c - > model ( 'DB' ) ;
$ schema - > txn_do ( sub {
( $ events , $ fails , $ text_success ) = NGCP::Panel::Utils::TimeSet:: parse_calendar_events ( c = > $ c ) ;
NGCP::Panel::Utils::TimeSet:: create_timeset_events (
c = > $ c ,
timeset = > $ c - > stash - > { 'timeset_rs' } ,
events = > $ events ,
) ;
} ) ;
NGCP::Panel::Utils::Message:: info (
c = > $ c ,
desc = > $ text_success ,
) ;
} catch ( $ e ) {
NGCP::Panel::Utils::Message:: error (
c = > $ c ,
error = > $ e ,
desc = > $ c - > loc ( 'Failed to upload iCalendar events' ) ,
) ;
}
$ c - > response - > redirect ( $ c - > uri_for ( $ c - > stash - > { timeset } - > { id } , 'event' ) ) ;
return ;
}
$ c - > stash ( create_flag = > 1 ) ;
$ c - > stash ( form = > $ form ) ;
}
1 ;