Browse Source

[ADD] emc_document: Management of documents

Allow you to store documents and organize them in categories.

Access right is not managed yet. It must be solved in further commit.
pull/1/head
Rémy Taymans 6 years ago
parent
commit
71a801dc2b
  1. 2
      easy_my_coop_document/__init__.py
  2. 32
      easy_my_coop_document/__openerp__.py
  3. 2
      easy_my_coop_document/models/__init__.py
  4. 80
      easy_my_coop_document/models/document.py
  5. 3
      easy_my_coop_document/security/ir.model.access.csv
  6. 39
      easy_my_coop_document/views/easy_my_coop_document_menu.xml
  7. 105
      easy_my_coop_document/views/easy_my_coop_document_views.xml

2
easy_my_coop_document/__init__.py

@ -0,0 +1,2 @@
# -*- coding: utf8 -*-
import models

32
easy_my_coop_document/__openerp__.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Rémy Taymans <remytaymans@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Easy My Coop Document',
'summary': """
Manage the documents of your cooperative.
""",
'description': """
""",
'author': 'Rémy Taymans',
'license': 'AGPL-3',
'version': '9.0.1.0',
'website': "https://github.com/houssine78/vertical-cooperative",
'category': 'Cooperative Management',
'depends': [
'base',
'web',
],
'data': [
'security/ir.model.access.csv',
'views/easy_my_coop_document_menu.xml',
'views/easy_my_coop_document_views.xml',
]
}

2
easy_my_coop_document/models/__init__.py

@ -0,0 +1,2 @@
# -*- coding: utf8 -*-
from . import document

80
easy_my_coop_document/models/document.py

@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Rémy Taymans <remytaymans@gmail.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from openerp import models, fields, api
class Document(models.Model):
_name = 'easy_my_coop.document'
_description = "Document"
_order = 'document_date desc, name'
name = fields.Char("Name", required=True)
description = fields.Text("Description")
document = fields.Binary('Document', attachment=True, required=True)
filename = fields.Char("Document File Name")
mimetype = fields.Char("Mime-Type", compute='_mimetype')
file_size = fields.Integer("File Size", compute='_file_size')
document_date = fields.Date("Document Date",
default=fields.Date.today())
category = fields.Many2one('easy_my_coop.document.category',
string="Category")
published = fields.Boolean("Published?")
publication_date = fields.Datetime("Publication Date",
compute='_publication_date',
store=True)
public = fields.Boolean("Public?")
@api.depends('document')
def _mimetype(self):
for doc in self:
attachment_mgr = self.env['ir.attachment'].sudo()
attachment = attachment_mgr.search_read(
[('res_model', '=', self._name),
('res_id', '=', doc.id),
('res_field', '=', 'document')],
fields=['mimetype', 'file_size'],
limit=1,
)[0]
doc.mimetype = attachment['mimetype']
@api.depends('document')
def _file_size(self):
for doc in self:
attachment_mgr = self.env['ir.attachment'].sudo()
attachment = attachment_mgr.search_read(
[('res_model', '=', self._name),
('res_id', '=', doc.id),
('res_field', '=', 'document')],
fields=['mimetype', 'file_size'],
limit=1,
)[0]
doc.file_size = attachment['file_size']
@api.depends('published')
def _publication_date(self):
for doc in self:
if doc.published and not doc.publication_date:
doc.publication_date = fields.Datetime.now()
if not doc.published:
doc.publication_date = False
class Category(models.Model):
_name = 'easy_my_coop.document.category'
_description = "Category"
_order = 'name'
name = fields.Char("Name", required=True)
description = fields.Text("Description")
parent_id = fields.Many2one('easy_my_coop.document.category',
string="Parent Category")
child_ids = fields.One2many('easy_my_coop.document.category',
'parent_id',
string="Child Categories")
document_ids = fields.One2many('easy_my_coop.document',
'category',
string="Documents")

3
easy_my_coop_document/security/ir.model.access.csv

@ -0,0 +1,3 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_easy_my_coop_document,access_easy_my_coop_document,model_easy_my_coop_document,,1,0,0,0
access_easy_my_coop_document_category,access_easy_my_coop_document_category,model_easy_my_coop_document_category,,1,0,0,0

39
easy_my_coop_document/views/easy_my_coop_document_menu.xml

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Rémy Taymans <remytaymans@gmail.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<openerp>
<data>
<!-- Action to open document list -->
<act_window id="action_easy_my_coop_document"
name="Document"
res_model="easy_my_coop.document"
view_mode="tree,form" />
<!-- Action to open category list -->
<act_window id="action_easy_my_coop_document_category"
name="Categories"
res_model="easy_my_coop.document.category"
view_mode="tree,form" />
<!-- Root menu for document -->
<menuitem id="menu_main_easy_my_coop_document"
name="Documents"
sequence="45" />
<!-- Menu item to open Document list -->
<menuitem id="menu_document"
name="Documents"
parent="menu_main_easy_my_coop_document"
action="action_easy_my_coop_document" />
<!-- Menu item to open Category list -->
<menuitem id="menu_category"
name="Categories"
parent="menu_main_easy_my_coop_document"
action="action_easy_my_coop_document_category" />
</data>
</openerp>

105
easy_my_coop_document/views/easy_my_coop_document_views.xml

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Rémy Taymans <remytaymans@gmail.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<openerp>
<data>
<!-- Document form view -->
<record id="view_form_document" model="ir.ui.view">
<field name="name">Document Form</field>
<field name="model">easy_my_coop.document</field>
<field name="arch" type="xml">
<form string="Documents">
<group>
<field name="name"/>
<field name="filename" invisible="1"/>
<field name="document" filename="filename"/>
<field name="document_date"/>
<field name="description"/>
<field name="public"/>
<field name="category"/>
<field name="published"/>
<field name="publication_date" readonly="True"/>
</group>
</form>
</field>
</record>
<!-- Document tree view -->
<record id="view_tree_document" model="ir.ui.view">
<field name="name">Document Tree</field>
<field name="model">easy_my_coop.document</field>
<field name="arch" type="xml">
<tree decoration-muted="not published">
<field name="name"/>
<field name="document" filename="filename"/>
<field name="document_date"/>
<field name="description"/>
<field name="public"/>
<field name="category"/>
<field name="published"/>
<field name="publication_date"/>
</tree>
</field>
</record>
<!-- Document search view -->
<record id="view_search_document" model="ir.ui.view">
<field name="name">Document Search</field>
<field name="model">easy_my_coop.document</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="category"/>
<filter string="Public" domain="[('public', '=', True)]"/>
<filter string="Published" domain="[('published', '=', True)]"/>
<filter string="Category" context="{'group_by': 'category'}"/>
</search>
</field>
</record>
<!-- Category form view -->
<record id="view_form_category" model="ir.ui.view">
<field name="name">Category Form</field>
<field name="model">easy_my_coop.document.category</field>
<field name="arch" type="xml">
<form string="Categories">
<group>
<field name="name"/>
<field name="description"/>
<field name="parent_id"/>
</group>
</form>
</field>
</record>
<!-- Category tree view -->
<record id="view_tree_category" model="ir.ui.view">
<field name="name">Category Tree</field>
<field name="model">easy_my_coop.document.category</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="description"/>
<field name="parent_id"/>
</tree>
</field>
</record>
<!-- Category search view -->
<record id="view_search_category" model="ir.ui.view">
<field name="name">Category Search</field>
<field name="model">easy_my_coop.document.category</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<filter string="Parent Category"
context="{'group_by': 'parent_id'}"/>
</search>
</field>
</record>
</data>
</openerp>
Loading…
Cancel
Save