— |
use Moose::Role -traits => 'CatalystX::Controller::ExtJS::REST::SimpleExcel::Trait' ; after list => sub {
my ( $self , $c ) = @_ ;
return unless ( $c ->request->accepts( 'application/vnd.ms-excel' ));
my $data = $c ->stash->{ $self ->config->{stash_key}};
my @header = map { $_ ->{mapping} } @{ $data ->{metaData}->{fields}};
my @rows ;
foreach my $row (@{ $data ->{ $self ->root_property}}) {
my @row ;
foreach my $head ( @header ) {
my $rcopy = $row ;
my $hcopy = $head ;
while ( $hcopy =~ s/^(\w+)\.//) {
$rcopy = $rcopy ->{$1};
}
push ( @row , ref $rcopy ->{ $hcopy } ? JSON::XS::encode_json( $rcopy ->{ $hcopy }) : $rcopy ->{ $hcopy } );
}
push ( @rows , \ @row );
}
$c ->stash->{ $self ->config->{stash_key}} = {
sheets => [{
name => $self ->default_resultset,
header => \ @header ,
rows => \ @rows
}]
};
};
1;
|