modified calculation to load either next pagination link or pdf download link - was failing to provide link when total reports = multiples of entries_per_page (20, 40, 60, etc)
added specimen type to reports summary display; adjusted layout on reports summary pdf; amended order by requests.created_at to request_draft_report.created_at so now correctly displayed by report date
moved paginator code into own sub; separated model get_report_counts into own sub, using new count() method in Local::DB; new config item paginator.siblings; general code tidy
fix for 'mysql server has gone away' message - new DB check_db_connection() method clears dbix object if no ping received from db, forcing dbix object recreation; wrapped 'horrible' deferred keyword in flash() method; dev logger uses Console::Colored output
returns message to report screen after submission; forced 'updated_at' timestamp as ON UPDATE doesn't seem to work; moved generation of previous reports list from login to search page and out of session into var; prevented ajax lookup if < 3 chars (seems to generate persistent error if db does search with undef param); moved SQL::Lib methods query construction to new create_query() method; moved 'deferred' display to main layout tt
separated Reporter::Validation class into RV::SearchForm & RV::ReportForm to isolate profiles; handles failure to find request from search form; ajax find diagnosis function required info key (ICDO3) to be not undef; hide some page elements in print view
replaced HTTP::Validate with Data::Formvalidator in Reporter::Validator; retrieval of request data includes previous report if submitted by same user otherwise new draft report created; request data saved in session for template in case db update/insert fails and original data needs to be re-displayed; changed validation from HTML::FormHandler to Data::FormValidator, pending ability to select validation profiles; app now fully functional