@ -8,6 +8,7 @@ use NGCP::Panel::Form;
use NGCP::Panel::Utils::Email ;
use NGCP::Panel::Utils::Message ;
use JSON qw/encode_json decode_json/ ;
sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ( $ self , $ c ) = @ _ ;
@ -22,21 +23,65 @@ sub tmpl_list :Chained('/') :PathPart('emailtemplate') :CaptureArgs(0) {
my ( $ self , $ c ) = @ _ ;
my $ tmpl_rs = $ c - > model ( 'DB' ) - > resultset ( 'email_templates' ) ;
$ c - > stash - > { template_dt_columns } = NGCP::Panel::Utils::Datatables:: set_columns ( $ c , [
{ name = > 'id' , search = > 1 , title = > $ c - > loc ( '#' ) } ,
{ name = > 'reseller.name' , search = > 1 , title = > $ c - > loc ( 'Reseller' ) } ,
{ name = > 'name' , search = > 1 , title = > $ c - > loc ( 'Name' ) } ,
{ name = > 'from_email' , search = > 1 , title = > $ c - > loc ( 'From' ) } ,
{ name = > 'subject' , search = > 1 , title = > $ c - > loc ( 'Subject' ) } ,
] ) ;
#select r.id as reseller_id,r.name as reseller_name, etd.id as email_template_id, etd.name as email_template_name from resellers r
#join email_templates etd on etd.reseller_id is null
#left join email_templates et on et.name=etd.name and et.reseller_id=r.id
#where et.id is null order by r.id,etd.id;
my $ tmpl_missed_rs = $ c - > model ( 'DB' ) - > resultset ( 'resellers' ) - > search_rs ( {
'et.id' = > undef ,
} , {
'select' = > [
{ '' = > \ 'concat(me.id,"/",etd.id)' , - as = > 'id' } ,
{ '' = > \ [ 'me.id' ] , - as = > 'reseller_id' } ,
{ '' = > \ [ 'me.name' ] , - as = > 'reseller_name' } ,
{ '' = > \ [ 'etd.id' ] , - as = > 'email_template_id' } ,
{ '' = > \ [ 'etd.name' ] , - as = > 'email_template_name' } ,
] ,
'as' = > [ qw/id reseller_id reseller_name email_template_id email_template_name/ ] ,
alias = > 'me' ,
order_by = > [ qw/reseller_id email_template_id/ ] ,
from = > [
{ 'me' = > 'billing.resellers' } ,
[
{ 'etd' = > 'billing.email_templates' } ,
[
{ 'etd.reseller_id' = > { - value = > undef } } ,
] ,
] ,
[
{ 'et' = > 'billing.email_templates' , '-join_type' = > 'left' } ,
[
{
'-and' = > [
{
'et.name' = > { '-ident' = > 'etd.name' } ,
'et.reseller_id' = > { '-ident' = > 'me.id' } ,
} ,
] ,
} ,
] ,
] ,
] ,
}
) ;
if ( $ c - > user - > roles eq "admin" ) {
} elsif ( $ c - > user - > roles eq "reseller" ) {
$ tmpl_rs = $ tmpl_rs - > search ( {
reseller_id = > $ c - > user - > reseller_id ,
} ) ;
$ tmpl_missed_rs = $ tmpl_missed_rs - > search_rs ( { reseller_id = > $ c - > user - > reseller_id } ) ;
}
$ c - > stash - > { tmpl_rs } = $ tmpl_rs ;
$ c - > stash - > { template_dt_columns } = NGCP::Panel::Utils::Datatables:: set_columns ( $ c , [
{ name = > 'id' , search = > 1 , title = > $ c - > loc ( '#' ) } ,
{ name = > 'reseller.name' , search = > 1 , title = > $ c - > loc ( 'Reseller' ) } ,
{ name = > 'name' , search = > 1 , title = > $ c - > loc ( 'Name' ) } ,
{ name = > 'from_email' , search = > 1 , title = > $ c - > loc ( 'From' ) } ,
{ name = > 'subject' , search = > 1 , title = > $ c - > loc ( 'Subject' ) } ,
] ) ;
$ c - > stash - > { tmpl_missed_rs } = $ tmpl_missed_rs ;
$ c - > stash - > { email_template_external_filter } = $ c - > session - > { email_template_external_filter } ;
@ -86,6 +131,17 @@ sub tmpl_ajax_default :Chained('tmpl_list') :PathPart('ajax/default') :Args(0) {
$ c - > detach ( $ c - > view ( "JSON" ) ) ;
}
sub tmpl_ajax_missed :Chained('tmpl_list') :PathPart('ajax/missed') :Args(0) {
my ( $ self , $ c ) = @ _ ;
my $ dt_columns = NGCP::Panel::Utils::Datatables:: set_columns ( $ c , [
{ name = > 'id' , literal_sql = > 'concat(me.id,"/",etd.id)' , search = > 1 , title = > $ c - > loc ( '#' ) } ,
{ name = > 'reseller_name' , literal_sql = > 'me.name' , search = > 1 , title = > $ c - > loc ( 'Reseller' ) } ,
{ name = > 'email_template_name' , literal_sql = > 'etd.name' , search = > 1 , title = > $ c - > loc ( 'Email template' ) } ,
] ) ;
NGCP::Panel::Utils::Datatables:: process ( $ c , $ c - > stash - > { tmpl_missed_rs } , $ dt_columns ) ;
$ c - > detach ( $ c - > view ( "JSON" ) ) ;
}
sub tmpl_create :Chained('tmpl_list') :PathPart('create') :Args(0) {
my ( $ self , $ c ) = @ _ ;
@ -120,6 +176,57 @@ sub tmpl_create :Chained('tmpl_list') :PathPart('create') :Args(0) {
) ;
}
sub tmpl_sync :Chained('tmpl_list') :PathPart('sync') :Args(0) {
my ( $ self , $ c ) = @ _ ;
my $ posted = ( $ c - > request - > method eq 'POST' ) ;
my $ form = NGCP::Panel::Form:: get ( "NGCP::Panel::Form::EmailTemplate::Sync" , $ c ) ;
my $ params = { id = > encode_json ( [ map { $ _ - > id } $ c - > stash - > { tmpl_missed_rs } - > all ] ) } ;
$ form - > process (
posted = > $ posted ,
params = > $ c - > request - > params ,
item = > $ params ,
) ;
if ( $ posted ) {
if ( $ form - > validated && $ form - > values - > { id } ) {
try {
my $ schema = $ c - > model ( 'DB' ) ;
my $ pairs = decode_json ( $ form - > values - > { id } ) ;
foreach my $ ids ( @$ pairs ) {
( my ( $ reseller_id , $ tmpl_id ) ) = $ ids =~ /(\d+)\D+(\d+)/ ;
if ( $ c - > user - > roles eq "reseller" ) {
$ form - > values - > { reseller_id } = $ c - > user - > reseller_id ;
}
my $ template_rs = $ schema - > resultset ( 'email_templates' ) - > find ( $ tmpl_id ) ;
my $ template = { $ template_rs - > get_inflated_columns } ;
delete $ template - > { id } ;
$ template - > { reseller_id } = $ reseller_id ;
$ template - > { attachment_name } // = '' ;
$ schema - > txn_do ( sub {
my $ tmpl = $ c - > stash - > { tmpl_rs } - > create ( $ template ) ;
} ) ;
}
NGCP::Panel::Utils::Message:: info (
c = > $ c ,
desc = > $ c - > loc ( 'Email template successfully synced' ) ,
) ;
} catch ( $ e ) {
NGCP::Panel::Utils::Message:: error (
c = > $ c ,
error = > $ e ,
desc = > $ c - > loc ( 'Failed to sync email template' ) ,
) ;
}
NGCP::Panel::Utils::Navigation:: back_or ( $ c , $ c - > uri_for ( '/emailtemplate' ) ) ;
}
}
$ c - > stash (
form = > $ form ,
create_flag = > 1 ,
) ;
}
sub tmpl_base :Chained('tmpl_list') :PathPart('') :CaptureArgs(1) {
my ( $ self , $ c , $ tmpl_id ) = @ _ ;