new_pnh_alert, juvenile_diagnosis_status_alert & chest_clinic_diagnosis_alert log sucessful emails to request_history; refactored some repeated code in ScriptHelpers
new chimerism chart; moved 'just testing' warnings from templates into L::Mail::_verify_service_status() for appending to all messages if not in production mode - can be overriden with '_safe_message' flag from caller
new tables sample_types, lab_section_sample_type & specimen_sample_type; added sample-type data to lab sections and specimens configuration functions; replaced arg to ErrorHandler::set_errorhandler_args with L::Local::Config->instance, as used in QueryLog
new screen_category table; moved screens 'type' col to category_id; modified all screening terms & screening tests admin functions to accomodate new screen_category table; removed ajax validation from screen description & lab test field_label as these use 2 & 3-col unique keys so can't be validated by AJAX; email reports function uses users secure email address as sender; modifed portal_access function to supply SHA1 hash of current date - so failed login not sent back to portal page without explanation; modified mail_reports.pl to use item names instead of table id accessors
added sort-by referrer option to print run; replaced get_email_addresses() & get_contacts() in ScriptHelpers with class attributes secure_contacts & user_emails; tweaked print.css for print run outreach reports
more patches to cron scripts - all date subtractions performed on a new time_now() object in ScriptHelpers::date_subtract(), NOT on the local object in case it's used again after the DT subtract() function performed
moved some LIMS::Base methods out to LIMS::Role::Base; new cron mail_reports.pl - shares some methods from LIMS; exempted http requests to Chart methods from authentication to allow mail_reports.pl script to generate charts