Skip to content

Commit e925c74

Browse files
committed
Merge PR #412 into 18.0
Signed-off-by pedrobaeza
2 parents d8256bb + 60d1158 commit e925c74

4 files changed

Lines changed: 37 additions & 4 deletions

File tree

dms/models/dms_file.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ def check_access_token(self, access_token=False):
197197
string="Attachment File",
198198
prefetch=False,
199199
ondelete="cascade",
200+
index=True,
200201
)
201202

202203
def get_human_size(self):
@@ -601,6 +602,13 @@ def create(self, vals_list):
601602
new_vals_list.append(vals)
602603
return super().create(new_vals_list)
603604

605+
def unlink(self):
606+
attachments = self.mapped("attachment_id")
607+
res = super().unlink()
608+
if not self.env.context.get("dms_file"):
609+
attachments.with_context(dms_file=True).unlink()
610+
return res
611+
604612
# ----------------------------------------------------------
605613
# Locking fields and functions
606614
locked_by = fields.Many2one(comodel_name="res.users")

dms/models/ir_attachment.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright 2021 Tecnativa - Víctor Martínez
1+
# Copyright 2021-2025 Tecnativa - Víctor Martínez
22
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
33
from odoo import api, models
44
from odoo.tools import ormcache
@@ -99,3 +99,10 @@ def write(self, vals):
9999
):
100100
self._dms_operations()
101101
return res
102+
103+
def unlink(self):
104+
if not self.env.context.get("dms_file"):
105+
self.env["dms.file"].search(
106+
[("attachment_id", "in", self.ids)]
107+
).with_context(dms_file=True).unlink()
108+
return super().unlink()

dms/tests/test_storage_attachment.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@ def test_storage_attachment_record_db_unlink(self):
4848
directories = self.env["dms.directory"].search([])
4949
self.assertNotIn(directory.id, directories.ids)
5050

51+
@mute_logger("odoo.models.unlink")
52+
def test_storage_attachment_unlink_lock_file(self):
53+
group_partner_manager = self.env.ref("base.group_partner_manager")
54+
self.dms_manager_user.write({"groups_id": [(4, group_partner_manager.id)]})
55+
self.dms_user.write({"groups_id": [(4, group_partner_manager.id)]})
56+
attachment = self._create_attachment("demo.txt")
57+
attachment = attachment.with_user(self.dms_manager_user)
58+
file = self.storage.storage_file_ids.filtered(lambda x: x.name == "demo.txt")
59+
file.with_user(self.dms_user).lock()
60+
self.assertTrue(file.is_locked)
61+
self.assertFalse(file.is_lock_editor)
62+
file.with_user(self.dms_user).unlock()
63+
self.assertFalse(file.is_locked)
64+
attachment.unlink()
65+
self.assertFalse(file.exists())
66+
5167
@users("dms-manager")
5268
def test_storage_attachment_misc(self):
5369
attachment = self._create_attachment("demo.txt")
@@ -105,6 +121,8 @@ def test_storage_attachment_misc(self):
105121
self.assertEqual(
106122
self.storage.count_storage_files, 2, "Storage should have 2 files"
107123
)
124+
dms_file.unlink()
125+
self.assertFalse(attachment.exists())
108126

109127
@users("dms-manager")
110128
def test_storage_attachment_directory_record_ref_access_dms_manager(self):

dms/views/dms_file.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141
</div>
142142
<div
143143
role="menuitem"
144-
t-if="record.permission_write.raw_value and record.active.raw_value"
144+
t-if="record.permission_write.raw_value and record.active.raw_value and (!record.is_locked.raw_value or (record.is_locked.raw_value and record.is_lock_editor.raw_value))"
145145
>
146146
<a name="toggle_active" type="object">
147147
<i class="fa fa-archive" />
@@ -150,7 +150,7 @@
150150
</div>
151151
<div
152152
role="menuitem"
153-
t-if="record.permission_write.raw_value and !record.active.raw_value"
153+
t-if="record.permission_write.raw_value and !record.active.raw_value and (!record.is_locked.raw_value or (record.is_locked.raw_value and record.is_lock_editor.raw_value))"
154154
>
155155
<a name="toggle_active" type="object">
156156
<i class="fa fa-archive" />
@@ -190,7 +190,7 @@
190190
</div>
191191
<div
192192
role="menuitem"
193-
t-if="record.permission_unlink.raw_value"
193+
t-if="record.permission_unlink.raw_value and (!record.is_locked.raw_value or (record.is_locked.raw_value and record.is_lock_editor.raw_value))"
194194
>
195195
<a type="delete">
196196
<i class="fa fa-trash-o" />

0 commit comments

Comments
 (0)