Skip to content

Commit

Permalink
[ADD] hr_dms_field: New module
Browse files Browse the repository at this point in the history
TT46804
  • Loading branch information
victoralmau committed Jan 4, 2024
1 parent 5109c28 commit 08f141c
Show file tree
Hide file tree
Showing 32 changed files with 870 additions and 105 deletions.
1 change: 1 addition & 0 deletions dms/security/ir.model.access.csv
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_dms_tag_user,dms_tag_user,model_dms_tag,group_dms_user,1,1,1,1
access_dms_category_user,dms_category_user,model_dms_category,group_dms_user,1,1,1,1

access_dms_storage_base_user,dms_storage_base_user,model_dms_storage,base.group_user,1,0,0,0
access_dms_storage_portal,dms_storage_portal,model_dms_storage,base.group_portal,1,0,0,0
access_dms_storage_user,dms_storage_user,model_dms_storage,group_dms_user,1,0,0,0
access_dms_storage_manager,dms_storage_manager,model_dms_storage,group_dms_manager,1,1,1,1
Expand Down
7 changes: 6 additions & 1 deletion dms_field/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ DMS Field
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:dff92a7af33bdcd1c048e1812d7869f0fae3a616dfc625785a47ee46fcdf211f
!! source digest: sha256:ebd7a09f12a64237efec3f493957b043dda530c40c99789c887f0ef05f46c1b6
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down Expand Up @@ -36,6 +36,11 @@ related to a record.
.. contents::
:local:

Configuration
=============

It is important to set the root folder as a template BEFORE set the models that will be linked to the storage.

Bug Tracker
===========

Expand Down
1 change: 0 additions & 1 deletion dms_field/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
from . import models
from . import wizards
2 changes: 0 additions & 2 deletions dms_field/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,8 @@
"website": "https://github.com/OCA/dms",
"depends": ["dms"],
"data": [
"wizards/dms_add_directory_record.xml",
"views/dms_storage.xml",
"views/dms_directory.xml",
"security/ir.model.access.csv",
],
"assets": {
"web.assets_backend": [
Expand Down
26 changes: 23 additions & 3 deletions dms_field/demo/partner_dms.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>


<record id="demo_access_group" model="dms.access.group">
<field name="name">Everyone for Partner DMS</field>
<field name="group_ids" eval="[(4, ref('base.group_user'))]" />
Expand All @@ -12,8 +10,30 @@
<record id="storage_demo" model="dms.storage">
<field name="name">Partner Storage</field>
<field name="save_type">database</field>
</record>
<record id="demo_template_directory_01" model="dms.directory">
<field name="name">Template directory</field>
<field name="is_root_directory" eval="True" />
<field name="parent_id" eval="False" />
<field name="storage_id" ref="storage_demo" />
<field name="group_ids" eval="[(6, 0, [ref('demo_access_group')])]" />
<field name="res_model">res.partner</field>
</record>
<record id="demo_template_directory_02" model="dms.directory">
<field name="name">Subdirectory 1</field>
<field name="is_root_directory" eval="False" />
<field name="parent_id" ref="demo_template_directory_01" />
</record>
<record id="demo_template_directory_03" model="dms.directory">
<field name="name">Subdirectory 2</field>
<field name="is_root_directory" eval="False" />
<field name="parent_id" ref="demo_template_directory_01" />
</record>
<record id="storage_demo" model="dms.storage">
<!-- We need to set the models afterwards because otherwise it will not
be possible to create a directory that is not related to a recprd.-->
<field name="model_ids" eval="[(4, ref('base.model_res_partner'))]" />
<field name="field_default_group_id" ref="demo_access_group" />
<field name="template_directory_id" ref="demo_template_directory_01" />
</record>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.form</field>
Expand Down
53 changes: 52 additions & 1 deletion dms_field/models/dms_storage.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# 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
Expand All @@ -8,7 +9,10 @@
class DmsStorage(models.Model):
_inherit = "dms.storage"

field_default_group_id = fields.Many2one("dms.access.group")
template_directory_id = fields.Many2one(
comodel_name="dms.directory",
domain=[("storage_id", "=", id), ("is_root_directory", "=", True)],
)

@api.model
def _build_documents_storage(self, storage):
Expand Down Expand Up @@ -59,3 +63,50 @@ def _constrain_model_ids(self):
raise ValidationError(
_("There are directories not associated to a record")
)

def _get_storage_from_dms_file(self, model):
return self.env["dms.storage"].search([
("model_ids.model", "=", model),
("template_directory_id", "!=", False),
], limit=1)

@api.model
def create_directory_from_dms_file(self):
"""According to the model and the planned storage, we create the directory
linked to that record and the subdirectories."""
res_model = self.env.context.get("res_model")
res_id = self.env.context.get("res_id")
storage = self._get_storage_from_dms_file(res_model)
if not storage:
raise ValidationError(_("There is no storage linked to this model"))
directory_model = self.env["dms.directory"]
total_directories = directory_model.search_count([
("is_root_directory", "=", True),
("res_model", "=", res_model),
("res_id", "=", res_id)
])
if total_directories > 0:
raise ValidationError(_("There is already a linked directory created."))
directory = directory_model.create(
storage._prepare_directory_vals_from_dms_file(res_model, res_id)
)
for child_directory in storage.template_directory_id.child_directory_ids:
directory_model.create({
"name": child_directory.name,
"is_root_directory": False,
"parent_id": directory.id,
})
return directory

def _prepare_directory_vals_from_dms_file(self, res_model, res_id):
directory = self.template_directory_id
record = self.env[res_model].browse(res_id)
return {
"storage_id": self.id,
"res_id": res_id,
"res_model": res_model,
"is_root_directory": directory.is_root_directory,
# Set a unique directory name to avoid _check_name() contrain
"name": "%s (%s)" % (record._description, record.display_name),
"group_ids": directory.group_ids.ids,
}
1 change: 1 addition & 0 deletions dms_field/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
It is important to set the root folder as a template BEFORE set the models that will be linked to the storage.
2 changes: 0 additions & 2 deletions dms_field/security/ir.model.access.csv

This file was deleted.

27 changes: 16 additions & 11 deletions dms_field/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -367,48 +367,53 @@ <h1 class="title">DMS Field</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:dff92a7af33bdcd1c048e1812d7869f0fae3a616dfc625785a47ee46fcdf211f
!! source digest: sha256:ebd7a09f12a64237efec3f493957b043dda530c40c99789c887f0ef05f46c1b6
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/dms/tree/15.0/dms_field"><img alt="OCA/dms" src="https://img.shields.io/badge/github-OCA%2Fdms-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/dms-15-0/dms-15-0-dms_field"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/dms&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This addon creates a new kind of view and allows to define a folder
related to a record.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-5">Maintainers</a></li>
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p>It is important to set the root folder as a template BEFORE set the models that will be linked to the storage.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/dms/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/dms/issues/new?body=module:%20dms_field%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Creu Blanca</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>Enric Tobella &lt;<a class="reference external" href="mailto:etobella&#64;creublanca.es">etobella&#64;creublanca.es</a>&gt;</li>
<li>Jaime Arroyo &lt;<a class="reference external" href="mailto:jaime.arroyo&#64;creublanca.es">jaime.arroyo&#64;creublanca.es</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
Expand Down
6 changes: 4 additions & 2 deletions dms_field/static/src/js/base/dms_tree_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ odoo.define("dms.DmsTreeController", function (require) {
},
setParams: function (params) {
var model = params.modelName;
// To be overwritten in hr_dms_field
if (model === "hr.employee.public") {
model = "hr.employee";
}
var storage_domain = [];
var directory_domain = [];
var autocompute_directory = false;
Expand All @@ -43,7 +47,6 @@ odoo.define("dms.DmsTreeController", function (require) {
autocompute_directory = true;
show_storage = false;
}
console.log(params);
this.params = $.extend(
true,
{},
Expand Down Expand Up @@ -456,7 +459,6 @@ odoo.define("dms.DmsTreeController", function (require) {
_onDMSPreviewFile: function (ev) {
var record = this._getDataPoint(ev.data.id, {raw: true});
var fieldName = "content";
console.log(record.data);
var file_mimetype = record.data.mimetype;
var type = file_mimetype.split("/").shift();
if (
Expand Down
33 changes: 9 additions & 24 deletions dms_field/static/src/js/base/dms_tree_renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -431,31 +431,16 @@ odoo.define("dms.DmsTreeRenderer", function (require) {
var self = this;
var data = {};
this.trigger_up("dms_empty_storages", {data: data});
var context = {
default_res_id: data.res_id,
default_res_model: data.model,
default_storage_ids: [],
};
_.each(data.empty_storages, function (storage) {
context.default_storage_ids.push(storage.id);
});
new dialogs.FormViewDialog(self, {
res_model: "dms.add.directory.record",
context: context,
disable_multiple_selection: true,
title: _t("Add new root directory"),
on_saved: function (record, changed) {
if (changed) {
self._rpc({
model: "dms.add.directory.record",
method: "create_directory",
args: [[record.res_id]],
}).then(function () {
self.trigger_up("reload");
});
}
this._rpc({
context: {
res_id: data.res_id,
res_model: data.model,
},
}).open();
model: "dms.storage",
method: "create_directory_from_dms_file",
}).then(function () {
self.trigger_up("reload");
});
},
});

Expand Down
2 changes: 1 addition & 1 deletion dms_field/views/dms_storage.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
</field>
<field name="model_ids" position="after">
<field
name="field_default_group_id"
name="template_directory_id"
attrs="{'invisible': ['|', ('model_ids', '=', False),('save_type', '=', 'attachment')]}"
/>
</field>
Expand Down
1 change: 0 additions & 1 deletion dms_field/wizards/__init__.py

This file was deleted.

34 changes: 0 additions & 34 deletions dms_field/wizards/dms_add_directory_record.py

This file was deleted.

22 changes: 0 additions & 22 deletions dms_field/wizards/dms_add_directory_record.xml

This file was deleted.

Loading

0 comments on commit 08f141c

Please sign in to comment.