RSS Git Download  Clone
..
  admin separated validation profiles for new user created by a) copy/paste application message and b) user manager - username param now handled differently; 6 new tests for duplicate user first & last names 8 years ago
  config add Trello interface (needs yml file) 8 years ago
  lib full functionality; needs more tests 8 years ago
  validation_profiles new function to tie registration of new diagnostic term to adding new dependent lab-tests 9 years ago
  01login.t 7kB changed report_available_notification.pl to determine whether notice is new or an update from time of authorisation not request status; commented dump_query in cml_rq_pcr_monitoring.pl 9 years ago
  additional_tests.t 13kB * bugfix - 'lims_cfg' originally copied from Model class, should be cfg('settings') for Controllers * requires genomics central_labs setting changing to 'all_locations' * run.t broken - died with the YAML error: Can't use an undefined value as an ARRAY reference at [...]/LIMS/Local/IssueTracker.pm line 45 8 years ago
  ajax.t 13kB registration dob entry sanity checked 11 years ago
  auto_report.t 8kB changed method of determining whether lab test supported by specimen type from lab-section specimen types datamap to lab-test specimen types datamap 12 years ago
  auto_screen.t 7kB updated auto_screen.t with recent change to screening category names 9 years ago
  bcr-abl.t 4kB re-enabled IS correction for bcr-abl tests 8 years ago
  bcr-abl.xls 16kB fixed missing specimen error - caused by submission of 'BMAT.PB' - RDBO 0.80 truncated at 4chars; moved specimen split regex to Local::Utils & added validation of specimen length; fixed ErrorHandler error in assuming exists - didn't for devel server; added Sphinx search facility - switchable on/off via config; changed bcl1 to cyclinD1 in gallium trial data feed 13 years ago
  column_types.t 5kB move lab-test accreditation info from yaml file to database; admin interface to lab-test accreditation; remove flash message about ukas_accredited_tests.yml after new lab-test, replace with redirect if appropriate 8 years ago
  constraints.t 6kB hilis3 conversion scripts for YHHN 15 years ago
  dbix-simple.t 4kB patched L::L::DBIxSimple to handle omiholders and placeholders in same query; new dbix-simple.t to test it; moved loop queries to data-maps in activity_data.pl; replace pipe-delimited file with xl file in gallium data for quintiles 13 years ago
  errors.t 9kB modified request error code 'add new' function to skip unique error codes in drop-down menu if already in use - same functionality as edit request error code function 15 years ago
  flash.t 5kB hilis3 conversion scripts for YHHN 15 years ago
  genomics_xml.t 8kB improve genomics validation failure message for family ID change path to genomics_xml.pl for genomics_xml.t suppress 'validated OK' message with -q flag 8 years ago
  hmrn_data.t 7kB substitute remaining hard-coded 'hmrn' db-name with variable picked up from hmrn_db method * working hmrn_data.t 8 years ago
  linked_lab_tests.t 4kB function to retrieve previous requests combined with get_single_request_data() so available to all views (search, results, report, etc); extended outstanding lab-tests display to unreported & unauthorised worklists 11 years ago
  local.sql 2kB script query updates 12 years ago
  patient_case_edit.t 28kB adapted email_contacts table to accept department code and report status values (setup/schema/email_reports.sql); redesigned mail_reports.pl -> email_reports.pl to allow multiple departments per hospital/organisation (not supported by mail_reports), and department and report status info now derived from email_contacts tbl, not hard-coded into script; reverted referrer_department => {updated some tests with year change or change of html tag 9 years ago
  patient_merge.t 8kB function to retrieve previous requests combined with get_single_request_data() so available to all views (search, results, report, etc); extended outstanding lab-tests display to unreported & unauthorised worklists 11 years ago
  permissions.t 8kB separated validation profiles for new user created by a) copy/paste application message and b) user manager - username param now handled differently; 6 new tests for duplicate user first & last names 8 years ago
  print_view.t 12kB add 3 new data items to genomics_data.pl; change die command to ok() for yml file check 8 years ago
  prognostic_indicator.t 16kB fixed inflate_mysql_date_to_datetime() to protect against invalid dates from pre-HILIS4 data; changed prognostic_indicator test script to manipulate dob instead of diagnosis date to provide better control of age; highlight invalid age in HMRN event data table 11 years ago
  register.t 18kB RfC336L - unaccredited tests - replace report url link with list of named tests from yaml file 8 years ago
  register_edit.t 13kB registration dob entry sanity checked 11 years ago
  register_validate.t 14kB registration dob entry sanity checked 11 years ago
  remote_systems.t 3kB configured ability to expand panels to lab-tests, configurable by section through yml file + tests appended to results.t; new potential_trial_cases cron 12 years ago
  report.t 25kB validate secondary diagnosis to prevent duplication of primary diagnosis * leads to loss of duplicate diagnosis data on rendering of Rose object by template or as_tree() * rename ConstraintMethods 'check_eq_with' to 'check_vial_id' for consistency with 'check_secondary_diagnosis' validation method 8 years ago
  report_status.t 16kB moved biopsy site reporting from free text to select menu; new ncrs_cosd script to generate xml/snomed data for NCRS; 3434 tests pass 10 years ago
  request_edit.t 25kB adapted email_contacts table to accept department code and report status values (setup/schema/email_reports.sql); redesigned mail_reports.pl -> email_reports.pl to allow multiple departments per hospital/organisation (not supported by mail_reports), and department and report status info now derived from email_contacts tbl, not hard-coded into script; reverted referrer_department => {updated some tests with year change or change of html tag 9 years ago
  request_patient_edit.t 7kB updated .t scripts; unlink pdf tmp file only if exists - occasionally doesn't so generates unlink error 12 years ago
  result_summary_options.t 6kB patched C::Screen::edit() to use same screening function as used at initial screen; fixed a lot of failing tests due to new screening functions - report_status.t still failing 14 years ago
  results.t 16kB new test for trimmed leading/trailing spaces in results data entry 8 years ago
  run.t 516B add Trello interface (needs yml file) 8 years ago
  screen.t 12kB updated report_notification table definition; updated tests to cope with clinical_details now required field (unless confif override); inserted error_clinical_details in tt 9 years ago
  search.t 7kB template tweaks to accomodate IE lt 8 12 years ago
  storage.t 9kB add 3 new data items to genomics_data.pl; change die command to ok() for yml file check 8 years ago
  test-lib.pl 15kB substitute remaining hard-coded 'hmrn' db-name with variable picked up from hmrn_db method * working hmrn_data.t 8 years ago
  test.t 2kB hilis3 conversion scripts for YHHN 15 years ago
  test_data.pl 14kB Merge branch 'hmrn-update' 8 years ago
  test_data_extra.pl 1kB first version of RfC.pm 8 years ago
  triggers.t 5kB test script edits for migration of deployment server - create/drop triggers require SUPER privileges if log_bin enabled after MySQL v5.0.x 12 years ago
  worklists.t 16kB replaced iterator on users table with get_objects - iterator throws error if 1000 rows; put sort order on get_request_storage() query 11 years ago
  README
ENV ATTRIBUTES FOR DEV SERVER: useage: export ATTR=1 LOCALHOST_SOCKET - diverts slide labels to scripts/test_scripts/socket.pl (START IT 1ST); also prevents FTP for DakoLink/ULISA USE_FILE_SESSIONS - uses file-system directory instead of sessions table USE_DB_SESSIONS - uses sessions table instead of file-system directory OVERRIDE_LOCK - prevents record being 'locked' by request status HTTP_REPORT - returns report as web-page instead of PDF RDBO_DEBUG_ON - force RDBO queries to stdout (eg test scripts); for Local::DB use $Local::QueryLogger::NO_QUERY_LOGS = 1 PDS_LOOKUPS - allow PDS queries even if is_in_production_mode = 0 SMTP_TEST - dumps message content to logs/mail.test instead of using SMTP out DEBUG_ON - use in test suite to dump application debug info to console PDF_REPORT - force report output to PDF (for dev server) SQL_TRACE - switch on query output to console * inability to load static files - check Apache DocumentRoot - may need to symlink www -> ~/apps/HILIS/static 07/2017: PrintRun - auto-generated and manual PDF will print reports for unknown referrers from locations where specific departments excluded as the department is required for determining whether to exclude record CURRENT ISSUES: Jul/2011: KNOWN ISSUE - sessions leaking in CGI v3.43 or less. Fixed in 3.44, BUT url handling changed!!! self_url() & path_info() apparently did not return query params - SEE DOCS under mod_perl (only) report function issues rollback on request_report table insert in M::Report::update_report(). remove Apache::DBI and issue goes away, but get 1 -2 new db conenctions for every new web request. override dbi_connect() in LIMS::DB and issue also goes away, but get error if a transaction fails (eg duplicate UK): rollback ineffective with AutoCommit enabled at /home/raj/perl5/lib/perl5/Rose/DB.pm line 1208. set autocommit to 0 and some db edits fail IDENTIFIED PROBLEM IN M::Roles::RequestUpdate::update_request_status() - APPEARS TO BE DUE TO LIMS::DB::StatusOption->new() ACTION, AND IS FIXED IF TRANSACTION DBH IS USED. Other actions causing same failure in same transaction: LIMS::DB::AdditionalOption::Manager->get_additional_options in do_additional_options() LIMS::DB::RequestLabTestStatus::Manager->get_request_lab_test_status() in has_outstanding_tests() LIMS::DB::StatusOption->new() in _is_authorisation_active() # patching using git: If you want to create a patch file via "git diff" that can be applied using "patch -p0 < patchfile" use the following command: git diff --no-prefix > patchfile then apply the patch: patch -p0 < patchfile If you have an existing "git diff" patch file that was created without the "--no-prefix" option, you can apply that patch via: patch -p1 < patchfile this will ignore the default a/ b/ source prefixes. # from #rdbo (26/3/2010): 14:08 < siracusa> here's what I think is happening 14:08 < siracusa> when you don't explicitly supply a db object, RDBO calls init_db() to make one 14:08 < siracusa> and init_db() eventually leads to DBI->connect() being called 14:08 < siracusa> and under Apache::DBI, DBI->connect looks first in its cache of database handles that are already connected 14:08 < siracusa> it finds an already-connected handle 14:09 < siracusa> but Apache::DBI also resets all the handle attributes to their original values before returning its cached $dbh 14:09 < siracusa> and teh original value for AutoCommit was 1 14:10 < siracusa> so it takes this $dbh which, unbeknownst to it, is still being used in an outstanding transaction 14:10 < siracusa> and sets its AutoCommit to 1 14:10 < siracusa> which apparently angers the transaction in flight and causes the weird rollback issues 14:10 < siracusa> it's always best/safest to explicitly share a db object during the course of a transaction 14:11 < siracusa> which avoids situations like this where Apache::DBI is handing out your transaction $dbh to other objects and resetting its attributes when it does *********** so solution is to use same shared dbh throughout transaction ************** Template name generation CAT::TT default is LIMS/App/runmode.tmpl overridden in tt_config using TEMPLATE_NAME_GENERATOR - generates app/runmode.tt, but only works if runmode is requested, not forwarded. Automatic template generation for forwarded rm's is handled by LIMS::get_template_name DBH cgiapp_init() uses LIMS::DB->new->retain_dbh to initialise $self->dbh_config LIMS::RDBO init_db() returns LIMS::DB->new_or_cached They are not the same dbh as $dbi->{Profile} = DBI::Profile->new set in cgiapp_init prints login sql to console, but rest of sql calls by RDBO are not. Can set $dbh->{Profile} in LIMS::RDBO but sql never output. Seems to depend on whether new_or_cached set, and whether retain_dbh used. Might be mis-using db connections: [Dispatch] ERROR' for request '/hmds/admin/lab_section': Error executing class callback in init stage: DBI connect('database=hmds_lims;host=localhost','raj',...) failed: Too many connections at /home/raj/perl5/lib/perl5/Rose/DB.pm line 887 SHOW PROCESSLIST shows sleeping processes increasing for each request, under lims_server (not mod_perl). Re-start lims_server resets to 0. Have set wait_timeout = 120 in my.cnf until this is fixed. FIXED - need to call new_or_cached->retain_dbh instead of new->retain_dbh in cgiapp_init Transactions: If using RDBO do_transaction(), methods in anon sub MUST use same db as parent method - see: http://groups.google.com/group/rose-db-object/browse_thread/thread/a30231b7c0be219d Sub-selects: 1) 'request_report.request_id' => { eq => undef }, with_objects => 'request_report' 2) my $subselect = q!NOT EXISTS (SELECT request_id FROM request_report rr WHERE rr.request_id = id)!; $data = RBDO::Manager->get_objects( clauses => [ $subselect ] ); DBH sharing - might be dangerous in commit/roll-back situations where rollback undoes previous commits in unrelated sections of code - see http://thread.gmane.org/gmane.comp.lang.perl.modules.dbi.rose-db-object/2570/focus=2575 might be safer to use new dbh for transactions. Database selection in LIMS::DB defaults to test - overridden in lims_server.pl and mod_perl config using env variable ROSEDB_DEVINIT which points to config/rosedb_devinit_[devel|prod].pl which uses modify_db() method to change db to devel/production. dbi_connect returns DBIx::Log4perl enabled dbh if ROSEDB_DEVINIT flag set, so we don't get t/ files dumping sql to console. Variable persistence: Using CAD::Server, passing id in url eg /admin/update/2 and retrieving via $data->{id} = $self->param('id') causes value to persist across subsequent requests, so if next request is to generate new record, previous id is retained and record gets updated with new data instead of creating new record - safer to hand id in hidden param in form. CA::Server & mod_perl don't suffer from this. FIXED - use CA::Server instead. mod_perl or fastcgi: See 'is my app caching db connection ?' in cgiapp list for issues regarding FastCGI and transactions: Incidentally, I hope you have something in there to catch errors at the top level of your FastCGI adapter and issue a rollback on any open database handles. If you don't, you might leave some partially completed uncommitted data around that the next request would commit. Aoache::DBI solves this for mod_perl by doing a rollback on all open connections after every request, in case the request exited abnormally. Issue using non-external fastcgi (ie FastCgiServer) - FCGI.pm (in this context ony - doesn't affect external fastcgi) redefines the warn handler set in LIMS::Local::QueryLog, so SQL statements get written to Apache error log. Solution is to use external fastcgi, or call L::L::Q::ensure_warn_handler_capture() somewhere in app (eg cgiapp_prerun), which forces L::L::Q::_warn_handler() method Debug: $self->debug( scalar, arrayref, hashref, obj or subroutine ref; followed by optional number 1 ..7) - uses Log::Dispatch either via CAP::LogDispatch or LIMS::LogDispatch - setup at top of LIMS.pm If using LIMS::LogDispatch, $self->log_dispatch->log(message => sub{Dumper $foo}, level => 'bar') also works - use for expensive ops like Data::Dumper expansion of object, which may be discarded if log level too low. TODO - integrate with debug() - need to test for presence of subroutine in args Config: Files in config directory labelled lims_*.pl are automatically loaded in LIMS::Dispatch RBDO errors: Cannot load MyApp::DB::Foo without a primary key (id) with a non-null value or another unique key with at least one non-null value - creating a new record on a table with no unique keys (except PK), using MyApp::DB::Foo->new(%data)->insert_or_update() - it can't - behaviour fixed in 0.775 - see ChangeLog ErrorHandler: LIMS::Local::ErrorHandler uses a $SIG{__DIE__} handler which interfers with CAP::Redirect (see http://www.mail-archive.com/cgiapp@lists.erlbaum.net/msg05184.html) Copied CAP::Redirect function into LIMS::Base::redirect(), omitting eval block causing problem with SIG{__DIE__} Works under test_harness & mod_perl but not fastcgi - get std server error msg capture SIGDIE in test harness mode: export DEBUG_ON=1; perl -Ilib -e '$SIG{__DIE__} = sub { warn $_[0]; die $_[0]; }; do "t/test.t";' New db tables: SQL to setup/lims.sql, any dependency data to setup/data.sql. Test db creation in rebuild.pl - set db to test or lims_scratch. Generate DB classes with script/make_classes.pl -> setup/classes.pl -> DB/Foo.pm MySQL binary logfiles: To turn off log-bin, edit /etc/mysql/my.cnf and comment out log-bin: #log-bin = /var/log/mysql/mysql-bin.log This will save 100MBs of space if you have a fast insert going on. You also have to comment out the following if you comment out log-bin or mysqld will not start: #expire_logs_days = 10 Autosuggest js: bsn.Autosuggest.jQuery.js is a compressed version of bsn.Autosuggest_2.1.3.js, with true/false changes made to 'onKeyPress bubble', so that 'return/enter' keypress just selects from list & doesn't submit form - see last posting by Igor - http://www.brandspankingnew.net/archive/2007/02/ajax_auto_suggest_v2.html DFV messages: see: http://sourceforge.net/mailarchive/forum.php?thread_name=20080108163239.GA12455%40apartia.fr&forum_name=cascade-dataform The 'msgs' hashref refers to constraint names, not field names. For this to work, you have to call the "name_this" method inside of the custom FV_URI_HTTP method. HTMLDOC: from wdir: sh .configure --prefix=/home/raj/perl-lib/htmldoc; make; make install ln -s /home/raj/www/perl-lib/htmldoc/bin/htmldoc /usr/local/bin/htmldoc; cpan HTML::HTMLDoc ASPELL: need to apt-get install aspell-en if not aleady installed Win32 - see http://www.nosq.com/blog/2005/07/aspell-0603-for-win32/ svk: svk mirror http://address.of.repo //mirror/mirror_name svk sync //mirror/mirror_name svk cp //mirror/hmds_lims/trunk //mirror/hmds_lims/branches/foo -m 'creating branch for version 0.01' then, from root dir: svk up -s svk cp //mirror/hmds_lims/trunk //mirror/hmds_lims/tags/0.01 -m 'tagging version 0.01' svk mirror --detach //mirror/hmds-lims svk co --purge svk checkout --list svk checkout --relocate //mirror/mirror_name /path/to/new/location svk mirror //mirror/hmds_lims https://www.jti.org.uk/svn/hmds_lims to merge trunk & branches: cd app/branches/foo; svk push; cd app/trunk; svk up -s 'svk pull' in your branch pulls all changes from trunk down to your branch Moose: use Moose; extends foo; works in Model classes, but in all Controller classes, get: Invalid CODE attribute: StartRunmode OR: can't locate object method 'add_callback' in RunmodeDeclare (if using Sugar) REQUEST STATUS: new request automatically gets status_option_id 1 (new) - 'requests' table default value screening -> status_option_id 2 (screened) reporting: if 'authorise' status_option inactive and no outstanding tests, status_option_id = 5 (completed) else status_option_id = 3 (reported) authorising (available in template only if request reported & 'authorise' option is active): if no oustanding tests, status_option_id = 5 (completed) else status_option_id = 4 (authorised) final_diagnosis - tmpl param enabled if request authorised (or reported if 'authorise' option inactive) AND status NOT complete AND no outstanding tests: status_option_id = 5 (completed) new lab_tests -> reverts status_option to <5 (complete) if appropriate EMAIL ALERT RULES: 1) Authorised & status = new / relapse & have e-mail contact (overriden for age / PNH) 2) test = TBCulture & diagnosis = 'Granulomatous inflammation' & LTH case 3) special rules for diagnosis = 'DLBCL or Burkitt lymphoma - further tests pending' DateTime: Unfortunately, DateTime does not seem to provide a good way to set the default stringification format for DateTime objects. A hack to do that would be to put this code somewhere in your app: use DateTime; no warnings 'redefine'; sub DateTime::_stringify { shift->strftime('%Y-%m-%d %H:%M:%S') } Then all DateTime objects will stringify "without the T" everywhere in your code, yielding: $dt = $user->expires; # a DateTime object, but... print $dt; # prints a string like "2003-12-31 12:34:56" -- no "T"! Transfer mysql backup files to new server: sync -e ssh -varuzP ./full-backup_2013-* 163.160.171.48:/backups/mysql/