RSS Git Download  Clone
Raw Blame History
package LIMS::Controller::Login;

use base 'LIMS::Base';

use Moose;
with (
	'LIMS::Controller::Roles::DataMap',
);
use LIMS::Local::Utils;

# this should not normally be called (ie/hmds/login), but just in case,
# load login.tt & display 'already logged in' message:
sub default : StartRunmode {
    my $self = shift; $self->_debug_path($self->get_current_runmode);

    return $self->tt_process();
}

sub logout : Runmode {
    my $self = shift; $self->_debug_path($self->get_current_runmode);

    # tidy up:
    $self->authen->logout;
    $self->session_delete;

    return $self->redirect( $self->query->url );
}

# redirection target if detected by authen->is_new_login:
sub hello : Runmode {
    my $self = shift;
    
    my $profile = $self->authen->store->fetch('yooza_profile');
    
    # convert profile last_login date to DT:
    if ( my $last_login = $profile->{last_login} ) { # maybe 1st login
        my $dt = LIMS::Local::Utils::to_datetime_using_parsedate($last_login);
        $self->tt_params( last_login => $dt );
    }
    
	my $user_locations_map = $self->user_locations_map; # from email_contacts tbl
	my $user_location = $profile->{user_location}->{location_name};
    
   	# if users location exists in email_contacts.display_name col, get new diagnoses:
    if ( my $org_code = $user_locations_map->{$user_location} ) {
        my $new_and_relapsed_cases = $self->new_and_relapsed_cases($org_code);
        $self->tt_params( results => $new_and_relapsed_cases );
    } 
   
    { # if any user-to-user messages:
        my $messages = $self->model('User')->get_user_messages($profile->{id});
        $self->tt_params( user_messages => $messages );
    }
    
    { # if any admin-to-user messages:        
        my $user_type = # is user internal or external?
            $user_location eq $self->cfg('settings')->{lab_name_abbreviation}
            ? 'internal'
            : 'external';
            
        my $messages = $self->model('User')->get_admin_messages($user_type);
        $self->tt_params( admin_messages => $messages );
    }
    
    # if any messages or diagnosis list:
    return 'foo'
        ? $self->tt_process()
        : $self->redirect_after_login(); # no messages & doesn't require new diags 
}

1;