#!/usr/bin/env perl =for stopwords rfc485 crons login =head1 NAME rfc485-user_permissions.pl - Email user permission queries to Lynda =head1 USAGE script/crons/quarterly/rfc485-user_permissions.pl =head1 DESCRIPTION report all users in location HMDS in order of last login report all users not in location HMDS with custom permissions =head1 OPTIONS =head2 C<-t> Flag to put program in testing mode (no emails to end users =head2 C<-d> Not used =cut use lib '/home/raj/perl5/lib/perl5'; use FindBin qw($Bin); # warn $Bin; use lib $Bin . '/../../../lib'; use HMDS::Perl; use version; our $VERSION = qv('1.0.0'); use LIMS::Local::QueryMailer; # get command line options and setup use Getopt::Std; getopts( 'd:t', \my %opt ); # week, testing my $JUST_TESTING = $opt{t} || 0; # email to ra.jones only my @recipients = ( 'raj.secure', 'lynda.blythe.secure' ); # set SQLLibrary to use __DATA__ my $sql_lib = LIMS::Local::QueryLibrary->new( { lib => [] } ); # initialise my $query = LIMS::Local::QueryMailer->new( testing => $JUST_TESTING ); my $sql; # execute both queries foreach ( 'HMDS_USERS', 'NONHMDS_USERS' ) { $sql = $sql_lib->retr($_); $query->run( sql => $sql, sheet_name => $_ ); } # process results and send email my $ref_date = DateTime->now->ymd(); $query->make_excel("hilis4_user_audit$ref_date.xlsx"); $query->mail_results( recipients => \@recipients, subject => 'HILIS4 Quarterly User Audit' ); # debugging if ($JUST_TESTING) { $query->save_file('/tmp'); } __DATA__ [HMDS_USERS] select username, first_name, last_name, email, designation, u.active, last_login from users u join user_locations ul on u.user_location_id = ul.id where ul.location_name = 'HMDS' order by last_login [NONHMDS_USERS] select username, first_name, last_name, email, designation, group_concat(uf.function_name order by uf.function_name) as permissions, u.active, last_login from users u join user_locations ul on u.user_location_id = ul.id join user_permission up on up.user_id = u.id join user_functions uf on up.function_id = uf.id where ul.location_name != 'HMDS' and uf.function_name not in ('print_one','view_authorised','view_history','search') group by u.id order by last_login