Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2017-2019 MuK IT GmbH
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-->
<odoo>
<record id="view_dms_category_search" model="ir.ui.view">
<field name="name">dms_category.search</field>
<field name="model">dms.category</field>
<field name="arch" type="xml">
<search string="Categories">
<field
name="name"
filter_domain="['|', ('name', 'ilike', self), ('parent_id', 'child_of', raw_value)]"
/>
<filter
string="All"
name="all"
domain="['|', ('active', '=', False), ('active', '=', True)]"
/>
</search>
</field>
</record>
<record id="view_dms_category_tree" model="ir.ui.view">
<field name="name">dms_category.tree</field>
<field name="model">dms.category</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="parent_id" />
<field name="tag_ids" />
</tree>
</field>
</record>
<record id="view_dms_category_form" model="ir.ui.view">
<field name="name">dms_category.form</field>
<field name="model">dms.category</field>
<field name="arch" type="xml">
<form string="Category">
<sheet>
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<div class="oe_button_box" name="button_box" />
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" placeholder="Invoices" />
<field name="active" invisible="1" />
</h1>
</div>
<group>
<group>
<field name="parent_id" />
</group>
<group>
<field name="count_categories" string="Subcategories" />
</group>
</group>
<group>
<group>
<field name="count_tags" string="Tags" />
</group>
<group>
<field name="count_files" string="Files" />
<field name="count_directories" string="Directories" />
</group>
</group>
<notebook>
<page string="Tags">
<field
name="tag_ids"
mode="kanban"
context="{'default_category_id': active_id}"
/>
</page>
<page string="Subcategories">
<field
name="child_category_ids"
widget="one2many"
mode="tree"
context="{'default_parent_id': active_id}"
/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_dms_category" model="ir.actions.act_window">
<field name="name">Categories</field>
<field name="res_model">dms.category</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_all': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new Category.
</p>
<p>
Categories are used to categorize Documents.
</p>
</field>
</record>
<menuitem
id="menu_dms_category"
name="Categories"
parent="cat_menu_dms_config_organizing"
action="action_dms_category"
/>
</odoo>

View file

@ -0,0 +1,744 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2017-2019 MuK IT GmbH
Copyright 2021 Tecnativa - Víctor Martínez
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-->
<odoo>
<record id="action_dms_directories_directory" model="ir.actions.act_window">
<field name="name">Subdirectories</field>
<field name="res_model">dms.directory</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">
[
("is_hidden", "=", False),
]
</field>
<field name="context">
{
'default_parent_id': active_id,
'searchpanel_default_parent_id': active_id
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Click to add a new directory.
</p>
<p>
Directories can be used to structure and organize
files directly in Odoo.
</p>
</field>
</record>
<record id="action_dms_files_directory" model="ir.actions.act_window">
<field name="name">Files</field>
<field name="res_model">dms.file</field>
<field name="view_mode">kanban,tree,graph,pivot,form</field>
<field name="domain">
[
("is_hidden", "=", False),
]
</field>
<field name="context">
{
'default_directory_id': active_id,
'searchpanel_default_directory_id': active_id
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Click to add a new file.
</p>
<p>
Files are used to save content directly in Odoo.
</p>
</field>
</record>
<record id="action_dms_directories_all_directory" model="ir.actions.act_window">
<field name="name">Subdirectories</field>
<field name="res_model">dms.directory</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">
[
("parent_id", "child_of", active_id),
("is_hidden", "=", False),
("id", "!=", active_id),
]
</field>
<field name="context">
{
'default_parent_id': active_id,
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Click to add a new directory.
</p>
<p>
Directories can be used to structure and organize
files directly in Odoo.
</p>
</field>
</record>
<record id="action_dms_files_all_directory" model="ir.actions.act_window">
<field name="name">Files</field>
<field name="res_model">dms.file</field>
<field name="view_mode">kanban,tree,graph,pivot,form</field>
<field name="domain">
[
("is_hidden", "=", False),
]
</field>
<field name="context">
{
'default_directory_id': active_id,
'searchpanel_default_directory_id': active_id
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Click to add a new file.
</p>
<p>
Files are used to save content directly in Odoo.
</p>
</field>
</record>
<record id="search_dms_directory" model="ir.ui.view">
<field name="name">dms_directory.search</field>
<field name="model">dms.directory</field>
<field name="arch" type="xml">
<search>
<field name="complete_name" />
<filter
string="My Directories"
name="filter_user"
domain="[('create_uid', '=', uid)]"
/>
<filter
string="Starred Directories"
name="filter_starred"
domain="[('starred', '=', True)]"
/>
<separator />
<filter
string="Root Directories"
name="filter_root"
domain="[('is_root_directory', '=', True)]"
/>
<separator />
<filter
string="Creation Date"
name="filter_create"
date="create_date"
/>
<filter
string="Modification Date"
name="filter_write"
date="write_date"
/>
<group expand="0" string="Group By">
<filter
name="group_color"
string="Color"
domain="[]"
context="{'group_by':'color'}"
/>
<filter
name="group_category"
string="Category"
domain="[]"
context="{'group_by':'category_id'}"
/>
<separator />
<filter
name="group_storage"
string="Storage"
domain="[]"
context="{'group_by':'storage_id'}"
/>
</group>
<searchpanel>
<field
name="parent_id"
icon="fa-folder"
limit="0"
enable_counters="1"
/>
<field
name="category_id"
select="multi"
groupby="parent_id"
icon="fa-users"
limit="0"
/>
<field
name="tag_ids"
select="multi"
icon="fa-tag"
groupby="category_id"
limit="0"
enable_counters="1"
/>
</searchpanel>
</search>
</field>
</record>
<record id="view_dms_directory_kanban" model="ir.ui.view">
<field name="name">dms_directory.kanban</field>
<field name="model">dms.directory</field>
<field name="arch" type="xml">
<kanban
class="mk_directory_kanban_view o_kanban_small_column align-content-start"
banner_route="/dms/document_onboarding/directory"
>
<field name="id" />
<field name="tag_ids" />
<field name="name" />
<field name="color" />
<field name="starred" />
<field name="create_uid" />
<field name="write_date" />
<field name="permission_write" />
<field name="permission_unlink" />
<field name="icon_url" />
<field name="count_directories" />
<field name="count_files" />
<field name="count_directories_title" />
<field name="count_files_title" />
<field name="count_total_directories" />
<field name="count_total_files" />
<templates>
<t t-name="kanban-box">
<div
t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"
>
<div class="o_dropdown_kanban dropdown">
<a
class="dropdown-toggle o-no-caret btn"
href="#"
role="button"
data-toggle="dropdown"
aria-label="Dropdown menu"
title="Dropdown menu"
>
<span class="fa fa-ellipsis-v" />
</a>
<div class="dropdown-menu" role="menu">
<div class="row">
<div class="col-6 mk_directory_kanban_views">
<h6 class="dropdown-header">Views
</h6>
<a
type="object"
name="action_dms_directories_all_directory"
role="menuitem"
class="dropdown-item"
>
<i class="fa fa-folder-o" />
Directories
</a>
<a
type="object"
name="action_dms_files_all_directory"
role="menuitem"
class="dropdown-item"
>
<i class="fa fa-file-o" />
Files
</a>
</div>
<div
class="col-6 border-left mk_directory_kanban_actions"
>
<h6 class="dropdown-header">
Actions
</h6>
<a
role="menuitem"
type="open"
class="dropdown-item"
>
<i class="fa fa-external-link" />
Open
</a>
<a
t-if="record.permission_write.raw_value"
role="menuitem"
type="edit"
class="dropdown-item"
>
<i class="fa fa-pencil-square-o" />
Edit
</a>
<a
t-if="record.permission_unlink.raw_value"
role="menuitem"
type="delete"
class="dropdown-item"
>
<i class="fa fa-trash-o" />
Delete
</a>
</div>
</div>
<div
t-if="record.permission_write.raw_value"
class="row"
>
<div role="menuitem" class="col-12">
<ul
class="oe_kanban_colorpicker"
data-field="color"
/>
</div>
</div>
</div>
</div>
<div class="oe_kanban_content">
<div class="mk_directory_kanban_actions">
<div class="mk_directory_kanban_actions_wrapper">
<a
type="object"
name="action_dms_directories_all_directory"
role="button"
class="btn btn-sm btn-outline-primary mk_directory_kanban_directories"
t-att-title="record.count_directories_title.raw_value"
>
<i class="fa fa-xs fa-folder" />
<span
class="total_items"
t-esc="record.count_total_directories.raw_value"
/>
</a>
<a
type="object"
name="action_dms_files_all_directory"
role="button"
class="btn btn-sm btn-outline-primary mk_directory_kanban_files"
t-att-title="record.count_files_title.raw_value"
>
<i class="fa fa-xs fa-file" />
<span
class="total_items"
t-esc="record.count_total_files.raw_value"
/>
</a>
</div>
</div>
<div class="o_kanban_image">
<div class="o_kanban_image_wrapper">
<img
t-att-src="record.icon_url.raw_value"
alt="Icon"
/>
</div>
</div>
<div class="o_kanban_details">
<div class="o_kanban_details_wrapper">
<div
class="o_kanban_record_title o_text_overflow"
>
<field name="name" />
</div>
<div class="o_kanban_record_body">
<field
name="tag_ids"
widget="many2many_tags"
options="{'color_field': 'color'}"
/>
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<field
name="write_date"
widget="date"
/>
</div>
<div class="oe_kanban_bottom_right">
<a
role="button"
type="object"
name="toggle_starred"
t-attf-class="fa fa-lg fa-star#{record.starred.raw_value ? ' favorite_sign_button_enabled' : '-o'} favorite_sign_button"
title="Starred"
/>
<img
t-att-src="kanban_image('res.users', 'image_128', record.create_uid.raw_value)"
t-att-title="record.create_uid.value"
t-att-alt="record.create_uid.value"
class="oe_kanban_avatar"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_dms_directory_tree" model="ir.ui.view">
<field name="name">dms_directory.tree</field>
<field name="model">dms.directory</field>
<field name="arch" type="xml">
<tree default_order="complete_name asc">
<field name="name" />
<field name="write_date" />
<field name="count_files" string="Files" />
<field name="count_directories" string="Directories" />
<field name="complete_name" />
<field name="storage_id" groups="dms.group_dms_manager" />
</tree>
</field>
</record>
<record id="view_dms_directory_form" model="ir.ui.view">
<field name="name">dms_directory.form</field>
<field name="model">dms.directory</field>
<field name="arch" type="xml">
<form>
<header>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button
type="object"
name="action_dms_directories_all_directory"
class="oe_stat_button"
icon="fa-folder-open-o"
>
<field
string="Subdirectories"
name="count_total_directories"
widget="statinfo"
/>
</button>
<button
type="object"
name="action_dms_files_all_directory"
class="oe_stat_button"
icon="fa-file-text-o"
>
<field
string="Files"
name="count_total_files"
widget="statinfo"
/>
</button>
</div>
<field
name="image_1920"
widget="image"
class="oe_avatar"
nolabel="1"
options="{'image_preview': 'image_128'}"
/>
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" placeholder="My Documents" />
</h1>
<h4>
<field name="complete_name" />
</h4>
</div>
<group name="settings">
<group>
<field
name="is_root_directory"
readonly="1"
groups="!dms.group_dms_manager"
/>
<field
name="is_root_directory"
groups="dms.group_dms_manager"
/>
<field
name="storage_id"
options="{'no_open': True}"
attrs="{'readonly':[('is_root_directory','=',False)], 'required':[('is_root_directory','=',True)]}"
force_save="1"
groups="!dms.group_dms_manager"
/>
<field
name="storage_id"
options="{}"
attrs="{'readonly':[('is_root_directory','=',False)], 'required':[('is_root_directory','=',True)]}"
force_save="1"
groups="dms.group_dms_manager"
/>
</group>
<group>
<field name="inherit_group_ids" />
<field
name="parent_id"
options="{'no_quick_create': True}"
attrs="{'invisible':[('is_root_directory','=',True)], 'required':[('is_root_directory','=',False)]}"
/>
</group>
</group>
<group name="data">
<group>
<field name="human_size" string="Size" />
<field name="count_elements" string="Elements" />
</group>
<group>
<field
name="category_id"
placeholder="Internal / Human Resource"
options="{'no_open': True, 'no_create': True}"
/>
<field
name="tag_ids"
widget="many2many_tags"
placeholder="Tags..."
options="{'color_field': 'color', 'no_create_edit': True}"
/>
<field name="starred" widget="boolean_favorite" />
</group>
</group>
<group>
<field name="storage_id_save_type" invisible="True" />
<field
name="storage_id_inherit_access_from_parent_record"
invisible="True"
/>
<field name="allowed_model_ids" invisible="True" />
<field
name="model_id"
attrs="{'invisible': [('storage_id_save_type', '!=', 'attachment')], 'readonly': [('count_total_files', '>', 0)], 'required': [('storage_id_save_type','=','attachment')]}"
/>
<field name="res_model" invisible="1" force_save="1" />
<field
name="res_id"
readonly="True"
attrs="{'invisible': [('storage_id_save_type', '!=', 'attachment')]}"
/>
<field
name="record_ref"
attrs="{'invisible': [('storage_id_save_type', '!=', 'attachment')]}"
/>
</group>
<notebook>
<page name="page_directories" string="Subdirectories">
<field
name="child_directory_ids"
context="{'default_parent_id': active_id, 'mail_create_nolog': True}"
attrs="{'readonly':[('permission_create','=',False)]}"
>
<tree limit="10">
<field name="name" />
<field
name="count_directories"
string="Directories"
/>
<field name="count_total_files" string="Files" />
<field name="human_size" string="Size" />
</tree>
</field>
</page>
<page name="page_files" string="Files">
<field
name="file_ids"
context="{'default_directory_id': active_id, 'mail_create_nolog': True}"
attrs="{'readonly':[('permission_create','=',False)]}"
>
<tree limit="10">
<field name="name" />
<field name="mimetype" />
<field name="human_size" string="Size" />
<field name="write_date" readonly="1" />
</tree>
</field>
</page>
<page name="page_meta" string="Meta Information">
<group>
<group>
<field name="create_date" readonly="1" />
<field name="create_uid" readonly="1" />
</group>
<group>
<field name="write_date" readonly="1" />
<field name="write_uid" readonly="1" />
</group>
</group>
</page>
<page name="page_access" string="Access Information">
<group name="permissions">
<group>
<field name="permission_read" readonly="1" />
<field name="permission_create" readonly="1" />
</group>
<group>
<field name="permission_write" readonly="1" />
<field name="permission_unlink" readonly="1" />
</group>
</group>
</page>
<page
string="Groups"
attrs="{'invisible':[('storage_id_save_type', '=', 'attachment'),('storage_id_inherit_access_from_parent_record', '=', True)]}"
>
<field name="group_ids">
<tree>
<field name="name" />
<field name="perm_create" />
<field name="perm_write" />
<field name="perm_unlink" />
</tree>
</field>
</page>
<page
string="Complete Groups"
attrs="{'invisible':[('storage_id_save_type', '=', 'attachment'),('storage_id_inherit_access_from_parent_record', '=', True)]}"
>
<field name="complete_group_ids">
<tree>
<field name="name" />
<field name="perm_create" />
<field name="perm_write" />
<field name="perm_unlink" />
</tree>
</field>
</page>
<page name="mail_alias" string="Email Alias">
<group>
<group>
<field
name="alias_contact"
string="Accept Emails from"
/>
<field name="alias_process" />
</group>
<group>
<label for="alias_name" string="Email Alias" />
<div>
<field name="alias_name" class="oe_inline" />
<span class="oe_read_only">@</span>
<span class="oe_edit_only"> @ </span>
<field
name="alias_domain"
placeholder="mail.catchall.domain"
class="oe_inline"
readonly="1"
/>
</div>
<field
name="alias_id"
readonly="1"
required="0"
groups="base.group_no_one"
string="Alias Setting"
/>
</group>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" />
<field name="activity_ids" />
<field name="message_ids" />
</div>
</form>
</field>
</record>
<record id="action_dms_directory" model="ir.actions.act_window">
<field name="name">Directories</field>
<field name="res_model">dms.directory</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[("is_hidden", "=", False)]</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new Directory.
</p>
<p>
Directories can be used to structure and organize
files directly in Odoo.
</p>
</field>
</record>
<menuitem
id="menu_dms_directory"
name="Directories"
sequence="30"
parent="main_menu_dms"
action="action_dms_directory"
/>
<record id="view_dms_directory_new_form" model="ir.ui.view">
<field name="name">dms_directory.form</field>
<field name="model">dms.directory</field>
<field name="inherit_id" ref="view_dms_directory_form" />
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//header" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//sheet//div[hasclass('oe_button_box')]" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//sheet//group[@name='settings']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//sheet//group[@name='data']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//sheet//group[@name='data']" position="after">
<group>
<group>
<field
name="is_root_directory"
readonly="1"
groups="!dms.group_dms_manager"
/>
<field
name="is_root_directory"
groups="dms.group_dms_manager"
/>
<field
name="storage_id"
options="{'no_quick_create': True}"
attrs="{'readonly':[('is_root_directory','=',False)], 'required':[('is_root_directory','=',True)]}"
force_save="1"
/>
</group>
<group>
<field
name="category_id"
placeholder="Internal / Human Resource"
options="{'no_open': True, 'no_create': True}"
/>
<field
name="tag_ids"
widget="many2many_tags"
placeholder="Tags..."
options="{'color_field': 'color', 'no_create_edit': True}"
/>
</group>
</group>
</xpath>
<form position="inside">
<footer>
<button
class="btn btn-primary"
type="object"
string="Create"
name="action_save_onboarding_directory_step"
/>
<button special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="action_dms_directory_new" model="ir.actions.act_window">
<field name="name">New Root Directory</field>
<field name="res_model">dms.directory</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="view_id" ref="view_dms_directory_new_form" />
</record>
</odoo>

View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2017-2019 MuK IT GmbH
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-->
<odoo>
<record id="view_dms_access_groups_tree" model="ir.ui.view">
<field name="name">dms_access_groups.tree</field>
<field name="model">dms.access.group</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="perm_create" />
<field name="perm_write" />
<field name="perm_unlink" />
<field name="count_users" />
<field name="count_directories" />
</tree>
</field>
</record>
<record id="view_dms_access_groups_form" model="ir.ui.view">
<field name="name">dms_access.group.form</field>
<field name="model">dms.access.group</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" />
</h1>
</div>
<group name="group" string="Group">
<group>
<field name="parent_group_id" />
</group>
<group>
<field name="count_users" />
</group>
</group>
<group string="Settings">
<group>
<field name="perm_create" />
</group>
<group>
<field name="perm_write" />
<field name="perm_unlink" />
</group>
</group>
<notebook>
<page name="users" string="Users">
<field name="users">
<tree>
<field name="name" />
<field name="login" />
<field name="lang" />
<field name="login_date" />
</tree>
</field>
</page>
<page name="groups" string="Groups">
<field name="group_ids">
<tree>
<field name="name" />
<field name="comment" />
</tree>
</field>
</page>
<page name="extra_users" string="Explicit Users">
<field name="explicit_user_ids">
<tree>
<field name="name" />
<field name="login" />
<field name="lang" />
<field name="login_date" />
</tree>
</field>
</page>
<page name="childs" string="Child Groups">
<field name="child_group_ids">
<tree>
<field name="name" />
<field name="perm_create" />
<field name="perm_write" />
<field name="perm_unlink" />
<field name="count_users" />
</tree>
</field>
</page>
<page string="Directories">
<field name="directory_ids">
<tree>
<field name="name" />
<field
name="count_directories"
string="Directories"
/>
<field name="count_files" string="Files" />
<field name="size" widget="binary_size" />
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_dms_access_groups" model="ir.actions.act_window">
<field name="name">Access Groups</field>
<field name="res_model">dms.access.group</field>
<field name="view_mode">tree,form</field>
<field
name="view_ids"
eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('view_dms_access_groups_tree')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('view_dms_access_groups_form')})]"
/>
</record>
<menuitem
id="menu_dms_access_groups"
name="Access Groups"
parent="dms.cat_menu_dms_config_system"
action="action_dms_access_groups"
/>
</odoo>

View file

@ -0,0 +1,677 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2017-2019 MuK IT GmbH
Copyright 2021 Tecnativa - Víctor Martínez
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-->
<odoo>
<record id="search_dms_file" model="ir.ui.view">
<field name="name">dms_file.search</field>
<field name="model">dms.file</field>
<field name="arch" type="xml">
<search>
<field name="name" filter_domain="[('name','ilike',self)]" />
<filter
string="All Files"
name="all"
domain="['|',('active', '=', False), ('active', '!=', False)]"
/>
<filter
string="My Files"
name="filter_user"
domain="[('create_uid', '=', uid)]"
/>
<separator />
<filter
string="Archived Files"
name="filter_active"
domain="[('active', '=', False)]"
/>
<separator />
<filter
string="Creation Date"
name="filter_create"
date="create_date"
/>
<filter
string="Modification Date"
name="filter_write"
date="write_date"
/>
<group expand="0" string="Group By">
<filter
name="group_color"
string="Color"
domain="[]"
context="{'group_by':'color'}"
/>
<filter
name="group_category"
string="Category"
domain="[]"
context="{'group_by':'category_id'}"
/>
<separator />
<filter
name="group_storage"
string="Storage"
domain="[]"
context="{'group_by':'storage_id'}"
/>
<filter
name="group_directory"
string="Directories"
domain="[]"
context="{'group_by':'directory_id'}"
/>
</group>
<searchpanel>
<field
name="directory_id"
icon="fa-folder"
limit="0"
enable_counters="1"
/>
<field
name="category_id"
icon="fa-users"
limit="0"
enable_counters="1"
/>
</searchpanel>
</search>
</field>
</record>
<record id="view_dms_file_kanban" model="ir.ui.view">
<field name="name">dms_file.kanban</field>
<field name="model">dms.file</field>
<field name="arch" type="xml">
<kanban
js_class="file_kanban"
class="mk_file_kanban_view o_kanban_small_column align-content-start"
banner_route="/dms/document_onboarding/file"
>
<field name="id" />
<field name="tag_ids" />
<field name="name" />
<field name="color" />
<field name="active" />
<field name="mimetype" />
<field name="icon_url" />
<field name="create_uid" />
<field name="write_date" />
<field name="locked_by" />
<field name="is_locked" />
<field name="is_lock_editor" />
<field name="permission_write" />
<field name="permission_unlink" />
<field name="__last_update" />
<!-- <field name="model_name" /> -->
<templates>
<t t-name="kanban-box">
<div
t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"
>
<div class="o_dropdown_kanban dropdown">
<a
class="dropdown-toggle o-no-caret btn"
href="#"
role="button"
data-toggle="dropdown"
aria-label="Dropdown menu"
title="Dropdown menu"
>
<span class="fa fa-ellipsis-v" />
</a>
<div class="dropdown-menu" role="menu">
<div class="row">
<div class="col-6 mk_file_kanban_operations">
<h6 class="dropdown-header">
Operations
</h6>
<a
t-if="record.permission_write.raw_value and !record.is_locked.raw_value"
role="menuitem"
name="lock"
type="object"
class="dropdown-item"
>
<i class="fa fa-lock" />
Lock
</a>
<a
t-if="record.is_locked.raw_value and record.is_lock_editor.raw_value"
role="menuitem"
name="unlock"
type="object"
class="dropdown-item"
>
<i class="fa fa-unlock-alt" />
Unlock
</a>
<a
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))"
role="menuitem"
name="toggle_active"
type="object"
class="dropdown-item"
>
<i class="fa fa-archive" />
Archive
</a>
<a
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))"
role="menuitem"
name="toggle_active"
type="object"
class="dropdown-item"
>
<i class="fa fa-archive" />
Unarchive
</a>
<a
role="menuitem"
class="dropdown-item"
t-attf-href="/web/content?id=#{record.id.raw_value}&amp;field=content&amp;model=dms.file&amp;filename_field=name&amp;download=true"
>
<i class="fa fa-download" />
Download
</a>
</div>
<div
class="col-6 border-left mk_file_kanban_actions"
>
<h6 class="dropdown-header">
Actions
</h6>
<a
role="menuitem"
type="open"
class="dropdown-item"
>
<i class="fa fa-external-link" />
Open
</a>
<a
t-if="record.permission_write.raw_value"
role="menuitem"
type="edit"
class="dropdown-item"
>
<i class="fa fa-pencil-square-o" />
Edit
</a>
<a
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))"
role="menuitem"
type="delete"
class="dropdown-item"
>
<i class="fa fa-trash-o" />
Delete
</a>
</div>
</div>
<div
t-if="record.permission_write.raw_value"
class="row"
>
<div role="menuitem" class="col-12">
<ul
class="oe_kanban_colorpicker"
data-field="color"
/>
</div>
</div>
</div>
</div>
<div class="oe_kanban_content">
<div class="o_kanban_image">
<div class="o_kanban_image_wrapper">
<a
class="o_kanban_dms_file_preview"
t-att-data-id="record.id"
t-att-id="record.id.raw_value"
t-att-name="record.name.raw_value"
>
<img
t-att-src="record.icon_url.raw_value"
alt="Icon"
/>
</a>
</div>
</div>
<div class="o_kanban_details">
<div class="o_kanban_details_wrapper">
<div
class="o_kanban_record_title o_text_overflow"
>
<field name="name" />
</div>
<div class="o_kanban_record_body">
<field
name="tag_ids"
widget="many2many_tags"
options="{'color_field': 'color'}"
/>
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<field
name="write_date"
widget="date"
/>
</div>
<div class="oe_kanban_bottom_right">
<span
t-if="record.is_locked.raw_value"
class="mk_file_kanban_lock"
>
<i
t-attf-class="fa #{(record.is_locked.raw_value and !record.is_lock_editor.raw_value) ? 'fa-lock' : ''} #{((record.is_locked.raw_value and record.is_lock_editor.raw_value)) ? 'fa-unlock-alt' : ''}"
t-att-title="record.locked_by.value"
/>
</span>
<img
t-att-src="kanban_image('res.users', 'image_128', record.create_uid.raw_value)"
t-att-alt="record.create_uid.value"
class="oe_kanban_avatar"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- Base view that can be overwritten by other modules as needed !-->
<record id="view_dms_file_kanban_wizard_selection" model="ir.ui.view">
<field name="name">dms_file.kanban.wizard.selection</field>
<field name="model">dms.file</field>
<field name="inherit_id" ref="dms.view_dms_file_kanban" />
<field name="priority">9999</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<kanban position="attributes">
<attribute name="banner_route" />
<attribute name="class">o_kanban_mobile</attribute>
</kanban>
<xpath expr="//div[hasclass('o_dropdown_kanban')]" position="replace" />
<xpath expr="//div[hasclass('oe_kanban_bottom_right')]" position="replace">
<div class="oe_kanban_bottom_right" />
</xpath>
</field>
</record>
<record id="view_dms_file_tree" model="ir.ui.view">
<field name="name">dms_file.tree</field>
<field name="model">dms.file</field>
<field name="arch" type="xml">
<tree
js_class="file_list"
decoration-warning="not active"
decoration-muted="(is_locked and not is_lock_editor)"
multi_edit="1"
default_order="name asc"
>
<field name="active" invisible="1" />
<field name="is_locked" invisible="1" />
<field name="is_lock_editor" invisible="1" />
<field name="name" />
<field name="directory_id" optional="hide" />
<field name="root_directory_id" optional="hide" />
<field name="write_date" />
<field name="human_size" string="Size" />
<field name="mimetype" />
<field name="category_id" invisible="1" />
<field
name="tag_ids"
widget="many2many_tags"
options="{'color_field': 'color', 'no_create_edit': True}"
/>
</tree>
</field>
</record>
<record id="view_dms_file_graph" model="ir.ui.view">
<field name="name">dms_file.graph</field>
<field name="model">dms.file</field>
<field name="arch" type="xml">
<graph type="pie">
<field name="directory_id" type="row" />
<field name="size" type="measure" />
</graph>
</field>
</record>
<record id="view_dms_file_pivot" model="ir.ui.view">
<field name="name">dms_file.pivot</field>
<field name="model">dms.file</field>
<field name="arch" type="xml">
<pivot display_quantity="true">
<field name="storage_id" type="row" />
<field name="directory_id" type="row" />
<field name="size" type="measure" />
</pivot>
</field>
</record>
<record id="view_dms_file_form" model="ir.ui.view">
<field name="name">dms_file.form</field>
<field name="model">dms.file</field>
<field name="arch" type="xml">
<form string="Files">
<header>
<button
class="oe_highlight"
name="lock"
type="object"
string="Lock"
attrs="{'invisible':['|',('is_locked', '!=', False),('permission_write', '=', False)]}"
/>
<button
class="oe_highlight"
name="unlock"
type="object"
string="Unlock"
attrs="{'invisible':['|',('is_locked', '=', False),('is_lock_editor', '=', False)]}"
/>
</header>
<sheet>
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<div class="oe_button_box" name="button_box" />
<field
name="image_1920"
widget="image"
class="oe_avatar"
nolabel="1"
options="{'image_preview': 'image_128'}"
/>
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" />
<field name="active" invisible="1" />
</h1>
<h4>
<field
name="path_json"
widget="path_json"
options="{'prefix': True, 'suffix': False}"
attrs="{'invisible': ['|', ('name', '=', False), ('directory_id', '=', False)]}"
/>
</h4>
</div>
<group name="content">
<group>
<field
name="content"
filename="name"
mimetype="mimetype"
widget="preview_binary"
/>
</group>
<group>
<field name="extension" />
<field name="mimetype" />
</group>
</group>
<group name="settings">
<group>
<field
name="directory_id"
options="{'no_quick_create': True}"
/>
<field
name="storage_id"
options="{'no_open': True}"
groups="!dms.group_dms_manager"
/>
<field name="storage_id" groups="dms.group_dms_manager" />
</group>
<group>
<field
name="category_id"
placeholder="Internal / Human Resource"
options="{'no_open': True, 'no_create': True}"
/>
<field
name="tag_ids"
widget="many2many_tags"
placeholder="Tags..."
options="{'color_field': 'color', 'no_create_edit': True}"
/>
</group>
</group>
<group>
<field name="storage_id_save_type" invisible="True" />
<field
name="res_model"
readonly="True"
attrs="{'invisible': [('storage_id_save_type', '!=', 'attachment')]}"
/>
<field
name="res_id"
readonly="True"
attrs="{'invisible': [('storage_id_save_type', '!=', 'attachment')]}"
/>
<field
name="record_ref"
attrs="{'invisible': [('storage_id_save_type', '!=', 'attachment')]}"
/>
</group>
<notebook>
<page name="page_meta" string="Meta Information">
<group>
<group>
<field name="create_date" readonly="1" />
<field name="create_uid" readonly="1" />
</group>
<group>
<field name="write_date" readonly="1" />
<field name="write_uid" readonly="1" />
</group>
</group>
</page>
<page name="page_access" string="Access Information">
<group>
<group>
<field name="permission_write" readonly="1" />
<field name="permission_unlink" readonly="1" />
</group>
<group>
<field name="is_lock_editor" invisible="1" />
<field name="is_locked" invisible="1" />
<field name="locked_by" />
</group>
</group>
</page>
<page
name="page_technical"
string="Technical Information"
invisible="1"
groups="dms.group_dms_manager,base.group_no_one"
>
<group name="technical">
<group name="technical_left">
</group>
<group name="technical_right">
</group>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" />
<field name="activity_ids" />
<field name="message_ids" />
</div>
</form>
</field>
</record>
<record id="action_dms_file" model="ir.actions.act_window">
<field name="name">Files</field>
<field name="res_model">dms.file</field>
<field name="view_mode">kanban,tree,graph,pivot,form</field>
<field name="domain">[("is_hidden", "=", False)]</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new File.
</p>
<p>
Files are used to save content directly in Odoo.
</p>
</field>
</record>
<!-- Base action to be called when a file selector is to be used !-->
<record id="action_dms_file_wizard_selector" model="ir.actions.act_window">
<field name="name">Files</field>
<field name="res_model">dms.file</field>
<field name="target">new</field>
<field name="view_mode">kanban</field>
<field name="context">{'create': False}</field>
<field
name="view_ids"
eval="[(5, 0, 0),(0, 0, {'view_mode': 'kanban', 'view_id': ref('view_dms_file_kanban_wizard_selection')})]"
/>
</record>
<menuitem
id="menu_dms_file"
name="Files"
sequence="20"
parent="main_menu_dms"
action="action_dms_file"
/>
<record id="search_dms_file_migration" model="ir.ui.view">
<field name="name">dms_file.search</field>
<field name="model">dms.file</field>
<field name="arch" type="xml">
<search>
<field name="name" filter_domain="[('name','ilike',self)]" />
<group expand="0" string="Group By">
<filter
name="group_storage"
string="Storage"
domain="[]"
context="{'group_by':'storage_id'}"
/>
</group>
<searchpanel>
<field
name="directory_id"
icon="fa-folder"
limit="0"
enable_counters="1"
/>
<field
name="category_id"
icon="fa-users"
limit="0"
enable_counters="1"
/>
</searchpanel>
</search>
</field>
</record>
<record id="view_dms_file_migration_tree" model="ir.ui.view">
<field name="name">dms_file.tree</field>
<field name="model">dms.file</field>
<field name="arch" type="xml">
<tree
decoration-muted="(is_locked and not is_lock_editor)"
create="0"
delete="0"
>
<field name="is_locked" invisible="1" />
<field name="is_lock_editor" invisible="1" />
<field name="name" />
<field name="write_date" />
<field name="human_size" string="Size" />
<field name="mimetype" />
<field name="storage_id" />
<field name="migration" />
</tree>
</field>
</record>
<record id="action_dms_file_migration" model="ir.actions.act_window">
<field name="name">Files</field>
<field name="res_model">dms.file</field>
<field name="view_mode">tree</field>
<field name="search_view_id" ref="search_dms_file_migration" />
<field
name="domain"
>[('require_migration', '=', True), '|',('active', '=', False), ('active', '!=', False)]
</field>
<field name="context">{'search_default_group_storage': 1}</field>
<field
name="view_ids"
eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('view_dms_file_migration_tree')})]"
/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new File.
</p>
<p>
Files are used to save content directly in Odoo.
</p>
</field>
</record>
<menuitem
id="menu_dms_file_migration"
name="Migration"
parent="cat_menu_dms_config_system"
action="action_dms_file_migration"
sequence="8"
/>
<record id="view_dms_file_new_form" model="ir.ui.view">
<field name="name">dms_file.form</field>
<field name="model">dms.file</field>
<field name="inherit_id" ref="view_dms_file_form" />
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//header" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//sheet//div[hasclass('oe_button_box')]" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<form position="inside">
<footer>
<button
class="btn btn-primary"
type="object"
string="Create"
name="action_save_onboarding_file_step"
/>
<button special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="action_dms_file_new" model="ir.actions.act_window">
<field name="name">New Root Directory</field>
<field name="res_model">dms.file</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="view_id" ref="view_dms_file_new_form" />
</record>
<record id="action_wizard_dms_file_move" model="ir.actions.server">
<field name="name">Move</field>
<field name="model_id" ref="dms.model_dms_file" />
<field name="binding_model_id" ref="dms.model_dms_file" />
<field name="groups_id" eval="[(4, ref('dms.group_dms_user'))]" />
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
action = model.action_wizard_dms_file_move()
</field>
</record>
</odoo>

View file

@ -0,0 +1,125 @@
<odoo>
<template
id="portal_my_home_dms"
name="Portal My Home : dms entries"
inherit_id="portal.portal_my_home"
priority="20"
>
<xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
<t t-call="portal.portal_docs_entry">
<t t-set="title">Documents</t>
<t t-set="url" t-value="'/my/dms'" />
<t t-set="placeholder_count" t-value="'dms_directory_count'" />
</t>
</xpath>
</template>
<template
id="portal_my_dms_breadcrumbs"
name="My DMS: Breadcrumbs"
inherit_id="portal.portal_breadcrumbs"
>
<xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside">
<t t-if="page_name == 'dms_directory'">
<t t-if="not access_token">
<li class="breadcrumb-item">
<t t-if="dms_directory">
<a href="/my/dms" title="DMS">Documents</a>
</t>
<t t-if="not dms_directory">
<span>Documents</span>
</t>
</li>
</t>
<t t-foreach="dms_parent_categories" t-as="dms_parent_category">
<li class="breadcrumb-item">
<t t-if="dms_parent_category.id != dms_directory.id">
<a
t-attf-href="/my/dms/directory/#{dms_parent_category.id}?{{ keep_query() }}"
t-att-title="dms_parent_category.name"
>
<span t-esc="dms_parent_category.name" />
</a>
</t>
<t t-if="dms_parent_category.id == dms_directory.id">
<span t-esc="dms_parent_category.name" />
</t>
</li>
</t>
</t>
</xpath>
</template>
<template id="portal_my_dms" name="My DMS">
<t t-call="portal.portal_layout">
<t t-set="breadcrumbs_searchbar" t-value="True" />
<t t-call="portal.portal_searchbar" />
<t t-if="not dms_directories and not dms_files">
<div class="alert alert-warning mt8" role="alert">Not results</div>
</t>
<t t-if="dms_directories or dms_files" t-call="portal.portal_table">
<thead>
<tr class="active">
<th>Name</th>
<th>Size</th>
<th>Last update</th>
</tr>
</thead>
<tbody>
<t t-foreach="dms_directories" t-as="dms_directory">
<tr class="tr_dms_directory">
<td>
<a
t-attf-href="/my/dms/directory/#{dms_directory.id}?{{ keep_query() }}"
t-attf-class="tr_dms_directory_link"
t-att-title="dms_directory.name"
>
<img
class="o_portal_contact_img"
t-att-src="dms_directory.icon_url"
/>
<span t-esc="dms_directory.name" />
</a>
</td>
<td>
<span t-esc="dms_directory.count_elements" /> element(s)
</td>
<td>
<span
t-esc="dms_directory.write_date"
t-options="{'widget': 'date'}"
/>
</td>
</tr>
</t>
<t t-if="dms_files">
<t t-foreach="dms_files" t-as="dms_file">
<tr class="tr_dms_file">
<td>
<a
t-attf-href="/my/dms/file/#{dms_file.id}/download?{{ keep_query() }}"
t-attf-class="tr_dms_file_link"
t-att-title="dms_file.name"
>
<img
class="o_portal_contact_img"
t-att-src="dms_file.icon_url"
/>
<span t-esc="dms_file.name" />
</a>
</td>
<td>
<span t-esc="dms_file.get_human_size()" />
</td>
<td>
<span
t-esc="dms_file.write_date"
t-options="{'widget': 'date'}"
/>
</td>
</tr>
</t>
</t>
</tbody>
</t>
</t>
</template>
</odoo>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2017-2019 MuK IT GmbH
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-->
<odoo>
<menuitem
id="main_menu_dms"
name="Documents"
web_icon="dms,static/description/icon.png"
groups="group_dms_user"
/>
<menuitem
id="cat_menu_dms_config"
name="Configuration"
parent="main_menu_dms"
sequence="50"
/>
<menuitem
id="cat_menu_dms_config_organizing"
name="Organizing"
parent="cat_menu_dms_config"
sequence="5"
/>
<menuitem
id="cat_menu_dms_config_system"
name="System"
groups="dms.group_dms_manager"
parent="cat_menu_dms_config"
sequence="25"
/>
</odoo>

View file

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2017-2019 MuK IT GmbH
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-->
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.dms</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="20" />
<field name="inherit_id" ref="base.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside">
<div
class="app_settings_block"
data-string="Documents"
data-key="dms"
groups="base.group_system"
string="Documents"
>
<div name="dms_settings">
<h2>File Upload</h2>
<div class="row mt16 o_settings_container" name="file">
<div class="col-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<span class="o_form_label">File Size</span>
<div class="text-muted">
Define the maximum upload size of a
file in MB
</div>
<div class="content-group">
<div class="row mt16">
<label
class="col-md-3 o_light_label"
for="documents_binary_max_size"
/>
<field name="documents_binary_max_size" />
</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<span class="o_form_label">File
Extensions
</span>
<div class="text-muted">
Define forbidden file extensions
</div>
<div class="content-group">
<div class="row mt16">
<label
class="col-md-3 o_light_label"
for="documents_forbidden_extensions"
/>
<field
name="documents_forbidden_extensions"
placeholder="exe,msi"
/>
</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<span class="o_form_label">
Storages
</span>
<div class="text-muted">
Show storages
</div>
<div class="content-group">
<button
name="%(dms.action_dms_storage)d"
string="Storages"
type="action"
class="oe_link"
icon="fa-arrow-right"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record id="action_dms_settings_general" model="ir.actions.act_window">
<field name="name">General Settings</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="context">{'module' : 'dms'}</field>
</record>
<menuitem
id="menu_dms_settings_general"
name="General Settings"
parent="cat_menu_dms_config"
sequence="0"
action="action_dms_settings_general"
groups="base.group_system"
/>
</odoo>

View file

@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2017-2019 MuK IT GmbH
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-->
<odoo>
<record id="action_dms_directories_storage" model="ir.actions.act_window">
<field name="name">Directories</field>
<field name="res_model">dms.directory</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">
[
("storage_id", "=", active_id),
("is_hidden", "=", False),
]
</field>
<field name="context">
{
'default_storage_id': active_id,
'default_is_root_directory': True,
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Click to add a new directory.
</p>
<p>
Directories can be used to structure and organize
files directly in Odoo.
</p>
</field>
</record>
<record id="action_dms_files_storage" model="ir.actions.act_window">
<field name="name">Files</field>
<field name="res_model">dms.file</field>
<field name="view_mode">kanban,tree,graph,pivot,form</field>
<field name="domain">
[
("storage_id", "=", active_id),
("is_hidden", "=", False),
]
</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Click to add a new file.
</p>
<p>
Files are used to save content directly in Odoo.
</p>
</field>
</record>
<record id="action_dms_file_storage_migration" model="ir.actions.act_window">
<field name="name">Files</field>
<field name="res_model">dms.file</field>
<field name="view_mode">tree</field>
<field name="search_view_id" ref="search_dms_file_migration" />
<field name="domain">
[
("storage_id", "=", active_id),
("require_migration", "=", True),
"|",("active", "=", False), ("active", "!=", False)
]
</field>
<field
name="view_ids"
eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('view_dms_file_migration_tree')})]"
/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new File.
</p>
<p>
Files are used to save content directly in Odoo.
</p>
</field>
</record>
<record id="view_dms_storage_search" model="ir.ui.view">
<field name="name">dms_storage.search</field>
<field name="model">dms.storage</field>
<field name="arch" type="xml">
<search>
<field name="name" />
<group expand="0" string="Group By">
<filter
string="Save Type"
name="group_save_type"
domain="[]"
context="{'group_by':'save_type'}"
/>
</group>
</search>
</field>
</record>
<record id="view_dms_storage_tree" model="ir.ui.view">
<field name="name">dms_storage.tree</field>
<field name="model">dms.storage</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="save_type" />
<field name="is_hidden" />
<field name="company_id" />
</tree>
</field>
</record>
<record id="view_dms_storage_form" model="ir.ui.view">
<field name="name">dms_storage.form</field>
<field name="model">dms.storage</field>
<field name="arch" type="xml">
<form>
<header>
<button
name="action_storage_migrate"
type="object"
string="Migrate Files"
attrs="{'invisible': [('save_type', '=', 'attachment')]}"
/>
<button
type="action"
name="%(dms.action_dms_file_storage_migration)d"
class="oe_stat_button"
string="Manual File Migration"
/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button
type="action"
name="%(dms.action_dms_directories_storage)d"
class="oe_stat_button"
icon="fa-folder-open-o"
>
<field
string="Directories"
name="count_storage_directories"
widget="statinfo"
/>
</button>
<button
type="action"
name="%(dms.action_dms_files_storage)d"
class="oe_stat_button"
icon="fa-file-text-o"
>
<field
string="Files"
name="count_storage_files"
widget="statinfo"
/>
</button>
</div>
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" />
</h1>
</div>
<group name="save_storage">
<group name="save_storage_left">
<field name="save_type" />
</group>
<group name="save_storage_right">
</group>
</group>
<group name="data_storage">
<group>
<field name="is_hidden" />
<field
name="inherit_access_from_parent_record"
attrs="{'invisible': [('save_type', '!=', 'attachment')]}"
/>
<field
name="include_message_attachments"
attrs="{'invisible': [('save_type', '!=', 'attachment')]}"
/>
</group>
<group>
<field name="company_id" />
<field
name="model_ids"
attrs="{'invisible': [('save_type', '!=', 'attachment')]}"
/>
</group>
</group>
<notebook>
<page
name="page_roots"
string="Root Directories"
attrs="{'invisible': [('id', '=', False)]}"
>
<field
name="root_directory_ids"
groups="dms.group_dms_manager"
context="{'hide_root_storage': True,'default_storage_id': active_id, 'default_is_root_directory': True}"
>
<tree>
<field name="name" />
<field name="count_total_directories" />
<field name="count_total_files" />
<field name="human_size" string="Size" />
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>º
<record id="action_dms_storage" model="ir.actions.act_window">
<field name="name">Storages</field>
<field name="res_model">dms.storage</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new Storage object.
</p>
<p>
Storages are used to configure your Documents.
</p>
</field>
</record>
<menuitem
id="menu_dms_storage"
name="Storages"
parent="cat_menu_dms_config_system"
action="action_dms_storage"
sequence="5"
/>
<record id="view_dms_storage_new_form" model="ir.ui.view">
<field name="name">dms_storage.form</field>
<field name="model">dms.storage</field>
<field name="inherit_id" ref="view_dms_storage_form" />
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//header" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//sheet//div[hasclass('oe_button_box')]" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<form position="inside">
<footer>
<button
class="btn btn-primary"
type="object"
string="Create"
name="action_save_onboarding_storage_step"
/>
<button special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="action_dms_storage_new" model="ir.actions.act_window">
<field name="name">New Storage</field>
<field name="res_model">dms.storage</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="view_id" ref="view_dms_storage_new_form" />
</record>
</odoo>

View file

@ -0,0 +1,173 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2017-2019 MuK IT GmbH
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
-->
<odoo>
<record id="view_dms_tag_search" model="ir.ui.view">
<field name="name">dms_tag.search</field>
<field name="model">dms.tag</field>
<field name="arch" type="xml">
<search string="Categories">
<field name="name" filter_domain="[('name', 'ilike', self)]" />
<filter
string="All"
name="all"
domain="['|', ('active', '=', False), ('active', '=', True)]"
/>
<group expand="0" name="group_by" string="Group By">
<filter
name="group_by_category"
string="Category"
domain="[]"
context="{'group_by': 'category_id'}"
/>
<filter
name="group_by_color"
string="Color"
domain="[]"
context="{'group_by': 'color'}"
/>
</group>
</search>
</field>
</record>
<record id="view_dms_tag_kanban" model="ir.ui.view">
<field name="name">dms_tag.kanban</field>
<field name="model">dms.tag</field>
<field name="arch" type="xml">
<kanban
class="o_kanban_small_column o_emphasize_colors"
group_create="false"
>
<field name="color" />
<templates>
<t t-name="kanban-box">
<div
t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"
>
<div class="o_dropdown_kanban dropdown">
<a
class="dropdown-toggle o-no-caret btn"
href="#"
role="button"
data-toggle="dropdown"
aria-label="Dropdown menu"
title="Dropdown menu"
>
<span class="fa fa-ellipsis-v" />
</a>
<div class="dropdown-menu" role="menu">
<a
role="menuitem"
type="open"
class="dropdown-item"
>
<i class="fa fa-external-link" />
Open
</a>
<a
role="menuitem"
type="edit"
class="dropdown-item"
>
<i class="fa fa-pencil-square-o" />
Edit
</a>
<a
role="menuitem"
type="delete"
class="dropdown-item"
>
<i class="fa fa-trash-o" />
Delete
</a>
<ul
class="oe_kanban_colorpicker"
data-field="color"
/>
</div>
</div>
<field name="name" />
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_dms_tag_tree" model="ir.ui.view">
<field name="name">dms_tag.tree</field>
<field name="model">dms.tag</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="category_id" />
<field name="color" widget="color_index" />
</tree>
</field>
</record>
<record id="view_dms_tag_form" model="ir.ui.view">
<field name="name">dms_tag.form</field>
<field name="model">dms.tag</field>
<field name="arch" type="xml">
<form string="Tag">
<sheet>
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<div class="oe_button_box" name="button_box" />
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" placeholder="Customer" />
<field name="active" invisible="1" />
</h1>
</div>
<group>
<group>
<field name="category_id" />
<field name="color" widget="color_index" />
</group>
<group>
<field name="count_files" string="Files" />
<field name="count_directories" string="Directories" />
</group>
</group>
<notebook>
<page string="Directories">
<field name="directory_ids" widget="one2many" mode="tree" />
</page>
<page string="Files">
<field name="file_ids" widget="one2many" mode="tree" />
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_dms_tag" model="ir.actions.act_window">
<field name="name">Tags</field>
<field name="res_model">dms.tag</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{'search_default_group_by_category': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Click to create a new tag.
</p>
<p>
Tags are used to categorize Documents.
</p>
</field>
</record>
<menuitem
id="menu_dms_tag"
name="Tags"
parent="cat_menu_dms_config_organizing"
action="action_dms_tag"
/>
</odoo>