mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-22 09:32:06 +02:00
Initial commit: OCA Technical packages (595 packages)
This commit is contained in:
commit
2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions
|
|
@ -0,0 +1,80 @@
|
|||
# Copyright 2020 Creu Blanca
|
||||
# Copyright 2024 Tecnativa - Víctor Martínez
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo.tools import config
|
||||
|
||||
|
||||
class DMSFieldMixin(models.AbstractModel):
|
||||
_name = "dms.field.mixin"
|
||||
_description = "Mixin to use DMS Field"
|
||||
|
||||
dms_directory_ids = fields.One2many(
|
||||
"dms.directory",
|
||||
"res_id",
|
||||
string="DMS Directories",
|
||||
domain=lambda self: [
|
||||
("res_model", "=", self._name),
|
||||
("storage_id.save_type", "!=", "attachment"),
|
||||
],
|
||||
auto_join=True,
|
||||
)
|
||||
|
||||
@api.model
|
||||
def models_to_track_dms_field_template(self):
|
||||
"""Models to be tracked for dms field templates
|
||||
:args:
|
||||
:returns: list of models
|
||||
"""
|
||||
return self.env["dms.field.template"].sudo().search([]).mapped("model_id.model")
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
"""Create a dms directory when creating the record if exist a template.
|
||||
We need to avoid applying a template except when testing functionality
|
||||
with dms_field* modules to avoid the error that a directory with the same
|
||||
name already exists (example: create partner).
|
||||
"""
|
||||
result = super().create(vals_list)
|
||||
test_condition = not config["test_enable"] or self.env.context.get(
|
||||
"test_dms_field"
|
||||
)
|
||||
if (
|
||||
test_condition
|
||||
and not self.env.context.get("skip_track_dms_field_template")
|
||||
and self._name in self.models_to_track_dms_field_template()
|
||||
):
|
||||
template = self.env["dms.field.template"].with_context(res_model=self._name)
|
||||
for item in result:
|
||||
template.with_context(res_id=item.id).create_dms_directory()
|
||||
return result
|
||||
|
||||
def write(self, vals):
|
||||
"""When modifying a record that has linked directories and changing the
|
||||
user_id field it is necessary to update the auto-generated access group
|
||||
(name and explicit_user_ids).
|
||||
"""
|
||||
res = super().write(vals)
|
||||
# Apply sudo() in case the user does not have access to the directory
|
||||
for item in self.sudo().filtered("dms_directory_ids"):
|
||||
if "user_id" in vals:
|
||||
template = self.env["dms.field.template"]._get_template_from_model(
|
||||
item._name
|
||||
)
|
||||
if template:
|
||||
template.sudo()._get_autogenerated_group(item)
|
||||
return res
|
||||
|
||||
def unlink(self):
|
||||
"""When deleting a record, we also delete the linked directories and the
|
||||
auto-generated access group.
|
||||
"""
|
||||
# Apply sudo() in case the user does not have access to the directory
|
||||
for record in self.sudo().filtered("dms_directory_ids"):
|
||||
group = (
|
||||
self.env["dms.access.group"].sudo()._get_item_from_dms_field_ref(record)
|
||||
)
|
||||
record.sudo().dms_directory_ids.unlink()
|
||||
group.unlink()
|
||||
return super().unlink()
|
||||
Loading…
Add table
Add a link
Reference in a new issue