diff --git a/CHANGES.rst b/CHANGES.rst
index ee9ae314e..015b1ca3e 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -15,6 +15,12 @@ Changelog
empty, it was not emptying the value on new item, now it is the case except
for `title` that can not be empty.
[gbastien]
+- Make `MeetingItem.marginalNotes` field editable by `MeetingManagers` when item
+ is `presented` (before it was when item was `itemfrozen`) so votes are also
+ editable when item is `presented` as it relies on same permission
+ `WriteMarginalNotes` that we should change name to a more generic name like
+ `WriteClosedMeetingMeetingManagersReservedFields`.
+ [gbastien]
4.2.13 (2024-12-06)
-------------------
diff --git a/src/Products/PloneMeeting/model/PloneMeeting.zargo b/src/Products/PloneMeeting/model/PloneMeeting.zargo
index 9dc5f72a4..ec1c49e71 100644
Binary files a/src/Products/PloneMeeting/model/PloneMeeting.zargo and b/src/Products/PloneMeeting/model/PloneMeeting.zargo differ
diff --git a/src/Products/PloneMeeting/profiles/default/workflows/meetingitem_workflow/definition.xml b/src/Products/PloneMeeting/profiles/default/workflows/meetingitem_workflow/definition.xml
index c578c94c9..9da3a7fec 100644
--- a/src/Products/PloneMeeting/profiles/default/workflows/meetingitem_workflow/definition.xml
+++ b/src/Products/PloneMeeting/profiles/default/workflows/meetingitem_workflow/definition.xml
@@ -357,6 +357,7 @@
Manager
+ MeetingManager
diff --git a/src/Products/PloneMeeting/tests/testWorkflows.py b/src/Products/PloneMeeting/tests/testWorkflows.py
index 2982f6e9c..491d60ede 100644
--- a/src/Products/PloneMeeting/tests/testWorkflows.py
+++ b/src/Products/PloneMeeting/tests/testWorkflows.py
@@ -973,26 +973,27 @@ def test_pm_ItemMarginalNotes(self):
item = self.create('MeetingItem')
item.setDecision(self.decisionText)
# field not writeable
- marginalNotesField = item.getField('marginalNotes')
- self.assertFalse(marginalNotesField.writeable(item))
+ marginal_notes_field = item.getField('marginalNotes')
+ self.assertFalse(marginal_notes_field.writeable(item))
self.assertFalse(item.mayQuickEdit('marginalNotes'))
self.validateItem(item)
# as MeetingManager
self.changeUser('pmManager')
# field not writeable
- self.assertFalse(marginalNotesField.writeable(item))
+ self.assertFalse(marginal_notes_field.writeable(item))
self.assertFalse(item.mayQuickEdit('marginalNotes'))
+ # writeable when "presented"
meeting = self.create('Meeting')
self.presentItem(item)
self.assertEqual(item.query_state(), 'presented')
- self.assertFalse(marginalNotesField.writeable(item))
- self.assertFalse(item.mayQuickEdit('marginalNotes'))
+ self.assertTrue(marginal_notes_field.writeable(item))
+ self.assertTrue(item.mayQuickEdit('marginalNotes'))
# writeable when meeting frozen
self.freezeMeeting(meeting)
self.assertEqual(item.query_state(), 'itemfrozen')
- self.assertTrue(marginalNotesField.writeable(item))
+ self.assertTrue(marginal_notes_field.writeable(item))
self.assertTrue(item.mayQuickEdit('marginalNotes'))
# as other fields
obsField = item.getField('observations')
@@ -1003,7 +1004,7 @@ def test_pm_ItemMarginalNotes(self):
self.closeMeeting(meeting)
self.assertEqual(meeting.query_state(), 'closed')
self.assertEqual(item.query_state(), 'accepted')
- self.assertTrue(marginalNotesField.writeable(item))
+ self.assertTrue(marginal_notes_field.writeable(item))
self.assertTrue(item.mayQuickEdit('marginalNotes'))
# but not other fields
self.assertFalse(obsField.writeable(item))