Skip to content

v2.6.0

Latest
Compare
Choose a tag to compare
@xispa xispa released this 04 Apr 10:17
· 34 commits to 2.x since this release
237b7cc

Release notes

Update from 2.5.0 to 2.6.0

IMPORTANT: Allocate Sufficient Time for This Upgrade

Version 2.6.0 introduces a number of significant changes that require careful planning. If you maintain custom add-ons, you should take time to review the update and assess whether your code will need adjustments.

A key highlight of this release is the migration of many content types from Archetypes (AT) to Dexterity (DX). This is part of the broader effort to modernize the codebase and move closer to full Python 3 compatibility. As a result, the following content types have been migrated:

AnalysisCategories, AnalysisCategory, AnalysisProfiles, AnalysisProfile, AttachmentTypes, AttachmentType, BatchLabels, BatchLabel, ContainerTypes, ContainerType, Departments, Department, InstrumentTypes, InstrumentType, LabProducts, LabProduct, Manufacturers, Manufacturer, Preservations, Preservation, SampleConditions, SampleCondition, SampleMatrices, SampleMatrix, SamplePoints, SamplePoint, SampleTemplates, SampleTemplate, SampleTypes, SampleType, SamplingDeviations, SamplingDeviation, StorageLocations, StorageLocation, SubGroups, SubGroup, Suppliers, Supplier, WorksheetTemplates, WorksheetTemplate.

If you have any extenders or modifiers attached to these types in your own add-ons, you will need to port that functionality to use Dexterity behaviors.

In addition to the migration, version 2.6.0 introduces various improvements across the platform. Some of the most notable enhancements include support for Limit of Quantification (LOQ), improved handling of uncertainty values, better performance of analysis verification, a revamped sticker engine, new paste capabilities in sample registration, enhanced worksheet management, and the ability to remove users and customize user contact information. The release also includes refinements to result entry, multi-result analysis specifications, more robust catalog indexing, and many bug fixes and visual improvements across the user interface.

Several long-standing bugs have been addressed as well, including issues with result entry, catalog indexing, permissions, rejections, and Unicode handling. Performance improvements were made for analysis verification and recalculation, and additional developer utilities were added to the API.

Please note that the upgrade process may take a considerable amount of time. This is primarily due to upgrade step 2654, which involves processing and migrating a large amount of catalog data. Be prepared for a longer-than-usual upgrade window, especially for large databases.

This release has been thoroughly tested with Plone 5.2.15 and 5.2.14. For best compatibility and stability, it is strongly recommended that you pin your buildout to one of these versions when upgrading.

To ensure a smooth upgrade process, we also recommend taking a few precautionary steps beforehand:

  • Run a zeopack to compact the database
  • Create a full backup of your code and database
  • Ensure as many analyses as possible are in Verified or Published status
  • Stop any non-essential services or applications to free up memory
  • Clear or rotate log files to begin with a clean slate

What's Changed

  • Fix manually deselected references in sample add form can not be set anymore by @ramonski in #2462
  • Fix keyword missing in AnalysisSpecificationView by @toropok in #2460
  • Multiselection with duplicates support for interim fields by @xispa in #2411
  • Use dtime.to_DT instead of api.to_date by @xispa in #2417
  • Add string support for interim fields by @xispa in #2434
  • Add datetime support interim fields by @xispa in #2435
  • Show partitions initially collapsed in partition preview mode by @ramonski in #2442
  • Allow portal_type as a parameter for api.get_icon function by @xispa in #2458
  • Fix contact assigned to multiple clients cannot see samples from other clients by @xispa in #2464
  • Fix traceback when re-installing senaite.core via quick installer by @xispa in #2465
  • Support for prioritized specs when using dynamic specifications by @xispa in #2467
  • Fix min/max shifted on negative result and % error by @xispa in #2470
  • Make the prepublish guard to rely on interfaces instead of statuses by @xispa in #2468
  • Rename the permission "Reject" to "senaite.core: Transition: Reject Analysis" by @xispa in #2469
  • Fix "Reject" permission from analysis workflow is not updated by @xispa in #2472
  • Migrate Lab Departments to Dexterity by @ramonski in #2471
  • Migrate SampleConditions to Dexterity by @xispa in #2478
  • Disable snapshots for container on content add by @ramonski in #2481
  • Remove snapshots and auditlog from setup and portal folders by @xispa in #2479
  • Added DurationField and DurationWidget for Dexterity types by @xispa in #2482
  • Disable CSRF protection in SENAITE by @ramonski in #2484
  • Fix Traceback on "Manage analyses" when dynamic specs assigned by @xispa in #2486
  • Fix ValueError when creating new Dexterity contents by @ramonski in #2487
  • More informative progress of the sample analyses states by @ramonski in #2485
  • Fix TypeError when creating a DX object that once was from AT type by @xispa in #2490
  • Add setting to show/hide the laboratory name in login page by @xispa in #2491
  • Migrate Preservations to Dexterity by @xispa in #2483
  • Add listing widget for Dexterity records field by @ramonski in #2493
  • Migrate Analysis Profiles to Dexterity by @ramonski in #2492
  • Cleanup UID catalog and remove orphan temporary objects by @ramonski in #2494
  • Changed spelling error. by @dietervdwes in #2473
  • Fix dynamic analysisspecs are not linked to keywords containing only numbers by @ramonski in #2495
  • Fix non existing department ID is rendered as link in listing by @ramonski in #2496
  • Fix services widget not found when creating new profiles by @ramonski in #2498
  • Fix format type to include strings in calculation formulas by @zzzirvia in #2476
  • Fix traceback on upgrade step 2610 while cleaning up uid_catalog by @xispa in #2503
  • Fix subfield_sizes have no effect when rendering RecordField by @xispa in #2504
  • Fix UnicodeDecodeError when migrating Analysis Profiles by @ramonski in #2505
  • Migrate Sample Matrices to Dexterity by @xispa in #2501
  • Migrate Client located Analysis Profiles to DX by @ramonski in #2506
  • Allow analysis profiles to be filtered by sample type by @xispa in #2509
  • Fix specification values for hide min/max not stored on save by @ramonski in #2508
  • Fix Add action of the Client located Analysis Profiles Listing by @ramonski in #2510
  • Fix regression bug of #2510 by @ramonski in #2511
  • Skip rendering of empty record fiels by @ramonski in #2512
  • Functions for workflow update by @xispa in #2514
  • Allow to configure the types to be skipped on content structure export by @xispa in #2516
  • Fix add sort to Supported Services List of ReferenceSample Multichoice field by @toropok in #2517
  • Fix Slot Header titile of QC samples in Worksheet view by @toropok in #2520
  • Fix user who retest is not considered a verifier by @xispa in #2522
  • Added field Lab Account Number on a Supplier by @Lunga001 in #2475
  • #2513 - Worksheet print templates sorting feature by @Bugerman58 in #2515
  • Fix UnicodeDecodeError during Department DX Migration by @ramonski in #2525
  • Fix relative paths of section icons in sample view by @xispa in #2528
  • Highlight edit tabs with errors in red by @ramonski in #2526
  • Fix getting ResultsRange field by @Bugerman58 in #2523
  • Fix clients groups are displayed on labcontact's user creation form by @xispa in #2527
  • Allow to edit the result capture date by @ramonski in #2524
  • Migrate Sample Templates to Dexterity by @ramonski in #2521
  • Fix no selected services when adding a reference sample in a Worksheet by @Bugerman58 in #2530
  • Fix sample points are not filtered by type on sample creation or edition by @xispa in #2531
  • Fix disappear of the hidden mark for retested analyses by @toropok in #2532
  • Fix client-specific sample templates are displayed under setup by @xispa in #2534
  • Fix client-specific profiles are displayed under setup by @xispa in #2535
  • Fix counts from control-panel includes client-specific items by @xispa in #2536
  • Support multi-line text on result entry by @xispa in #2537
  • Migrate Sample Points to Dexterity by @xispa in #2533
  • Fix AttributeError for Instrument Adapters by @ramonski in #2543
  • Add User Profile / Password Reset by @ramonski in #2539
  • Add move_object function in the API by @xispa in #2546
  • Display creator fullname in samples listing by @xispa in #2544
  • Add get_user_email function in the api by @xispa in #2547
  • Migrate Manufacturers to DX by @Bugerman58 in #2542
  • Migrate ContainerTypes to DX by @toropok in #2540
  • Remove SamplerFullName from sample and metadata by @xispa in #2548
  • Allow to change the "From" address for sample report outgoing emails by @xispa in #2541
  • Fix contact fullname is not updated in samples listing after edition by @xispa in #2549
  • Fix adding Instrument into Manufacturer view by @Bugerman58 in #2556
  • Migrate SubGroups to DX by @toropok in #2545
  • Fix SubGroups migration typo by @toropok in #2557
  • Migrate StorageLocations to DX by @Bugerman58 in #2550
  • Fix ValueError when upgrading from <=2614 to >=2617 by @xispa in #2558
  • Fix line breaks are not displayed for text-like results by @xispa in #2559
  • Fix no available profiles in add form after sample type and/or client change by @xispa in #2560
  • Migrate InstrumentTypes to DX by @Bugerman58 in #2551
  • Instrument Results Importer/Parser improvements and fixtures by @ramonski in #2555
  • Increased field size and allowed input length for instrument import folder path by @ramonski in #2562
  • Added GPSCoordinates widget and field by @xispa in #2565
  • Flush dependent fields in sample add form only if the current value is not allowed by @ramonski in #2564
  • Migrate SamplingDeviations to DX by @Bugerman58 in #2552
  • Migrate SamplePoint Latitude and Longitude fields to Location (GPSCoordinates) by @xispa in #2566
  • Migrate BatchLabels to DX by @toropok in #2553
  • Use reference widget API in sample add form by @ramonski in #2570
  • Migrate AnalysisCategories to DX by @Bugerman58 in #2567
  • Fix content types typo by @Lunga001 in #2577
  • Buildouts redux by @xispa in #2575
  • Fix analyses and services are re-indexed after modifying category by @xispa in #2576
  • Fix setup DX folders are not indexed in uid_catalog by @xispa in #2578
  • Move Instrument Locations to Senaite setup folder by @Bugerman58 in #2571
  • Move Sample Containers to Senaite setup folder by @Bugerman58 in #2572
  • Migrate AttachmentTypes to DX by @toropok in #2554
  • Fix traceback when applying referencebehavior to non DX types by @xispa in #2579
  • Fix instrument import log message when field value is set by @ramonski in #2580
  • Move Dynamic Analysis Specs to Setup folder by @toropok in #2563
  • Move Interpretation Templates to Senaite setup folder by @Bugerman58 in #2573
  • Do not override dependent values with empties by @ramonski in #2582
  • Make SampleContainer DX type inherit from core's DX Container by @xispa in #2583
  • Migrate LabProducts to DX by @toropok in #2574
  • fix "Progress" missing i18n support by @fengyundeng in #2585
  • Fixed InvalidOperation: Invalid literal for Decimal: '' by @Lunga001 in #2587
  • Migrate Suppliers to DX by @Bugerman58 in #2581
  • Support multiple files for datagrid fields by @ramonski in #2586
  • Widget text extensions by @ramonski in #2588
  • Fix reject report to fully conform with the ISO standard by @xispa in #2589
  • Fix Traceback in referencesample analyses listing by @ramonski in #2590
  • Remove Action Handler Pool by @ramonski in #2592
  • Remove CreationDate index from catalogs in favour of created by @xispa in #2591
  • Fix Traceback for repeated migration of Suppliers by @Bugerman58 in #2594
  • Move sample analyses field logic to data manager by @ramonski in #2595
  • Improve system performance on transitions by @xispa in #2593
  • Remove unnecessary stuff and fallback to [] in getRaw by @xispa in #2597
  • Rollback ARAnalysesField's getRaw behavior by @xispa in #2603
  • Fix getAnalyses returns a LazyMap instead of a list by @xispa in #2602
  • Migrate SampleType to DX by @toropok in #2584
  • Fix allowable and default output types for Html field in the ARReport by @Bugerman58 in #2604
  • Fix clashing upgrade step number by @ramonski in #2605
  • Fix type error for admitted sticker templates widget by @ramonski in #2608
  • Fix "Other reasons" for rejection are not saved on sample registration by @xispa in #2610
  • Added Date Sample required (Y/N) setting in Setup by @xispa in #2609
  • Add readonly support for non-mutable html elements via AjaxEditForm by @xispa in #2611
  • Remove isSampleReceived index from analysis catalog by @xispa in #2612
  • Fix AttributeError for transitions created with core's workflow api by @xispa in #2613
  • Fix reference field flush in add sample form when sort_limit is used by @xispa in #2616
  • Fix cannot set/edit the name/title of InterpretationTemplate objects by @xispa in #2617
  • Fix autofill for simple fields when create Sample in the add form by @Bugerman58 in #2614
  • Add control for select/deselect all attachments when send report by @Bugerman58 in #2615
  • Fix UnicodeDecodeError when user linked to a contact with special chars by @xispa in #2618
  • Fix analysis categories are not sorted by sort key by @xispa in #2619
  • Support IAddSampleObjectInfo adapter for sample's Template field by @xispa in #2620
  • Fix inactive services are added via profile on sample creation or edition by @xispa in #2623
  • Fix unicode error if non-latin email template used by @toropok in #2621
  • Fix sizing of listing widgets by @ramonski in #2625
  • Change to new instrument imports that were introduced with #2555 by @ramonski in #2626
  • Skip workflow transition for temporary analyses by @ramonski in #2627
  • Fix default sticker template based on sample type is not rendered by @xispa in #2629
  • Fix DateTimeError when using API's to_DT and to_dt functions by @xispa in #2633
  • Fix for sending attachment if filename contain spaces by @toropok in #2631
  • Pin et-xmlfile to a Python 2 compatible version by @ramonski in #2634
  • Fix references from sample templates are not kept when partitioning by @xispa in #2630
  • Refactor Catalog Indexing by @ramonski in #2632
  • Migrate WorksheetTemplates to DX by @Bugerman58 in #2599
  • Remove reindexing of Analyses and Analysis Services on Category change by @ramonski in #2635
  • Fix JS Error in WS Template edit form by @ramonski in #2636
  • Fix samples are indicated as late when Turnaround Time is zero by @DanE417 in #2569
  • Fix sampletype-related indexes for AnalysisSpec type are not indexed by @xispa in #2639
  • Fix AttributeError on upgrade step 2654 (reindex_getDueDate) by @xispa in #2638
  • Fix missing custom transitions via adapter in Worksheet's analyses by @xispa in #2640
  • Fix AttributeError on rejection of samples without a contact set by @xispa in #2641
  • Fix Attribute Error in Upgrade Step 2619 by @ramonski in #2642
  • Do not remove inactive services from profiles and templates by @xispa in #2637
  • Added "Maximum holding time" setting to services and analyses by @xispa in #2624
  • Tabbed content view by @ramonski in #2645
  • Improve performance of analysis verification by @ramonski in #2643
  • Fix analysis instrument is not auto-assigned on change in worksheet by @xispa in #2647
  • Increase the default width for field labels to min 150px by @xispa in #2648
  • Fix AttributeError on analysis update with interim values via jsonapi by @xispa in #2650
  • Fix event subscribers are not triggered on analysis initialization by @xispa in #2649
  • Added SelectOtherField and SelectOtherWidget by @xispa in #2646
  • Fix AnalysisProfile keyword validator fail with non-ascii value by @toropok in #2656
  • Fix method is not updated on instrument change in worksheet by @xispa in #2657
  • Show Batch title or ID in Sample reference field by @ramonski in #2654
  • Add logging if external calculation module import failed by @ramonski in #2660
  • Refactor sample title + decsription into viewlets by @ramonski in #2659
  • Allow to recalculate an analysis result by @ramonski in #2661
  • CSS for some add-on based forms by @ramonski in #2663
  • Subgroups sort by sort_key by @Lunga001 in #2652
  • Custom catalogs support for default portal types via registry by @xispa in #2662
  • Fix upgrade step 2656 by @ramonski in #2664
  • Do not show "Receive Sample Statusmessage" if sample is already received by @ramonski in #2665
  • Allow to delete SENAITE site in ZMI by @ramonski in #2666
  • Batched sample registration form with Paste capabilities by @ramonski in #2658
  • Paste support for select components in sample add form by @xispa in #2668
  • Specifications support for multi-result analyses by @xispa in #2667
  • Fix incompatible sort key type for subgroup by @ramonski in #2669
  • Flush calculated result if dependency is flushed by @ramonski in #2670
  • Update GitHub Action by @ramonski in #2671
  • Fix rejected sample analyses are re-added on profile removal by @ramonski in #2672
  • Fix partitions not displayed correctly in batch samples listing by @ramonski in #2674
  • Trigger recalculation of dependants if uncertainty changes by @ramonski in #2673
  • Fix services are not deselected on template removal in sample add form by @xispa in #2675
  • Fix permission for Uncertainty field by @ramonski in #2677
  • Update code headers and copyright by @xispa in #2679
  • Add validate function in API by @xispa in #2678
  • Allow to set the uncertainty to 0 by @ramonski in #2676
  • Add function to make the assignment of custom catalogs easier by @xispa in #2681
  • Fix temporary batch title by @ramonski in #2683
  • Fix Traceback for unicode titled instruments by @ramonski in #2684
  • Fix missing default instrument import template by @ramonski in #2685
  • Added comment for richtext widget template by @ramonski in #2686
  • Remove legacy and obsolete rejection.js by @xispa in #2687
  • Added Limit of Quantification (LOQ) for services and analyses by @xispa in #2682
  • Fix JS events from legacy controllers are bound multiple times by @ramonski in #2688
  • Fix 2-Dimensional CSV import interface by @ramonski in #2689
  • Fix APIError on upgrade step 2659 (init_loq) by @xispa in #2691
  • Support date and datetime on result entry by @xispa in #2690
  • Fix UnicodeDecode Error on CSV Instrument Import by @ramonski in #2693
  • Fix error when removing a Worksheet from inside its view by @nnpvaan in #2696
  • Refactor Sticker Functionality by @ramonski in #2692
  • Add search filter by term for services in add sample form by @xispa in #2699
  • Custom contact widget in user profile by @ramonski in #2698
  • Allow to remove users by @ramonski in #2697
  • Fix missing condition fieldname in sample add form statusmessage by @ramonski in #2700
  • Make expected sampling date optional by @ramonski in #2701
  • Support for relativedelta and ymd in api.dtime by @xispa in #2695
  • Fix is_ymd('1h') rises error by @xispa in #2704
  • Add version wrapper for AT and DX contents by @ramonski in #2694

New Contributors

Full Changelog: v2.5.0...v2.6.0