App-Dochazka-CLI
view release on metacpan or search on metacpan
lib/App/Dochazka/CLI/Util.pm view on Meta::CPAN
return \@datelist;
}
=head2 determine_employee
Given what might possibly be an employee specification (as obtained from the
user from the EMPLOYEE_SPEC token of the command line), return a status object
that will either be an error (not OK) or contain the employee object in the
payload.
If the employee specification is empty or undefined, the payload will contain
the C<$current_emp> object.
=cut
sub determine_employee {
my $s_key = shift;
$log->debug( "Entering " . __PACKAGE__ . "::determine_employee with \$s_key ->" .
( defined( $s_key ) ? $s_key : "undef" ) . "<-" );
my $status = ( $s_key )
? lookup_employee( key => $s_key, minimal => 1 )
: refresh_current_emp();
return ( $status->ok )
? $CELL->status_ok( 'EMPLOYEE_LOOKUP',
payload => App::Dochazka::Common::Model::Employee->spawn( %{ $status->payload } ) )
: rest_error( $status, "Employee lookup" );
}
=head2 lookup_employee
EMPLOYEE_SPEC may be "nick=...", "sec_id=...", "eid=...", or simply
"employee=...", in which case we use a clever algorithm to look up employees
(i.e. try looking up search key as nick, sec_id, and EID - in that order).
=cut
sub lookup_employee {
my %ARGS = validate( @_,
{
key => { type => SCALAR },
minimal => { default => 0 },
}
);
print "Entering " . __PACKAGE__ . "::lookup_employee with search key " . Dumper( $ARGS{key} )
if $debug_mode;
die( "AH! Not an EMPLOYEE_SPEC" ) unless $ARGS{key} =~ m/=/;
my ( $key_spec, $key ) = $ARGS{key} =~ m/^(.*)\=(.*)$/;
my $minimal = $ARGS{minimal} ? '/minimal' : '';
my $status;
if ( $key_spec =~ m/^emp/i ) {
$status = send_req( 'GET', "employee/nick/$key$minimal" );
BREAK_OUT: {
last BREAK_OUT if $status->not_ok and $status->payload and $status->payload->{'http_code'} == 403;
if ( $status->not_ok and $status->payload and $status->payload->{'http_code'} == 404 ) {
$status = send_req( 'GET', "employee/sec_id/$key$minimal" );
if ( $status->not_ok and $status->payload and $status->payload->{'http_code'} != 500 and looks_like_number( $key ) ) {
$status = send_req( 'GET', "employee/eid/$key$minimal" );
}
}
}
} elsif ( $key_spec =~ m/^nic/i ) {
$status = send_req( 'GET', "employee/nick/$key$minimal" );
} elsif ( $key_spec =~ m/^sec/i ) {
$status = send_req( 'GET', "employee/sec_id/$key$minimal" );
} elsif ( $key_spec =~ m/^eid/i ) {
$status = send_req( 'GET', "employee/eid/$key$minimal" );
} else {
die "AAAHAAAHHH!!! Invalid employee lookup key " . ( defined( $key_spec ) ? $key_spec : "undefined" )
}
return $status;
}
=head2 init_logger
Logger initialization routine
=cut
sub init_logger {
my $log_file = normalize_filespec( $site->DOCHAZKA_CLI_LOG_FILE );
unlink $log_file if $site->DOCHAZKA_CLI_LOG_FILE_RESET;
print "Logging to $log_file\n";
Log::Any::Adapter->set('File', $log_file );
$log->init( ident => 'dochazka-cli', debug_mode => 1 );
$log->debug( 'Logger initialized' );
}
=head2 init_prompt
(Re-)initialize the date/time-related package variables
=cut
sub init_prompt {
#print "Entering " . __PACKAGE__ . "::init_prompt\n";
init_timepiece();
$prompt_date = $today unless $prompt_date;
( $prompt_year, $prompt_month, $prompt_day ) =
$prompt_date =~ m/^(\d{4,4})-(\d{1,2})-(\d{1,2})/;
( $prompt_century ) = $prompt_year =~ m/^(\d{2,2})/;
}
=head2 month_alpha_to_numeric
Given a month written in English (e.g. "January"), return the ordinal
number of that month (i.e. 1 for January) or undef if it cannot be
determined.
=cut
( run in 0.892 second using v1.01-cache-2.11-cpan-788537b7465 )