Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
erp5 erp5
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Labels
    • Labels
  • Merge requests 140
    • Merge requests 140
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Jobs
  • Commits
Collapse sidebar
  • nexedi
  • erp5erp5
  • Merge requests
  • !1572

Merged
Created Mar 07, 2022 by Jérome Perrin@jeromeOwner

Stop including empty items in dialog multilistfields

  • Overview 1
  • Commits 3
  • Pipelines 3
  • Changes 12

The meaning of empty items for multi list fields for categories is not clear for dialogs (if user does not want to apply any filter, then the natural way would be to select nothing).

This also caused issues with category fields, when the action script uses restrictedTraverse to get the uids corresponding to the category but a path is empty, like for example in https://lab.nexedi.com/nexedi/erp5/blob/d51bb0413a806b3db0c5eb69dec06065b9601322/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountModule_getTrialBalanceReportSectionList.py#L40-48

which does this:

# optional GAP filter
node_uid = []
gap_uid_list = []
for gap in request.get('gap_list', ()):
  gap_uid_list.append(portal.portal_categories.gap.restrictedTraverse(gap).getUid())
if gap_uid_list:
  node_uid = [x.uid for x in portal.portal_catalog(
                                   portal_type='Account',
                                   default_gap_uid=gap_uid_list)] or -1

If an empty item is selected, then gap_uid_list will contain an entry for portal.portal_categories.gap.restrictedTraverse('').getUid() which will be the uid of the gap base category. Searching with a base category uid nowadays does not match any document, but before 95e3eaec (CMFCategory: Do not index any Base Category as a related document., 2016-12-21), it was matching all documents having a relation from this base category and in the case of this trial balance report it was matching all accounts.

This was a problem for old instances with accounts created before 95e3eaec, because when they were first indexed, they had the record in category table, so they were matched, but once they get re-indexed, they no longer had the record, so the result of this report when selecting the empty item became different, because accounts were no longer included.

Looking back at this, maybe when updating to get 95e3eaec, we should have ran a migration to delete all these records (re-indexing every document in the background should be enough) so that if there's a problem, the problem happens right now and not after a few months after accounts are modified and re-indexed.

When looking at this from end user level, theses empty items not only cause this problem, but also does not have a clear behaviour and are not needed, so the changes here are about removing these empty items.

In accounting reports, there was a multi listfield showing all gap categories, "grouped" by chart of account - but the name of the chart of account was not displayed. This change to use a None item, which is rendered as disabled to display the chart of account name, but to do this we had to fix a bug in Formulator, these disabled items were only working properly for single item widgets, not multiple items widgets.

Edited Mar 07, 2022 by Jérome Perrin
Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: fix/trial_balance_empty_gap
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7