Skip to content

Commit 4f69a9d

Browse files
Merge pull request #8168 from 4teamwork/amo/TI-2442/document_version_count$
Add document version count to listing and index it
2 parents 4c46364 + 6cc08d2 commit 4f69a9d

18 files changed

Lines changed: 105 additions & 4 deletions

File tree

changes/TI-2442.other

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add new listing field: "document_version_count". [amo]

docs/public/dev-manual/api/api_changelog.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Breaking Changes
1313
Other Changes
1414
^^^^^^^^^^^^^
1515
- ``@possible-watchers``: endpoint only returns users having view permission on the given context.
16+
- ``@listing``: New field `document_version_count` is now available.
1617

1718
2025.7.0 (2025-06-06)
1819
---------------------

opengever/api/listing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
'location',
3838
'related_items',
3939
'is_locked_by_copy_to_workspace',
40+
'document_version_count',
4041
'progress',
4142
])
4243

opengever/api/tests/test_listing.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,22 @@ def test_dossier_checklist_progress_ordering(self, browser):
18221822
[('Testdossier B', 1.0), ('Testdossier A', 0.5), ('Testdossier C', None)],
18231823
[(item['title'], item['progress']) for item in browser.json['items']])
18241824

1825+
@browsing
1826+
def test_document_version_count(self, browser):
1827+
self.login(self.regular_user, browser=browser)
1828+
versioner = Versioner(self.document)
1829+
versioner.create_version('Initial version')
1830+
versioner.create_version('Second version')
1831+
self.commit_solr()
1832+
1833+
view = '@listing?name=documents&columns:list=document_version_count'
1834+
browser.open(self.dossier, view=view, headers=self.api_headers)
1835+
self.assertEqual(
1836+
{u'@id': self.document.absolute_url(),
1837+
u'UID': IUUID(self.document),
1838+
u'document_version_count': 1},
1839+
browser.json['items'][0])
1840+
18251841

18261842
class TestPloneDossierParticipationsInListingWithRealSolr(SolrIntegrationTestCase):
18271843

opengever/base/solr/fields.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,11 @@ def hide_facet(self, facet):
733733
additional_required_fields=['portal_type', 'Title'],
734734
title=dossier_mf(u'label_title', default=u'Title'),
735735
),
736+
ListingField(
737+
'document_version_count',
738+
index='document_version_count',
739+
title=document_mf(u'label_document_version_count'),
740+
),
736741
DateListingField(
737742
'touched',
738743
title=base_mf(u'label_last_modified', default=u'Last modified'),

opengever/core/upgrades/20250613143257_add_document_version_count_index/__init__.py

Whitespace-only changes.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from ftw.upgrade import UpgradeStep
2+
from opengever.core.upgrade import NightlyIndexer
3+
from opengever.document.behaviors import IBaseDocument
4+
5+
6+
class AddDocumentVersionCountIndex(UpgradeStep):
7+
"""Add document version count index.
8+
"""
9+
10+
def __call__(self):
11+
query = {'object_provides': [
12+
IBaseDocument.__identifier__,
13+
]}
14+
15+
with NightlyIndexer(idxs=["document_version_count"],
16+
index_in_solr_only=True) as indexer:
17+
for brain in self.brains(query, 'Index document version count in Solr'):
18+
indexer.add_by_brain(brain)

opengever/document/configure.zcml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,11 @@
384384
name="is_locked_by_copy_to_workspace"
385385
/>
386386

387+
<adapter
388+
factory=".indexers.document_version_count"
389+
name="document_version_count"
390+
/>
391+
387392
<adapter factory=".document.UploadValidator" />
388393

389394
<adapter factory=".fileactions.BaseDocumentFileActions" />

opengever/document/indexers.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,3 +280,8 @@ def is_locked_by_copy_to_workspace(obj):
280280
return False
281281

282282
return obj.is_locked_by_copy_to_workspace()
283+
284+
285+
@indexer(IBaseDocument)
286+
def document_version_count(obj):
287+
return obj.get_current_version_id(missing_as_zero=True)

opengever/document/locales/de/LC_MESSAGES/opengever.document.po

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
msgid ""
22
msgstr ""
33
"Project-Id-Version: 1.0\n"
4-
"POT-Creation-Date: 2024-09-12 08:50+0000\n"
4+
"POT-Creation-Date: 2025-06-13 12:43+0000\n"
55
"PO-Revision-Date: 2017-10-13 14:27+0200\n"
66
"Last-Translator: Jonas Baumann <j.baumann@4teamwork.ch>\n"
77
"Language-Team: 4teamwork <info@4teamwork.ch>\n"
@@ -501,6 +501,9 @@ msgstr "Dokument signiert"
501501
msgid "label_document_type"
502502
msgstr "Dokumenttyp"
503503

504+
msgid "label_document_version_count"
505+
msgstr "Anzahl Versionen"
506+
504507
#. Default: "Added as watcher of the document"
505508
#: ./opengever/document/activities.py
506509
msgid "label_document_watcher_added"

0 commit comments

Comments
 (0)