diff options
| author | Amit Patel (OpenERP) <apa@tinyerp.com> | 2012-08-01 12:34:25 +0530 |
|---|---|---|
| committer | Amit Patel (OpenERP) <apa@tinyerp.com> | 2012-08-01 12:34:25 +0530 |
| commit | 522a3edc19c7446c723d1b3e4cb4c19c89a36fa4 (patch) | |
| tree | 4eedd0276ee76e89c9cced59507bea4ff987874b /addons/project | |
| parent | 6e5d18a9332c3115b1eac5cd64d022545c56b987 (diff) | |
| parent | e845e2350c694484793020ab6a9a729f9c205de6 (diff) | |
[MERGE]:merged with trunk
bzr revid: apa@tinyerp.com-20120801070425-ydyx8nc2ngi3j0zi
Diffstat (limited to 'addons/project')
| -rw-r--r-- | addons/project/project.py | 31 | ||||
| -rw-r--r-- | addons/project/project_demo.xml | 185 | ||||
| -rw-r--r-- | addons/project/project_view.xml | 92 | ||||
| -rw-r--r-- | addons/project/report/project_cumulative.xml | 29 | ||||
| -rw-r--r-- | addons/project/report/project_report_view.xml | 60 | ||||
| -rw-r--r-- | addons/project/res_partner_view.xml | 2 | ||||
| -rw-r--r-- | addons/project/static/src/js/project.js | 70 |
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','<>',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','<>',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', '<>', 'cancelled'),('state', '<>', '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(); } } }); |
