[MOV] project: split and restructured files according to new API guidelines
- created report/project_cumulative.py for model project.task.history.cumulative that was in project.py - moved project.project kanban view from project_dashboard.xml to project_views.xml, which required moving some menuitems as well so they are available while refering them in other files
This commit is contained in:
committed by
David Monjoie
parent
1449a1eaf1
commit
2c29168307
@@ -38,13 +38,12 @@ Dashboard / Reports for Project Management will include:
|
||||
'security/project_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'data/project_data.xml',
|
||||
'views/project_views.xml',
|
||||
'views/res_partner_views.xml',
|
||||
'report/project_report_views.xml',
|
||||
'report/project_cumulative_views.xml',
|
||||
'views/project_views.xml',
|
||||
'views/res_partner_views.xml',
|
||||
'views/res_config_views.xml',
|
||||
'views/project_templates.xml',
|
||||
'views/project_dashboard.xml',
|
||||
'views/tour_views.xml',
|
||||
'data/web_planner_data.xml',
|
||||
'data/project_mail_template_data.xml',
|
||||
|
||||
@@ -913,45 +913,6 @@ class project_task_history(osv.osv):
|
||||
'date': fields.date.context_today,
|
||||
}
|
||||
|
||||
class project_task_history_cumulative(osv.osv):
|
||||
_name = 'project.task.history.cumulative'
|
||||
_table = 'project_task_history_cumulative'
|
||||
_inherit = 'project.task.history'
|
||||
_auto = False
|
||||
|
||||
_columns = {
|
||||
'end_date': fields.date('End Date'),
|
||||
'nbr_tasks': fields.integer('# of Tasks', readonly=True),
|
||||
'project_id': fields.many2one('project.project', 'Project'),
|
||||
}
|
||||
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'project_task_history_cumulative')
|
||||
|
||||
cr.execute(""" CREATE VIEW project_task_history_cumulative AS (
|
||||
SELECT
|
||||
history.date::varchar||'-'||history.history_id::varchar AS id,
|
||||
history.date AS end_date,
|
||||
*
|
||||
FROM (
|
||||
SELECT
|
||||
h.id AS history_id,
|
||||
h.date+generate_series(0, CAST((coalesce(h.end_date, DATE 'tomorrow')::date - h.date) AS integer)-1) AS date,
|
||||
h.task_id, h.type_id, h.user_id, h.kanban_state,
|
||||
count(h.task_id) as nbr_tasks,
|
||||
greatest(h.remaining_hours, 1) AS remaining_hours, greatest(h.planned_hours, 1) AS planned_hours,
|
||||
t.project_id
|
||||
FROM
|
||||
project_task_history AS h
|
||||
JOIN project_task AS t ON (h.task_id = t.id)
|
||||
GROUP BY
|
||||
h.id,
|
||||
h.task_id,
|
||||
t.project_id
|
||||
|
||||
) AS history
|
||||
)
|
||||
""")
|
||||
|
||||
class project_tags(osv.Model):
|
||||
""" Tags of project's tasks (or issues) """
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import project_cumulative
|
||||
import project_report
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from openerp import tools
|
||||
from openerp.osv import fields, osv
|
||||
|
||||
|
||||
class project_task_history_cumulative(osv.osv):
|
||||
_name = 'project.task.history.cumulative'
|
||||
_table = 'project_task_history_cumulative'
|
||||
_inherit = 'project.task.history'
|
||||
_auto = False
|
||||
|
||||
_columns = {
|
||||
'end_date': fields.date('End Date'),
|
||||
'nbr_tasks': fields.integer('# of Tasks', readonly=True),
|
||||
'project_id': fields.many2one('project.project', 'Project'),
|
||||
}
|
||||
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'project_task_history_cumulative')
|
||||
|
||||
cr.execute(""" CREATE VIEW project_task_history_cumulative AS (
|
||||
SELECT
|
||||
history.date::varchar||'-'||history.history_id::varchar AS id,
|
||||
history.date AS end_date,
|
||||
*
|
||||
FROM (
|
||||
SELECT
|
||||
h.id AS history_id,
|
||||
h.date+generate_series(0, CAST((coalesce(h.end_date, DATE 'tomorrow')::date - h.date) AS integer)-1) AS date,
|
||||
h.task_id, h.type_id, h.user_id, h.kanban_state,
|
||||
count(h.task_id) as nbr_tasks,
|
||||
greatest(h.remaining_hours, 1) AS remaining_hours, greatest(h.planned_hours, 1) AS planned_hours,
|
||||
t.project_id
|
||||
FROM
|
||||
project_task_history AS h
|
||||
JOIN project_task AS t ON (h.task_id = t.id)
|
||||
GROUP BY
|
||||
h.id,
|
||||
h.task_id,
|
||||
t.project_id
|
||||
|
||||
) AS history
|
||||
)
|
||||
""")
|
||||
@@ -82,9 +82,6 @@
|
||||
</field>
|
||||
<field name="view_id"></field> <!-- force empty -->
|
||||
</record>
|
||||
<menuitem action="action_view_task_history_cumulative"
|
||||
id="menu_action_view_task_history_cumulative"
|
||||
parent="base.menu_project_report"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -2,10 +2,6 @@
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<menuitem id="base.menu_project_report" name="Reports"
|
||||
groups="project.group_project_manager"
|
||||
parent="base.menu_main_pm" sequence="99"/>
|
||||
|
||||
<record id="view_task_project_user_pivot" model="ir.ui.view">
|
||||
<field name="name">report.project.task.user.pivot</field>
|
||||
<field name="model">report.project.task.user</field>
|
||||
@@ -107,7 +103,5 @@
|
||||
<field name="help">This report allows you to analyse the performance of your projects and users. You can analyse the quantities of tasks, the hours spent compared to the planned hours, the average number of days to open or close a task, etc.</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Tasks" action="action_project_task_user_tree" id="menu_project_task_user_tree" parent="base.menu_project_report"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
<odoo>
|
||||
<record id="edit_project_simplified" model="ir.ui.view">
|
||||
<field name="name">project.project.form.popup</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Project">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name" class="o_project_name oe_inline"
|
||||
string="Project Name" placeholder="e.g. Office Party"/>
|
||||
<label for="alias_name" string="Choose a Project Email" attrs="{'invisible': [('alias_domain', '=', False)]}"/>
|
||||
<div name="alias_def" attrs="{'invisible': [('alias_domain', '=', False)]}">
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
</div>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="Create" name="close_dialog" type="object" class="btn-primary"/>
|
||||
<button string="Discard" class="btn-default" special="cancel"/>
|
||||
</footer>
|
||||
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="open_create_project" model="ir.actions.act_window">
|
||||
<field name="name">Create a Project</field>
|
||||
<field name="res_model">project.project</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="edit_project_simplified"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_project_kanban">
|
||||
<field name="name">project.project.kanban</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="oe_background_grey o_kanban_dashboard o_project_kanban" on_create="project.open_create_project">
|
||||
<field name="name"/>
|
||||
<field name="use_tasks"/>
|
||||
<field name="user_id"/>
|
||||
<field name="color"/>
|
||||
<field name="task_count"/>
|
||||
<field name="task_needaction_count"/>
|
||||
<field name="label_tasks"/>
|
||||
<field name="task_ids"/>
|
||||
<field name="alias_id"/>
|
||||
<field name="alias_name"/>
|
||||
<field name="alias_domain"/>
|
||||
<field name="doc_count"/>
|
||||
<field name="is_favorite"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click">
|
||||
<div class="o_project_kanban_main">
|
||||
<div class="o_kanban_card_content o_visible">
|
||||
<div class="o_kanban_primary_left">
|
||||
<div class="o_primary">
|
||||
<span><t t-esc="record.name.value"/></span>
|
||||
</div>
|
||||
<div t-if="record.alias_name.value and record.alias_domain.value">
|
||||
<span><i class="fa fa-envelope"></i> <t t-esc="record.alias_id.value"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="o_kanban_card_manage_pane o_invisible">
|
||||
<div class="o_kanban_card_manage_section o_kanban_manage_reports">
|
||||
<div groups="project.group_project_manager">
|
||||
<a type="edit">Settings</a>
|
||||
</div>
|
||||
<div>
|
||||
<a name="%(action_project_task_user_tree_filtered)d" type="action">Tasks</a>
|
||||
</div>
|
||||
<div>
|
||||
<a name="%(action_view_task_history_cumulative_filter)d" type="action">Cumulative Flow</a>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="widget.editable" class="o_project_kanban_colorpicker">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="toggle_favorite"><i t-attf-class="fa o_dashboard_star #{record.is_favorite.raw_value ? 'fa-star' : 'fa-star-o'}" title="Click to add/remove from favorite"/> Favorite</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_project_kanban_manage">
|
||||
<a class="o_kanban_manage_toggle_button" href="#">More <i class="fa fa-caret-down"/></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_project_kanban_boxes">
|
||||
<div t-if="record.use_tasks.raw_value" class="o_project_kanban_box">
|
||||
<a name="%(act_project_project_2_project_task_all)d" type="action">
|
||||
<span class="o_value"><t t-esc="record.task_count.value"/></span>
|
||||
<span class="o_label"><t t-esc="record.label_tasks.value"/></span>
|
||||
</a>
|
||||
<a t-if="record.task_needaction_count.raw_value" class="o_needaction" name="%(act_project_project_2_project_task_all)d" type="action" context="{'search_default_message_needaction': 1}">
|
||||
<t t-esc="record.task_needaction_count.raw_value"/>
|
||||
</a>
|
||||
</div>
|
||||
<a t-if="record.doc_count.raw_value" class="o_project_kanban_box" name="attachment_tree_view" type="object">
|
||||
<span class="o_value"><t t-esc="record.doc_count.value"/></span>
|
||||
<span class="o_label">Documents</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -182,6 +182,116 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="edit_project_simplified" model="ir.ui.view">
|
||||
<field name="name">project.project.form.popup</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Project">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name" class="o_project_name oe_inline"
|
||||
string="Project Name" placeholder="e.g. Office Party"/>
|
||||
<label for="alias_name" string="Choose a Project Email" attrs="{'invisible': [('alias_domain', '=', False)]}"/>
|
||||
<div name="alias_def" attrs="{'invisible': [('alias_domain', '=', False)]}">
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
</div>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="Create" name="close_dialog" type="object" class="btn-primary"/>
|
||||
<button string="Discard" class="btn-default" special="cancel"/>
|
||||
</footer>
|
||||
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="open_create_project" model="ir.actions.act_window">
|
||||
<field name="name">Create a Project</field>
|
||||
<field name="res_model">project.project</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="edit_project_simplified"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_project_kanban">
|
||||
<field name="name">project.project.kanban</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="oe_background_grey o_kanban_dashboard o_project_kanban" on_create="project.open_create_project">
|
||||
<field name="name"/>
|
||||
<field name="use_tasks"/>
|
||||
<field name="user_id"/>
|
||||
<field name="color"/>
|
||||
<field name="task_count"/>
|
||||
<field name="task_needaction_count"/>
|
||||
<field name="label_tasks"/>
|
||||
<field name="task_ids"/>
|
||||
<field name="alias_id"/>
|
||||
<field name="alias_name"/>
|
||||
<field name="alias_domain"/>
|
||||
<field name="doc_count"/>
|
||||
<field name="is_favorite"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click">
|
||||
<div class="o_project_kanban_main">
|
||||
<div class="o_kanban_card_content o_visible">
|
||||
<div class="o_kanban_primary_left">
|
||||
<div class="o_primary">
|
||||
<span><t t-esc="record.name.value"/></span>
|
||||
</div>
|
||||
<div t-if="record.alias_name.value and record.alias_domain.value">
|
||||
<span><i class="fa fa-envelope"></i> <t t-esc="record.alias_id.value"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="o_kanban_card_manage_pane o_invisible">
|
||||
<div class="o_kanban_card_manage_section o_kanban_manage_reports">
|
||||
<div groups="project.group_project_manager">
|
||||
<a type="edit">Settings</a>
|
||||
</div>
|
||||
<div>
|
||||
<a name="%(project.action_project_task_user_tree_filtered)d" type="action">Tasks</a>
|
||||
</div>
|
||||
<div>
|
||||
<a name="%(project.action_view_task_history_cumulative_filter)d" type="action">Cumulative Flow</a>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="widget.editable" class="o_project_kanban_colorpicker">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="toggle_favorite"><i t-attf-class="fa o_dashboard_star #{record.is_favorite.raw_value ? 'fa-star' : 'fa-star-o'}" title="Click to add/remove from favorite"/> Favorite</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_project_kanban_manage">
|
||||
<a class="o_kanban_manage_toggle_button" href="#">More <i class="fa fa-caret-down"/></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="o_project_kanban_boxes">
|
||||
<div t-if="record.use_tasks.raw_value" class="o_project_kanban_box">
|
||||
<a name="%(act_project_project_2_project_task_all)d" type="action">
|
||||
<span class="o_value"><t t-esc="record.task_count.value"/></span>
|
||||
<span class="o_label"><t t-esc="record.label_tasks.value"/></span>
|
||||
</a>
|
||||
<a t-if="record.task_needaction_count.raw_value" class="o_needaction" name="%(act_project_project_2_project_task_all)d" type="action" context="{'search_default_message_needaction': 1}">
|
||||
<t t-esc="record.task_needaction_count.raw_value"/>
|
||||
</a>
|
||||
</div>
|
||||
<a t-if="record.doc_count.raw_value" class="o_project_kanban_box" name="attachment_tree_view" type="object">
|
||||
<span class="o_value"><t t-esc="record.doc_count.value"/></span>
|
||||
<span class="o_label">Documents</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="activate_sample_project" model="ir.actions.server">
|
||||
<field name="name">Activate Sample Project</field>
|
||||
<field name="model_id" ref="project.model_project_project"/>
|
||||
@@ -251,7 +361,7 @@
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="project_id" domain="[('active','=',False)]" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/>
|
||||
<field name="project_id" domain="[('active', '=', False)]" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/>
|
||||
<field name="user_id"
|
||||
on_change="onchange_user_id(user_id, context)"
|
||||
class="o_task_user_field"
|
||||
@@ -430,7 +540,7 @@
|
||||
<label for="use_tasks" groups="base.group_no_one"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<button class="oe_stat_button" type="object" name="projects_action"
|
||||
<button class="oe_stat_button" type="object" name="projects_action"
|
||||
icon="fa-puzzle-piece" attrs="{'invisible': [('project_count', '=', 0)]}">
|
||||
<field string="Projects" name="project_count" widget="statinfo"/>
|
||||
</button>
|
||||
@@ -637,8 +747,19 @@
|
||||
<menuitem action="project_tags_action" id="menu_project_tags_act" parent="menu_project_config" groups="base.group_no_one"/>
|
||||
|
||||
<!-- Portal menuitems -->
|
||||
<menuitem name="Projects" id="portal_services_projects" parent="portal.portal_projects"
|
||||
<menuitem name="Projects" id="portal_services_projects" parent="portal.portal_projects"
|
||||
action="open_view_project_all" sequence="10"/>
|
||||
|
||||
<!-- Reporting menus -->
|
||||
<menuitem id="base.menu_project_report" name="Reports"
|
||||
groups="project.group_project_manager"
|
||||
parent="base.menu_main_pm" sequence="99"/>
|
||||
<menuitem id="menu_project_task_user_tree" name="Tasks"
|
||||
action="project.action_project_task_user_tree"
|
||||
parent="base.menu_project_report"/>
|
||||
<menuitem id="menu_action_view_task_history_cumulative"
|
||||
action="project.action_view_task_history_cumulative"
|
||||
parent="base.menu_project_report"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
Reference in New Issue
Block a user