Skip to content

Commit 613d8fd

Browse files
committed
Handled multiple sessions for one context
1 parent b883bc5 commit 613d8fd

File tree

9 files changed

+57
-44
lines changed

9 files changed

+57
-44
lines changed

imio/dms/mail/adapters.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,8 +1141,8 @@ class OMApprovalAdapter(object):
11411141
Annotation structure: metadata + 2D matrix with n signers and m files
11421142
11431143
### Metadata
1144-
self.annot["session_id"] = str
1145-
The unique id of the internal approval session
1144+
self.annot["session_ids"] = list[session_id]
1145+
The list of esign session ids
11461146
self.annot["signers"] = list[n] (userid, name, label)
11471147
The list of signers for the approval process
11481148
self.annot["approvers"] = list[n] tuple(userids)
@@ -1170,7 +1170,7 @@ def __init__(self, context):
11701170
{
11711171
# Metadata
11721172
"current_nb": None,
1173-
"session_id": None,
1173+
"session_ids": PersistentList(),
11741174
"signers": PersistentList(),
11751175
"editors": PersistentList(),
11761176
"approvers": PersistentList(),
@@ -1186,7 +1186,7 @@ def reset(self):
11861186
"""Reset approval annotation."""
11871187
# Metadata
11881188
self.annot["current_nb"] = None
1189-
self.annot["session_id"] = None
1189+
self.annot["session_ids"] = PersistentList()
11901190
self.annot["signers"] = PersistentList()
11911191
self.annot["editors"] = PersistentList()
11921192
self.annot["approvers"] = PersistentList()
@@ -1196,9 +1196,9 @@ def reset(self):
11961196
self.annot["approval"] = PersistentList()
11971197

11981198
@property
1199-
def session_id(self):
1200-
"""Return the unique session id of the approval process."""
1201-
return self.annot["session_id"]
1199+
def session_ids(self):
1200+
"""Return all session ids for this approval."""
1201+
return self.annot.get("session_ids", PersistentList())
12021202

12031203
@property
12041204
def files_uids(self):
@@ -1855,17 +1855,27 @@ def add_mail_files_to_session(self):
18551855
signers.append((signer, email, name, label))
18561856
watcher_users = api.user.get_users(groupname="esign_watchers")
18571857
watcher_emails = [user.getProperty("email") for user in watcher_users]
1858-
session_id, session = add_files_to_session(signers, session_file_uids, bool(self.context.seal),
1859-
title=_("[ia.docs] Session {sign_id}"),
1860-
watchers=watcher_emails)
1861-
self.annot["session_id"] = session_id
1862-
session_len = len(session_file_uids)
1863-
if session_len > 1:
1864-
return True, _("${count} files added to session number ${session_id}",
1865-
mapping={"count": session_len, "session_id": session_id})
1858+
# Add one file at a time so max_session_size discrimination splits sessions naturally
1859+
new_session_ids = []
1860+
for pdf_uid in session_file_uids:
1861+
sid, _session = add_files_to_session(signers, [pdf_uid], bool(self.context.seal),
1862+
title=_("[ia.docs] Session {sign_id}"),
1863+
watchers=watcher_emails)
1864+
if sid not in new_session_ids:
1865+
new_session_ids.append(sid)
1866+
if new_session_ids:
1867+
session_ids = set(self.session_ids).union(set(new_session_ids))
1868+
self.annot["session_ids"] = PersistentList(list(session_ids))
18661869
else:
1867-
return True, _("${count} file added to session number ${session_id}",
1868-
mapping={"count": session_len, "session_id": session_id})
1870+
# All PDFs already existed — reuse the previously stored session ids
1871+
new_session_ids = list(self.session_ids)
1872+
session_len = sum(len(p) for p in self.pdf_files_uids)
1873+
n_sessions = len(new_session_ids)
1874+
if n_sessions == 1:
1875+
return True, _("${count} file(s) added to session number ${session_id}",
1876+
mapping={"count": session_len, "session_id": new_session_ids[0]})
1877+
return True, _("${count} file(s) added to ${n} sessions",
1878+
mapping={"count": session_len, "n": n_sessions})
18691879

18701880

18711881
class DmsCategorizedObjectInfoAdapter(CategorizedObjectInfoAdapter):

imio/dms/mail/locales/en/LC_MESSAGES/imio.dms.mail.po

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ msgstr ""
1616
"X-is-fallback-for: en-au en-ca en-gb en-us\n"
1717

1818
#: ./adapters.py:1877
19-
msgid "${count} file added to session number ${session_id}"
19+
msgid "${count} file(s) added to session number ${session_id}"
2020
msgstr ""
2121

2222
#: ./adapters.py:1874

imio/dms/mail/locales/fr/LC_MESSAGES/imio.dms.mail.po

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ msgstr ""
1818
"X-Generator: Poedit 1.8.4\n"
1919

2020
#: ./adapters.py:1877
21-
msgid "${count} file added to session number ${session_id}"
21+
msgid "${count} file(s) added to session number ${session_id}"
2222
msgstr "${count} fichier a été ajouté à la session numéro ${session_id}"
2323

2424
#: ./adapters.py:1874

imio/dms/mail/locales/generated.pot

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ msgstr ""
1818
"Domain: imio.dms.mail\n"
1919

2020
#: ./adapters.py:1877
21-
msgid "${count} file added to session number ${session_id}"
21+
msgid "${count} file(s) added to session number ${session_id}"
2222
msgstr ""
2323

2424
#: ./adapters.py:1874

imio/dms/mail/locales/imio.dms.mail.pot

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ msgstr ""
1818
"Domain: imio.dms.mail\n"
1919

2020
#: ./adapters.py:1877
21-
msgid "${count} file added to session number ${session_id}"
21+
msgid "${count} file(s) added to session number ${session_id}"
2222
msgstr ""
2323

2424
#: ./adapters.py:1874

imio/dms/mail/skins/imio_dms_mail/imiodmsmail.css.dtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,11 +1064,11 @@ div.faceted-session-info {
10641064
padding-bottom: 0px;
10651065
}
10661066

1067-
#content table#context_viewlet_signers_table {
1067+
#content table.context_viewlet_signers_table {
10681068
margin-bottom: 0px;
10691069
}
10701070

1071-
#context_viewlet_signers_table td {
1071+
.context_viewlet_signers_table td {
10721072
padding-right: 10px;
10731073
}
10741074

imio/dms/mail/subscribers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,8 @@ def dmsoutgoingmail_transition(mail, event):
447447
if not get_registry_seal_code():
448448
msg2 = _("Seal code must be defined in eSign settings befode sending session")
449449
else:
450-
ExternalSessionCreateView(mail, mail.REQUEST)(session_id=approval.session_id)
450+
for sid in approval.session_ids:
451+
ExternalSessionCreateView(mail, mail.REQUEST)(session_id=sid)
451452
api.portal.show_message(
452453
message=msg,
453454
request=mail.REQUEST,

imio/dms/mail/tests/test_adapters.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ def test_reset(self):
535535
"files": [self.files[0].UID(), self.files[1].UID()],
536536
"current_nb": None,
537537
"approvers": [["dirg"], ["bourgmestre", "chef"]],
538-
"session_id": None,
538+
"session_ids": [],
539539
"pdf_files": [[], []],
540540
"approval": [
541541
[
@@ -562,7 +562,7 @@ def test_reset(self):
562562
"files": [],
563563
"current_nb": None,
564564
"approvers": [],
565-
"session_id": None,
565+
"session_ids": [],
566566
"pdf_files": [],
567567
"approval": [],
568568
"editors": [],
@@ -828,7 +828,7 @@ def test_update_signers(self):
828828
"files": [self.files[0].UID(), self.files[1].UID()],
829829
"current_nb": None,
830830
"approvers": [["dirg"], ["bourgmestre", "chef"]],
831-
"session_id": None,
831+
"session_ids": [],
832832
"pdf_files": [[], []],
833833
"approval": [
834834
[
@@ -859,7 +859,7 @@ def test_update_signers(self):
859859
"files": [self.files[0].UID(), self.files[1].UID()],
860860
"current_nb": 0,
861861
"approvers": [["dirg"], ["bourgmestre", "chef"]],
862-
"session_id": None,
862+
"session_ids": [],
863863
"pdf_files": [[], []],
864864
"approval": [
865865
[
@@ -890,7 +890,7 @@ def test_update_signers(self):
890890
"files": [self.files[0].UID(), self.files[1].UID()],
891891
"current_nb": 0,
892892
"approvers": [["dirg"], ["bourgmestre", "chef"]],
893-
"session_id": None,
893+
"session_ids": [],
894894
"pdf_files": [[], []],
895895
"approval": [
896896
[
@@ -941,7 +941,7 @@ def test_add_remove_file_to_approval(self):
941941
"files": [self.files[1].UID()],
942942
"current_nb": None,
943943
"approvers": [["dirg"], ["bourgmestre", "chef"]],
944-
"session_id": None,
944+
"session_ids": [],
945945
"pdf_files": [[]],
946946
"approval": [
947947
[{"status": "w", "approved_on": None, "approved_by": None}],
@@ -964,7 +964,7 @@ def test_add_remove_file_to_approval(self):
964964
"files": [self.files[1].UID()],
965965
"current_nb": None,
966966
"approvers": [["dirg"], ["bourgmestre", "chef"]],
967-
"session_id": None,
967+
"session_ids": [],
968968
"pdf_files": [[]],
969969
"approval": [
970970
[{"status": "w", "approved_on": None, "approved_by": None}],
@@ -987,7 +987,7 @@ def test_add_remove_file_to_approval(self):
987987
"files": [self.files[1].UID(), self.files[0].UID()],
988988
"current_nb": None,
989989
"approvers": [["dirg"], ["bourgmestre", "chef"]],
990-
"session_id": None,
990+
"session_ids": [],
991991
"pdf_files": [[], []],
992992
"approval": [
993993
[
@@ -1016,7 +1016,7 @@ def test_add_remove_file_to_approval(self):
10161016
"files": [self.files[1].UID(), self.files[0].UID()],
10171017
"current_nb": None,
10181018
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1019-
"session_id": None,
1019+
"session_ids": [],
10201020
"pdf_files": [[], []],
10211021
"approval": [
10221022
[
@@ -1105,7 +1105,7 @@ def test_approve_file(self):
11051105
"files": [self.files[0].UID(), self.files[1].UID()],
11061106
"current_nb": 0,
11071107
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1108-
"session_id": None,
1108+
"session_ids": [],
11091109
"pdf_files": [[], []],
11101110
"approval": [
11111111
[
@@ -1138,7 +1138,7 @@ def test_approve_file(self):
11381138
"files": [self.files[0].UID(), self.files[1].UID()],
11391139
"current_nb": 0,
11401140
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1141-
"session_id": None,
1141+
"session_ids": [],
11421142
"pdf_files": [[], []],
11431143
"approval": [
11441144
[
@@ -1171,7 +1171,7 @@ def test_approve_file(self):
11711171
"files": [self.files[0].UID(), self.files[1].UID()],
11721172
"current_nb": 0,
11731173
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1174-
"session_id": None,
1174+
"session_ids": [],
11751175
"pdf_files": [[], []],
11761176
"approval": [
11771177
[
@@ -1204,7 +1204,7 @@ def test_approve_file(self):
12041204
"files": [self.files[0].UID(), self.files[1].UID()],
12051205
"current_nb": 1,
12061206
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1207-
"session_id": None,
1207+
"session_ids": [],
12081208
"pdf_files": [[], []],
12091209
"approval": [
12101210
[
@@ -1240,7 +1240,7 @@ def test_approve_file(self):
12401240
"files": [self.files[0].UID(), self.files[1].UID()],
12411241
"current_nb": -1,
12421242
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1243-
"session_id": 0,
1243+
"session_ids": [0],
12441244
"pdf_files": [[self.omail["reponse-salle.pdf"].UID()], [self.omail["reponse-salle-1.pdf"].UID()]],
12451245
"approval": [
12461246
[
@@ -1281,7 +1281,7 @@ def test_unapprove_file(self):
12811281
"files": [self.files[0].UID()],
12821282
"current_nb": -1,
12831283
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1284-
"session_id": 0,
1284+
"session_ids": [0],
12851285
"pdf_files": [[self.omail["reponse-salle.pdf"].UID()]],
12861286
"approval": [
12871287
[
@@ -1308,7 +1308,7 @@ def test_unapprove_file(self):
13081308
"files": [self.files[0].UID()],
13091309
"current_nb": 0,
13101310
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1311-
"session_id": 0,
1311+
"session_ids": [0],
13121312
"pdf_files": [[self.omail["reponse-salle.pdf"].UID()]],
13131313
"approval": [
13141314
[{"status": "p", "approved_on": None, "approved_by": None}],
@@ -1338,7 +1338,7 @@ def test_unapprove_file(self):
13381338
"files": [self.files[0].UID()],
13391339
"current_nb": 0,
13401340
"approvers": [["dirg"], ["bourgmestre", "chef"]],
1341-
"session_id": 0,
1341+
"session_ids": [0],
13421342
"pdf_files": [[self.omail["reponse-salle.pdf"].UID()]],
13431343
"approval": [
13441344
[{"status": "p", "approved_on": None, "approved_by": None}],
@@ -1388,7 +1388,7 @@ def test_add_mail_files_to_session(self):
13881388
},
13891389
)
13901390
self.assertEqual(self.approval.add_mail_files_to_session(),
1391-
(True, "${count} file added to session number ${session_id}"))
1391+
(True, "${count} file(s) added to session number ${session_id}"))
13921392
self.assertEqual(len(self.omail.values()), 3)
13931393
self.assertIn("reponse-salle.pdf", self.omail)
13941394
pdf_file = self.omail["reponse-salle.pdf"]
@@ -1451,10 +1451,12 @@ def test_add_mail_files_to_session(self):
14511451
"c_uids": {self.omail.UID(): [pdf_file.UID()]},
14521452
},
14531453
)
1454+
self.assertEqual(len(self.approval.session_ids), 1)
1455+
self.assertEqual(self.approval.session_ids[0], 0)
14541456

14551457
# Already done
14561458
self.assertEqual(self.approval.add_mail_files_to_session(),
1457-
(True, "${count} file added to session number ${session_id}"))
1459+
(True, "${count} file(s) added to session number ${session_id}"))
14581460
last_update = get_session_annotation()["sessions"][0]["last_update"]
14591461
self.assertEqual(
14601462
get_session_annotation(),

imio/dms/mail/tests/test_subscribers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ def test_dmsoutgoingmail_modified_approval_annot(self):
922922
"files": [],
923923
"current_nb": None,
924924
"approvers": [[], []],
925-
"session_id": None,
925+
"session_ids": [],
926926
"pdf_files": [],
927927
"approval": [[], []],
928928
"editors": [True, False],

0 commit comments

Comments
 (0)