package LIMS::Controller::Local::Worklist::Preregistration; # only ucfirst or need an entry in Dispatch use base 'LIMS::Base'; # ------------------------------------------------------------------------------ sub edit : Runmode { my $self = shift; $self->_debug_path($self->get_current_runmode); my $errs = shift; # $self->stash( errs => $errs ); # capture labno: my $labno = $self->param('id') || return $self->error( "no 'id' passed to " . $self->get_current_runmode ); $self->js_validation_profile('pre_screen_data'); my $tmpl = 'worklist/local/preregistration/'.$self->get_current_runmode.'.tt'; return $self->tt_process($tmpl, $errs); } # ------------------------------------------------------------------------------ sub update : Runmode { my $self = shift; $self->_debug_path($self->get_current_runmode); # capture labno: my $labno = $self->param('id') || return $self->error( "no 'id' passed to " . $self->get_current_runmode ); my $dfv = $self->check_rm( 'pre_screen_data', $self->validate('pre_screen_data') ) || return $self->dfv_error_page; my $data = $dfv->valid; $data->{labno} = $labno; # add labno from param('id') my $rtn = $self->model('Local')->update_pre_registration_data($data); if ($rtn) { return $self->error($rtn); } else { $self->flash( info => $self->messages('action')->{edit_success} ); return $self->redirect( $self->query->url . '/local_worklist?function_name=pre_screen' ); } } # ------------------------------------------------------------------------------ sub delete : Runmode { my $self = shift; $self->_debug_path($self->get_current_runmode); my $id = $self->param('id') || return $self->error('no id passed to ' . $self->get_current_runmode); # need confirmation to delete record: if ( $self->query->param('confirm_delete') ) { my $rtn = $self->model('Local')->delete_pre_registration_data($id); return $self->error($rtn) if $rtn; # set flash success & redirect: $self->flash( info => $self->messages('action')->{delete_success} ); my $url = $self->query->url . '/local_worklist?function_name=pre_screen'; return $self->redirect($url); } else { # just load data for confirmation: # $id is either pre_registration.id or pre_registration.labno: my $col_name = ( $id =~ /\d{2}_\d+/ ) ? 'labno' : 'id'; # ie xx_xxxxx my %args = ( class_name => 'PreRegistration', column_name => $col_name, column_value => $id, ); my $data = $self->model('Base')->get_object_by_param(\%args); # warn Dumper $data; $self->tt_params( data => $data ); my $tmpl = 'worklist/local/preregistration/'.$self->get_current_runmode.'.tt'; return $self->tt_process($tmpl); } } # ------------------------------------------------------------------------------ sub specimen_edit : Runmode { my $self = shift; $self->_debug_path($self->get_current_runmode); my $errs = shift; # $self->stash( errs => $errs ); # capture pre_registration_specimen.id: my $id = $self->param('id') || return $self->error( "no 'id' passed to " . $self->get_current_runmode ); # request_specimen data: my $rs_data = $self->model('Local')->get_unregistered_request_specimen($id); $self->tt_params( request_specimen => $rs_data ); # warn Dumper $data->as_tree; { # prereg_lab_test data map: my $data_map = $self->model('Local')->get_unregistered_request_lab_tests($id); # only 1 dataset in $data_map (only supplied 1 id), so extract it here: $self->tt_params( lab_tests => $data_map->{$id} ); # warn Dumper $data; } { # get list of specimens already in use for this pre_registration.id: my $data = $self->model('Local')->get_prereg_specimens($rs_data->pre_reg->id); my %map = map { $_->specimen_code => 1 } # skip specimen type of existing request_specimen entry: grep { $_->specimen_code ne $rs_data->specimen_code} @$data; $self->tt_params( specimens_map => \%map ); # warn Dumper \%map; } { # lab-section id for tmpl hidden field: my $lab_section = $self->model('LabSection')->get_lab_section_by_name('Flow cytometry'); $self->tt_params( lab_section_id => $lab_section->id ); } $self->js_validation_profile('pre_screen_data'); my $tmpl = 'worklist/local/preregistration/'.$self->get_current_runmode.'.tt'; return $self->tt_process($tmpl, $errs); } # ------------------------------------------------------------------------------ sub specimen_update : Runmode { my $self = shift; $self->_debug_path($self->get_current_runmode); # capture pre_registration_specimen.id: my $id = $self->param('id') || return $self->error( "no 'id' passed to " . $self->get_current_runmode ); my $dfv = $self->check_rm( 'pre_screen_data', $self->validate('pre_screen_data') ) || return $self->dfv_error_page; my $data = $dfv->valid; $data->{id} = $id; # warn Dumper $data; my $rtn = $self->model('Local')->update_pre_registration_specimen_data($data); if ($rtn) { return $self->error($rtn); } else { $self->flash( info => $self->messages('action')->{edit_success} ); return $self->redirect( $self->query->url . '/local_worklist?function_name=pre_screen' ); } } # ------------------------------------------------------------------------------ sub add_new : Runmode { my $self = shift; $self->_debug_path($self->get_current_runmode); my $errs = shift; # $self->stash( errs => $errs ); # capture pre_registration.id: my $id = $self->param('id') || return $self->error( "no 'id' passed to " . $self->get_current_runmode ); { # get data for pre_registration.id: my $data = $self->model('Local')->get_unregistered_request($id); $self->tt_params( prereg_data => $data ); # warn Dumper $data->as_tree; } { # get list of specimens already in use for this pre_registration.id: my $data = $self->model('Local')->get_prereg_specimens($id); my %map = map { $_->specimen_code => 1 } @$data; $self->tt_params( specimens_map => \%map ); # warn Dumper \%map; } { # lab-section id for tmpl hidden field: my $lab_section = $self->model('LabSection')->get_lab_section_by_name('Flow cytometry'); $self->tt_params( lab_section_id => $lab_section->id ); } $self->js_validation_profile('pre_screen_new'); my $tmpl = 'worklist/local/preregistration/'.$self->get_current_runmode.'.tt'; return $self->tt_process($tmpl, $errs); } # ------------------------------------------------------------------------------ sub new_data : Runmode { my $self = shift; $self->_debug_path($self->get_current_runmode); # capture pre_registration.id: my $id = $self->param('id') || return $self->error( "no 'id' passed to " . $self->get_current_runmode ); my $dfv = $self->check_rm( 'pre_screen_add_new', $self->validate('pre_screen_new') ) || return $self->dfv_error_page; my $data = $dfv->valid; $data->{id} = $id; # warn Dumper $data; my $rtn = $self->model('Local')->new_pre_registration_data($data); if ($rtn) { return $self->error($rtn); } else { $self->flash( info => $self->messages('action')->{create_success} ); return $self->redirect( $self->query->url . '/local_worklist?function_name=pre_screen' ); } } 1;