summaryrefslogtreecommitdiff
path: root/addons/project
diff options
context:
space:
mode:
authorAmit Patel (OpenERP) <apa@tinyerp.com>2012-08-01 12:34:25 +0530
committerAmit Patel (OpenERP) <apa@tinyerp.com>2012-08-01 12:34:25 +0530
commit522a3edc19c7446c723d1b3e4cb4c19c89a36fa4 (patch)
tree4eedd0276ee76e89c9cced59507bea4ff987874b /addons/project
parent6e5d18a9332c3115b1eac5cd64d022545c56b987 (diff)
parente845e2350c694484793020ab6a9a729f9c205de6 (diff)
[MERGE]:merged with trunk
bzr revid: apa@tinyerp.com-20120801070425-ydyx8nc2ngi3j0zi
Diffstat (limited to 'addons/project')
-rw-r--r--addons/project/project.py31
-rw-r--r--addons/project/project_demo.xml185
-rw-r--r--addons/project/project_view.xml92
-rw-r--r--addons/project/report/project_cumulative.xml29
-rw-r--r--addons/project/report/project_report_view.xml60
-rw-r--r--addons/project/res_partner_view.xml2
-rw-r--r--addons/project/static/src/js/project.js70
7 files changed, 238 insertions, 231 deletions
diff --git a/addons/project/project.py b/addons/project/project.py
index 09b260597f6..dda2b86c8bb 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -220,7 +220,7 @@ class project(osv.osv):
'followers': fields.function(_get_followers, method=True, fnct_search=_search_followers,
type='many2many', relation='res.users', string='Followers'),
}
-
+
def dummy(self, cr, uid, ids, context):
return True
@@ -566,7 +566,7 @@ class task(base_stage, osv.osv):
# restore order of the search
result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
return result
-
+
def _read_group_user_id(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
res_users = self.pool.get('res.users')
project_id = self._resolve_project_id_from_context(cr, uid, context=context)
@@ -700,6 +700,7 @@ class task(base_stage, osv.osv):
When the case is over, the state is set to \'Done\'.\
If the case needs to be reviewed then the state is \
set to \'Pending\'.'),
+ 'categ_ids': fields.many2many('project.category', string='Categories'),
'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State',
help="A task's kanban state indicates special situations affecting it:\n"
" * Normal is the default situation\n"
@@ -903,7 +904,7 @@ class task(base_stage, osv.osv):
return True
def action_close(self, cr, uid, ids, context=None):
- """ This action closes the task
+ """ This action closes the task
"""
task_id = len(ids) and ids[0] or False
self._check_child_task(cr, uid, ids, context=context)
@@ -913,7 +914,7 @@ class task(base_stage, osv.osv):
def do_close(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_close. """
return self.case_close(cr, uid, ids, context=context)
-
+
def case_close(self, cr, uid, ids, context=None):
""" Closes Task """
if not isinstance(ids, list): ids = [ids]
@@ -946,7 +947,7 @@ class task(base_stage, osv.osv):
def do_cancel(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_cancel. """
return self.case_cancel(cr, uid, ids, context=context)
-
+
def case_cancel(self, cr, uid, ids, context=None):
tasks = self.browse(cr, uid, ids, context=context)
self._check_child_task(cr, uid, ids, context=context)
@@ -958,7 +959,7 @@ class task(base_stage, osv.osv):
def do_open(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_open. """
return self.case_open(cr, uid, ids, context=context)
-
+
def case_open(self, cr, uid, ids, context=None):
if not isinstance(ids,list): ids = [ids]
self.case_set(cr, uid, ids, 'open', {'date_start': fields.datetime.now()}, context=context)
@@ -968,7 +969,7 @@ class task(base_stage, osv.osv):
def do_draft(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_draft. """
return self.case_draft(cr, uid, ids, context=context)
-
+
def case_draft(self, cr, uid, ids, context=None):
self.case_set(cr, uid, ids, 'draft', {}, context=context)
self.case_draft_send_note(cr, uid, ids, context=context)
@@ -977,11 +978,11 @@ class task(base_stage, osv.osv):
def do_pending(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_pending. """
return self.case_pending(cr, uid, ids, context=context)
-
+
def case_pending(self, cr, uid, ids, context=None):
self.case_set(cr, uid, ids, 'pending', {}, context=context)
return self.case_pending_send_note(cr, uid, ids, context=context)
-
+
def _delegate_task_attachments(self, cr, uid, task_id, delegated_task_id, context=None):
attachment = self.pool.get('ir.attachment')
attachment_ids = attachment.search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', task_id)], context=context)
@@ -1083,7 +1084,7 @@ class task(base_stage, osv.osv):
new_stage = vals.get('stage_id')
vals_reset_kstate = dict(vals, kanban_state='normal')
for t in self.browse(cr, uid, ids, context=context):
- #TO FIX:Kanban view doesn't raise warning
+ #TO FIX:Kanban view doesn't raise warning
#stages = [stage.id for stage in t.project_id.type_ids]
#if new_stage not in stages:
#raise osv.except_osv(_('Warning !'), _('Stage is not defined in the project.'))
@@ -1130,7 +1131,7 @@ class task(base_stage, osv.osv):
result += "\n"
return result
-
+
# ---------------------------------------------------
# OpenChatter methods and notifications
# ---------------------------------------------------
@@ -1367,3 +1368,11 @@ class project_task_history_cumulative(osv.osv):
)
""")
+
+class project_category(osv.osv):
+ """ Category of project's task (or issue) """
+ _name = "project.category"
+ _description = "Category of project's task, issue, ..."
+ _columns = {
+ 'name': fields.char('Name', size=64, required=True, translate=True),
+ }
diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml
index 7f96ff87198..1f9885d9151 100644
--- a/addons/project/project_demo.xml
+++ b/addons/project/project_demo.xml
@@ -2,50 +2,50 @@
<openerp>
<data noupdate="1">
- <!-- Users -->
+ <!-- Users -->
<record id="base.user_demo" model="res.users">
- <field eval="[(4, ref('base.group_sale_salesman')),(4, ref('group_project_user'))]" name="groups_id"/>
+ <field name="groups_id" eval="[(4, ref('base.group_sale_salesman')),(4, ref('group_project_user'))]"/>
</record>
<record id="base.user_niv" model="res.users">
<field name="name">Nicolas</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_manager')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_manager')])]"/>
<field name="login">niv</field>
<field name="password">niv</field>
</record>
<record id="base.user_al" model="res.users">
<field name="name">Antony</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_manager')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_manager')])]"/>
<field name="login">al</field>
<field name="password">al</field>
</record>
<record id="base.user_qdp" model="res.users">
<field name="name">Quentin</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]"/>
<field name="login">qdp</field>
<field name="password">qdp</field>
</record>
<record id="base.user_fpi" model="res.users">
<field name="name">Francois</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]"/>
<field name="login">fpi</field>
<field name="password">fpi</field>
</record>
<record id="base.user_jth" model="res.users">
<field name="name">Julien</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]"/>
<field name="login">jth</field>
<field name="password">jth</field>
</record>
<record id="base.user_mit" model="res.users">
<field name="name">Minh</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]"/>
<field name="login">mit</field>
<field name="password">mit</field>
</record>
<record id="base.user_vad" model="res.users">
<field name="name">Valérie</field>
- <field eval="[(6, 0, [ref('base.group_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user')])]"/>
<field name="login">vad</field>
<field name="password">vad</field>
</record>
@@ -56,68 +56,83 @@
<field name="state">open</field>
<field name="type">normal</field>
<field name="description">Integrate a Sale and Warehouse Management.</field>
- <field eval="[(6, 0, [
+ <field name="members" eval="[(6, 0, [
ref('base.user_niv'),
ref('base.user_al'),
ref('base.user_qdp'),
ref('base.user_fpi'),
ref('base.user_jth'),
ref('base.user_mit'),
- ref('base.user_vad')])]" name="members"/>
+ ref('base.user_vad')])]"/>
<field name="user_id" ref="base.user_al"/>
<field name="name">Integrate a Sale and Warehouse Management.</field>
</record>
- <!-- Tasks -->
+ <!-- Categories -->
+ <record id="project_category_01" model="project.category">
+ <field name="name">Partner's suggestion</field>
+ </record>
+ <record id="project_category_02" model="project.category">
+ <field name="name">Feature request</field>
+ </record>
+ <record id="project_category_03" model="project.category">
+ <field name="name">Experiment</field>
+ </record>
+ <record id="project_category_04" model="project.category">
+ <field name="name">Usability</field>
+ </record>
+ <!-- Tasks -->
<record id="project_task_1" model="project.task">
- <field eval="100.0" name="planned_hours"/>
- <field eval="100.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="100.0"/>
+ <field name="remaining_hours" eval="100.0"/>
<field name="user_id" ref="base.user_niv"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Prepare Requirements Document</field>
<field name="stage_id" ref="project_tt_specification"/>
<field name="color">3</field>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project.project_category_02')])]"/>
</record>
-
<record id="project_task_2" model="project.task">
- <field eval="80.0" name="planned_hours"/>
- <field eval="80.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="80.0"/>
+ <field name="remaining_hours" eval="80.0"/>
<field name="user_id" ref="base.user_niv"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Make SRS</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_3" model="project.task">
- <field eval="40.0" name="planned_hours"/>
- <field eval="40.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="40.0"/>
+ <field name="remaining_hours" eval="40.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Design Use Cases</field>
<field name="date_deadline" eval="time.strftime('%Y-%m-24')"/>
<field name="stage_id" ref="project_tt_specification"/>
+ <field name="color">4</field>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project_category_02'),
+ ref('project_category_04')])]"/>
</record>
-
<record id="project_task_4" model="project.task">
- <field eval="25.0" name="planned_hours"/>
- <field eval="25.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="25.0"/>
+ <field name="remaining_hours" eval="25.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Budget Planning</field>
<field name="description">Use the account_budget module</field>
<field name="date_deadline" eval="time.strftime('%Y-%m-19')"/>
- <field name="color">3</field>
+ <field name="color">5</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_5" model="project.task">
- <field eval="25.0" name="planned_hours"/>
- <field eval="25.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="25.0"/>
+ <field name="remaining_hours" eval="25.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -127,51 +142,48 @@
<field name="date_deadline" eval="time.strftime('%Y-%m-%d')"/>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_6" model="project.task">
- <field eval="20.0" name="planned_hours"/>
- <field eval="20.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="20.0"/>
+ <field name="remaining_hours" eval="20.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Risk Management Planning</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_7" model="project.task">
- <field eval="30.0" name="planned_hours"/>
- <field eval="30.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="30.0"/>
+ <field name="remaining_hours" eval="30.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Create Project Schedules</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_8" model="project.task">
- <field eval="10.0" name="planned_hours"/>
- <field eval="10.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="10.0"/>
+ <field name="remaining_hours" eval="10.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Dataflow Design</field>
<field name="priority">0</field>
<field name="stage_id" ref="project_tt_specification"/>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project.project_category_01')])]"/>
</record>
-
<record id="project_task_9" model="project.task">
- <field eval="50.0" name="planned_hours"/>
- <field eval="50.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="50.0"/>
+ <field name="remaining_hours" eval="50.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">User Interface Design</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_10" model="project.task">
- <field eval="40.0" name="planned_hours"/>
- <field eval="40.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="40.0"/>
+ <field name="remaining_hours" eval="40.0"/>
<field name="user_id" ref="base.user_fpi"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -179,56 +191,55 @@
<field name="kanban_state">blocked</field>
<field name="stage_id" ref="project_tt_development"/>
</record>
-
<record id="project_task_11" model="project.task">
- <field eval="90.0" name="planned_hours"/>
- <field eval="90.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="90.0"/>
+ <field name="remaining_hours" eval="90.0"/>
<field name="user_id" ref="base.user_fpi"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Develop module in Warehouse</field>
<field name="stage_id" ref="project_tt_merge"/>
</record>
-
<function model="project.task" name="do_close" eval="[ref('project_task_11')], {'install_mode': True}"/>
-
+
<record id="project_task_12" model="project.task">
- <field eval="20.0" name="planned_hours"/>
- <field eval="20.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="20.0"/>
+ <field name="remaining_hours" eval="20.0"/>
<field name="user_id" ref="base.user_fpi"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Integrate Modules</field>
<field name="stage_id" ref="project_tt_development"/>
+ <field name="color">6</field>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project_category_01'),
+ ref('project_category_03')])]"/>
</record>
-
<function model="project.task" name="do_close" eval="[ref('project_task_12')], {'install_mode': True}"/>
-
+
<record id="project_task_13" model="project.task">
- <field eval="50.0" name="planned_hours"/>
- <field eval="50.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="50.0"/>
+ <field name="remaining_hours" eval="50.0"/>
<field name="user_id" ref="base.user_mit"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Unit Testing</field>
<field name="stage_id" ref="project_tt_development"/>
</record>
-
<function model="project.task" name="do_pending" eval="[ref('project_task_13')], {'install_mode': True}"/>
<record id="project_task_14" model="project.task">
- <field eval="30.0" name="planned_hours"/>
- <field eval="30.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="30.0"/>
+ <field name="remaining_hours" eval="30.0"/>
<field name="user_id" ref="base.user_mit"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Regression Test</field>
- <field name="stage_id" ref="project_tt_development"/>
+ <field name="stage_id" ref="project_tt_development"/>
</record>
-
<record id="project_task_15" model="project.task">
- <field eval="15.0" name="planned_hours"/>
- <field eval="15.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="15.0"/>
+ <field name="remaining_hours" eval="15.0"/>
<field name="user_id" ref="base.user_fpi"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -236,11 +247,10 @@
<field name="stage_id" ref="project_tt_specification"/>
<field name="date_start">2011-02-06</field>
</record>
-
<record id="project_task_16" model="project.task">
- <field eval="10" name="sequence"/>
- <field eval="40.0" name="planned_hours"/>
- <field eval="40.0" name="remaining_hours"/>
+ <field name="sequence" eval="10"/>
+ <field name="planned_hours" eval="40.0"/>
+ <field name="remaining_hours" eval="40.0"/>
<field name="user_id" ref="base.user_mit"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -251,8 +261,8 @@
<function model="project.task" name="do_open" eval="[ref('project_task_16')], {'install_mode': True}"/>
<record id="project_task_17" model="project.task">
- <field eval="5.0" name="planned_hours"/>
- <field eval="5.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="5.0"/>
+ <field name="remaining_hours" eval="5.0"/>
<field name="user_id" ref="base.user_niv"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -262,8 +272,8 @@
<function model="project.task" name="do_open" eval="[ref('project_task_17')], {'install_mode': True}"/>
<record id="project_task_18" model="project.task">
- <field eval="10.0" name="planned_hours"/>
- <field eval="10.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="10.0"/>
+ <field name="remaining_hours" eval="10.0"/>
<field name="user_id" ref="base.user_niv"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -271,45 +281,37 @@
<field name="stage_id" ref="project_tt_specification"/>
</record>
- <!--
- Resource: project.project
- -->
+ <!-- Resource: project.project-->
<!-- Projects -->
- <!-- <record id="all_projects_account" model="project.project">
- <field name="name">Projects</field>
- <field name="code">3</field>
- </record> -->
-
-
<record id="project_project_9" model="project.project">
<field name="name">OpenERP Integration</field>
<field name="parent_id" ref="all_projects_account"/>
<field name="user_id" ref="base.user_root"/>
- <field eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development'),ref('project_tt_testing'),ref('project_tt_merge')])]" name="type_ids"/>
+ <field name="type_ids" eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development'),ref('project_tt_testing'),ref('project_tt_merge')])]"/>
</record>
<record id="project_project_21" model="project.project">
<field name="priority">10</field>
<field name="parent_id" ref="all_projects_account"/>
<field name="name">Study + Prototype</field>
<field name="user_id" ref="base.user_root"/>
- <field eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development')])]" name="type_ids"/>
- <field eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]" name="members"/>
+ <field name="type_ids" eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development')])]"/>
+ <field name="members" eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]"/>
</record>
<record id="project_project_22" model="project.project">
<field name="priority">20</field>
<field name="parent_id" ref="all_projects_account"/>
<field name="name">Specific Developments</field>
<field name="user_id" ref="base.user_root"/>
- <field eval="[(6, 0, [ref('project_tt_specification'), ref('project_tt_development')])]" name="type_ids"/>
- <field eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]" name="members"/>
+ <field name="type_ids" eval="[(6, 0, [ref('project_tt_specification'), ref('project_tt_development')])]"/>
+ <field name="members" eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]"/>
</record>
<record id="project_project_23" model="project.project">
<field name="priority">30</field>
<field name="parent_id" ref="all_projects_account"/>
<field name="name">Install, data import, configuration</field>
- <field eval="[(6, 0, [ref('project_tt_development')])]" name="type_ids"/>
- <field eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]" name="members"/>
+ <field name="type_ids" eval="[(6, 0, [ref('project_tt_development')])]"/>
+ <field name="members" eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]"/>
</record>
<!-- Tasks -->
@@ -323,7 +325,7 @@
<field name="name">Specific adaptation to MRP</field>
</record>
<function model="project.task" name="do_open" eval="[ref('project_task_116')], {'install_mode': True}"/>
-
+
<record id="project_task_130" model="project.task">
<field name="planned_hours">16.0</field>
<field name="remaining_hours">16.0</field>
@@ -343,7 +345,7 @@
<field name="name">Modifications asked by the customer.</field>
</record>
<function model="project.task" name="do_open" eval="[ref('project_task_131')], {'install_mode': True}"/>
-
+
<record id="project_task_184" model="project.task">
<field name="planned_hours">16.0</field>
<field name="remaining_hours">16.0</field>
@@ -352,7 +354,7 @@
<field name="priority">0</field>
<field name="project_id" ref="project_project_21"/>
<field name="name">Customer analysis + Architecture</field>
- <field name="color">3</field>
+ <field name="color">7</field>
</record>
<record id="project_task_186" model="project.task">
<field name="sequence">15</field>
@@ -362,7 +364,7 @@
<field name="user_id" eval="False"/>
<field name="project_id" ref="project_project_21"/>
<field name="name">Internal testing + Software Install</field>
- <field name="color">4</field>
+ <field name="color">8</field>
</record>
<record id="project_task_188" model="project.task">
<field name="sequence">17</field>
@@ -375,7 +377,7 @@
<field name="name">Analysis, Data Importation</field>
</record>
<function model="project.task" name="do_open" eval="[ref('project_task_188')], {'install_mode': True}"/>
-
+
<record id="project_task_189" model="project.task">
<field name="sequence">20</field>
<field name="planned_hours">16.0</field>
@@ -386,7 +388,7 @@
<field name="stage_id" ref="project_tt_specification"/>
</record>
<function model="project.task" name="do_open" eval="[ref('project_task_189')], {'install_mode': True}"/>
-
+
<record id="project_task_190" model="project.task">
<field name="sequence">20</field>
<field name="planned_hours">32.0</field>
@@ -399,8 +401,7 @@
<!-- Schedule tasks to assign users and dates -->
<function model="project.project" name="schedule_tasks"
- eval="[ref('project_project_21'), ref('project_project_22'), ref('project_project_23')], {'install_mode': True}"
- />
+ eval="[ref('project_project_21'), ref('project_project_22'), ref('project_project_23')], {'install_mode': True}"/>
</data>
</openerp>
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index cc6f5b05ad8..ae86f9712a3 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -155,28 +155,21 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Project">
- <group>
- <field name="complete_name" string="Project Name"/>
- <separator orientation="vertical"/>
- <filter icon="terp-mail-message-new"
- string="Inbox" help="Unread messages"
- name="needaction_pending"
- domain="[('needaction_pending','=',True)]"/>
- <separator orientation="vertical"/>
- <filter icon="terp-check" string="Open" name="Current" domain="[('state', '=','open')]" help="Open Projects"/>
- <filter icon="gtk-media-pause" string="Pending" name="Pending" domain="[('state', '=','pending')]" help="Pending Projects"/>
- <filter icon="gtk-media-pause" string="Template" name="Template" domain="[('state', '=','template')]" help="Templates of Projects"/>
- <filter icon="terp-personal+" string="Member" domain="['|',('user_id', '=', uid),('members', '=', uid)]" help="Projects in which I am a member."/>
- <filter string="Project(s) Manager" domain="[('user_id','=',uid)]" help="Projects in which I am a manager" icon="terp-personal"/>
- <separator orientation="vertical"/>
- <field name="user_id" string="Project Manager"/>
- <field name="partner_id" string="Partner"/>
- </group>
- <newline/>
+ <field name="complete_name" string="Project Name"/>
+ <filter icon="terp-mail-message-new" string="Inbox" help="Unread messages" name="needaction_pending" domain="[('needaction_pending','=',True)]"/>
+ <separator/>
+ <filter icon="terp-check" string="Open" name="Current" domain="[('state', '=','open')]" help="Open Projects"/>
+ <filter icon="gtk-media-pause" string="Pending" name="Pending" domain="[('state', '=','pending')]" help="Pending Projects"/>
+ <filter icon="gtk-media-pause" string="Template" name="Template" domain="[('state', '=','template')]" help="Templates of Projects"/>
+ <separator/>
+ <filter icon="terp-personal+" string="Member" domain="['|',('user_id', '=', uid),('members', '=', uid)]" help="Projects in which I am a member."/>
+ <separator/>
+ <filter string="Project(s) Manager" domain="[('user_id','=',uid)]" help="Projects in which I am a manager" icon="terp-personal"/>
+ <field name="user_id" string="Project Manager"/>
+ <field name="partner_id" string="Partner"/>
<group expand="0" string="Group By...">
<filter string="Manager" name="Manager" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Partner" name="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
- <separator orientation="vertical"/>
<filter string="Parent" name="Parent" help="Parent" icon="terp-folder-blue" domain = "[]" context="{'group_by':'parent_id'}"/>
</group>
</search>
@@ -431,6 +424,9 @@
<field name="progress" widget="progressbar"
groups="project.group_time_work_estimation_tasks"/>
</group>
+ <group>
+ <field name="categ_ids" widget="many2many_tags"/>
+ </group>
</group>
<notebook>
<page string="Description">
@@ -512,6 +508,7 @@
<field name="date_deadline"/>
<field name="message_summary"/>
<field name="needaction_pending"/>
+ <field name="categ_ids"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
@@ -554,6 +551,13 @@
<t t-esc="Math.round(record.remaining_hours.raw_value)"/>
</span>
</div>
+ <div class="oe_kanban_footer_left" style="margin-top:5px;">
+ <div class="oe_left oe_tags">
+ <t t-foreach="record.categ_ids.raw_value" t-as="categ_id">
+ <span class="oe_tag" t-att-data-categ_id="categ_id"></span>
+ </t>
+ </div>
+ </div>
</div>
<div class="oe_clear"></div>
</div>
@@ -633,37 +637,28 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Tasks">
- <group>
- <field name="name" string="Tasks"/>
- <separator orientation="vertical"/>
- <filter icon="terp-mail-message-new"
- string="Inbox" help="Unread messages"
- name="needaction_pending"
- domain="[('needaction_pending','=',True)]"/>
- <separator orientation="vertical"/>
- <filter name="draft" string="New" domain="[('state','=','draft')]" help="New Tasks" icon="terp-check"/>
- <filter name="open" string="In Progress" domain="[('state','=','open')]" help="In Progress Tasks" icon="terp-camera_test"/>
- <filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/>
- <filter name="project" string="Project" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-check"/>
- <filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal"/>
- <filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-"/>
- <filter string="Deadlines" context="{'deadline_visible': False}" domain="[('date_deadline','&lt;&gt;',False)]"
- help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/>
- <separator orientation="vertical"/>
- <field name="project_id"/>
- <field name="user_id"/>
- </group>
- <newline/>
+ <field name="name" string="Tasks"/>
+ <filter icon="terp-mail-message-new" string="Inbox" help="Unread messages" name="needaction_pending" domain="[('needaction_pending','=',True)]"/>
+ <separator/>
+ <filter name="draft" string="New" domain="[('state','=','draft')]" help="New Tasks" icon="terp-check"/>
+ <filter name="open" string="In Progress" domain="[('state','=','open')]" help="In Progress Tasks" icon="terp-camera_test"/>
+ <filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/>
+ <separator/>
+ <filter name="My project" string="Project" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-check"/>
+ <separator/>
+ <filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal"/>
+ <filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-"/>
+ <separator/>
+ <filter string="Deadlines" context="{'deadline_visible': False}" domain="[('date_deadline','&lt;&gt;',False)]"
+ help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/>
+ <field name="project_id"/>
+ <field name="user_id"/>
<group expand="0" string="Group By...">
<filter string="Users" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
- <separator orientation="vertical"/>
<filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
- <separator orientation="vertical"/>
<filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
<filter string="Status" name="group_state" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
- <separator orientation="vertical"/>
<filter string="Deadline" icon="terp-gnome-cpu-frequency-applet+" domain="[]" context="{'group_by':'date_deadline'}"/>
- <separator orientation="vertical" groups="base.group_no_one"/>
<filter string="Start Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_start'}" groups="base.group_no_one"/>
<filter string="End Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_end'}" groups="base.group_no_one"/>
</group>
@@ -745,11 +740,8 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Tasks Stages">
- <group>
- <field name="name" string="Tasks Stages"/>
- <separator orientation="vertical"/>
- <filter icon="terp-check" string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/>
- </group>
+ <field name="name" string="Tasks Stages"/>
+ <filter icon="terp-check" string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/>
</search>
</field>
</record>
@@ -820,7 +812,7 @@
</field>
</record>
- <!-- User Form-->
+ <!-- User Form -->
<act_window context="{'search_default_user_id': [active_id], 'default_user_id': active_id}" domain="[('state', '&lt;&gt;', 'cancelled'),('state', '&lt;&gt;', 'done')]" id="act_res_users_2_project_task_opened" name="Assigned Tasks" res_model="project.task" src_model="res.users" view_mode="tree,form,gantt,calendar,graph" view_type="form"/>
</data>
diff --git a/addons/project/report/project_cumulative.xml b/addons/project/report/project_cumulative.xml
index 3f7f3b26d96..ae87b3f2fe2 100644
--- a/addons/project/report/project_cumulative.xml
+++ b/addons/project/report/project_cumulative.xml
@@ -53,21 +53,20 @@
<field name="model">project.task.history.cumulative</field>
<field name="type">search</field>
<field name="arch" type="xml">
- <search string="Task's Analysis">
- <group>
- <field name="date"/>
- <separator orientation="vertical"/>
- <filter name="open" string="In Progress" domain="[('state','in',('open','draft'))]" help="In Progress Tasks" icon="terp-camera_test"/>
- <filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/>
- <filter name="kanban_blocked" string="Blocked" domain="[('kanban_state','=','blocked')]" icon="terp-gtk-media-pause"/>
- <filter name="kanban_ready" string="Ready" domain="[('kanban_state','=','done')]" icon="terp-camera_test"/>
- <filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal" />
- <filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-" />
- <filter string="My Projects" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-personal"/>
- <separator orientation="vertical"/>
- <field name="project_id"/>
- <field name="user_id"/>
- </group>
+ <search string="Task's Analysis">
+ <field name="date"/>
+ <filter name="open" string="In Progress" domain="[('state','in',('open','draft'))]" help="In Progress Tasks" icon="terp-camera_test"/>
+ <filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/>
+ <separator/>
+ <filter name="kanban_blocked" string="Blocked" domain="[('kanban_state','=','blocked')]" icon="terp-gtk-media-pause"/>
+ <filter name="kanban_ready" string="Ready" domain="[('kanban_state','=','done')]" icon="terp-camera_test"/>
+ <separator/>
+ <filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal" />
+ <filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-" />
+ <separator/>
+ <filter string="My Projects" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-personal"/>
+ <field name="project_id"/>
+ <field name="user_id"/>
</search>
</field>
</record>
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index 40235ad03b7..ab880536ced 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -58,60 +58,32 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Tasks Analysis">
- <group>
- <field name="date_start"/>
- <field name="date_end"/>
- <field name="date_deadline"/>
- <separator orientation="vertical"/>
- <filter string="New"
- icon="terp-document-new"
- domain="[('state','=','draft')]"
- help = "New tasks"/>
- <filter string="In progress"
- icon="terp-check"
- domain="[('state', '=' ,'open')]"
- help = "In progress tasks"/>
- <filter string="Pending"
- icon="terp-gtk-media-pause"
- domain="[('state','=','pending')]"
- help = "Pending tasks"/>
- <filter string="Done"
- icon="terp-dialog-close"
- name="done"
- domain="[('state','=','done')]"/>
- <filter icon="terp-folder-violet"
- string="My Projects"
- help="My Projects" domain="[('project_id.user_id','=',uid)]"/>
- <filter icon="terp-personal"
- string="My Task"
- help = "My tasks"
- domain="[('user_id','=',uid)]" />
- <filter icon="terp-personal-"
- string="Non Assigned Tasks to users"
- help="Non Assigned Tasks to users"
- domain="[('user_id','=',False)]"/>
- <separator orientation="vertical"/>
- <field name="project_id"/>
- <field name="user_id" widget="selection"/>
- <field name="partner_id" />
- </group>
- <newline/>
+ <field name="date_start"/>
+ <field name="date_end"/>
+ <field name="date_deadline"/>
+ <filter string="New" icon="terp-document-new" domain="[('state','=','draft')]" help = "New tasks"/>
+ <filter string="In progress" icon="terp-check" domain="[('state', '=' ,'open')]" help = "In progress tasks"/>
+ <filter string="Pending" icon="terp-gtk-media-pause" domain="[('state','=','pending')]" help = "Pending tasks"/>
+ <filter string="Done" icon="terp-dialog-close" name="done" domain="[('state','=','done')]"/>
+ <separator/>
+ <filter icon="terp-folder-violet" string="My Projects" help="My Projects" domain="[('project_id.user_id','=',uid)]"/>
+ <separator/>
+ <filter icon="terp-personal" string="My Task" help = "My tasks" domain="[('user_id','=',uid)]" />
+ <filter icon="terp-personal-" string="Non Assigned Tasks to users" help="Non Assigned Tasks to users" domain="[('user_id','=',False)]"/>
+ <field name="project_id"/>
+ <field name="user_id"/>
+ <field name="partner_id" />
<group expand="0" string="Extended Filters...">
<field name="priority"/>
- <separator orientation="vertical"/>
- <field name="company_id" groups="base.group_multi_company" widget="selection"/>
+ <field name="company_id" groups="base.group_multi_company"/>
</group>
- <newline/>
<group expand="1" string="Group By...">
<filter string="Project" name="project" icon="terp-folder-violet" context="{'group_by':'project_id'}"/>
<filter string="Task" icon="terp-stock_align_left_24" context="{'group_by':'name'}" />
- <separator orientation="vertical"/>
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}" />
<filter string="Assigned to" name="User" icon="terp-personal" context="{'group_by':'user_id'}" />
- <separator orientation="vertical"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
- <separator orientation="vertical"/>
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Creation Date"/>
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}" help="Creation Date"/>
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Creation Date"/>
diff --git a/addons/project/res_partner_view.xml b/addons/project/res_partner_view.xml
index 09170c43434..e16c18d1582 100644
--- a/addons/project/res_partner_view.xml
+++ b/addons/project/res_partner_view.xml
@@ -28,7 +28,5 @@
</xpath>
</field>
</record>
-
</data>
</openerp>
-
diff --git a/addons/project/static/src/js/project.js b/addons/project/static/src/js/project.js
index 510fcbb99e7..c8250edcafd 100644
--- a/addons/project/static/src/js/project.js
+++ b/addons/project/static/src/js/project.js
@@ -1,25 +1,61 @@
openerp.project = function(openerp) {
openerp.web_kanban.KanbanView.include({
- on_groups_started: function() {
+ project_display_members_names: function() {
+ /*
+ * Set avatar title for members.
+ * In kanban views, many2many fields only return a list of ids.
+ * We can implement return value of m2m fields like [(1,"Adminstration"),...].
+ */
var self = this;
- self._super.apply(this, arguments);
- if (this.dataset.model === 'project.project') {
- /* Set avatar title for members.
- In many2many fields, returns only list of ids.
- we can implement return value of m2m fields like [(1,"Adminstration"),...].
- */
- var members_ids = [];
- this.$element.find('.oe_kanban_project_avatars img').each(function() {
- members_ids.push($(this).data('member_id'));
- });
- var dataset = new openerp.web.DataSetSearch(this, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]);
- dataset.read_slice(['id', 'name']).then(function(result) {
- _.each(result, function(v, k) {
- self.$element.find('.oe_kanban_project_avatars img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({
- offset: 10
- });
+ var members_ids = [];
+
+ // Collect members ids
+ self.$element.find('img[data-member_id]').each(function() {
+ members_ids.push($(this).data('member_id'));
+ });
+
+ // Find their matching names
+ var dataset = new openerp.web.DataSetSearch(self, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]);
+ dataset.read_slice(['id', 'name']).then(function(result) {
+ _.each(result, function(v, k) {
+ // Set the proper value in the DOM
+ self.$element.find('img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({
+ offset: 10
});
});
+ });
+ },
+ project_display_categ_names: function() {
+ /*
+ * Set proper names to project categories.
+ * In kanban views, many2many fields only return a list of ids.
+ * Therefore, we have to fetch the matching data by ourselves.
+ */
+ var self = this;
+ var categ_ids = [];
+
+ // Collect categories ids
+ self.$element.find('span[data-categ_id]').each(function() {
+ categ_ids.push($(this).data('categ_id'));
+ });
+
+ // Find their matching names
+ var dataset = new openerp.web.DataSetSearch(self, 'project.category', self.session.context, [['id', 'in', _.uniq(categ_ids)]]);
+ dataset.read_slice(['id', 'name']).then(function(result) {
+ _.each(result, function(v, k) {
+ // Set the proper value in the DOM and display the element
+ self.$element.find('span[data-categ_id=' + v.id + ']').text(v.name);
+ });
+ });
+ },
+ on_groups_started: function() {
+ var self = this;
+ self._super.apply(self, arguments);
+
+ if (self.dataset.model === 'project.project') {
+ self.project_display_members_names();
+ } else if (self.dataset.model === 'project.task') {
+ self.project_display_categ_names();
}
}
});