diff options
| author | sgo@tinyerp.com <> | 2013-06-26 16:40:29 +0530 |
|---|---|---|
| committer | sgo@tinyerp.com <> | 2013-06-26 16:40:29 +0530 |
| commit | 2e272a76872cee16de1ecbdc8f67fdf4a84f27e4 (patch) | |
| tree | 73883be0a6ba0f3ad7f0ee6299db56279d471c6b /addons/project | |
| parent | 2ed45d19d31344e332ae3632abec8c791efab1f0 (diff) | |
| parent | c180afab26171617c1c7c22db5d9836b159e5e7d (diff) | |
[MERGE]sync with trunk
bzr revid: sgo@tinyerp.com-20130626111029-e6szwugpewn3cd2g
Diffstat (limited to 'addons/project')
| -rw-r--r-- | addons/project/project.py | 53 | ||||
| -rw-r--r-- | addons/project/project_demo.xml | 6 | ||||
| -rw-r--r-- | addons/project/project_view.xml | 72 | ||||
| -rw-r--r-- | addons/project/res_partner.py | 8 | ||||
| -rw-r--r-- | addons/project/res_partner_view.xml | 26 |
5 files changed, 84 insertions, 81 deletions
diff --git a/addons/project/project.py b/addons/project/project.py index 28e4bd6e5d2..cadc4d8afb8 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -182,10 +182,10 @@ class project(osv.osv): _('You cannot delete a project containing tasks. You can either delete all the project\'s tasks and then delete the project or simply deactivate the project.')) elif proj.alias_id: alias_ids.append(proj.alias_id.id) - res = super(project, self).unlink(cr, uid, ids, context=context) + res = super(project, self).unlink(cr, uid, ids, context=context) mail_alias.unlink(cr, uid, alias_ids, context=context) return res - + def _get_attached_docs(self, cr, uid, ids, field_name, arg, context): res = {} attachment = self.pool.get('ir.attachment') @@ -196,7 +196,7 @@ class project(osv.osv): task_attachments = attachment.search(cr, uid, [('res_model', '=', 'project.task'), ('res_id', 'in', task_ids)], context=context, count=True) res[id] = (project_attachments or 0) + (task_attachments or 0) return res - + def _task_count(self, cr, uid, ids, field_name, arg, context=None): if context is None: context = {} @@ -209,22 +209,21 @@ class project(osv.osv): return res def _get_alias_models(self, cr, uid, context=None): - """Overriden in project_issue to offer more options""" + """ Overriden in project_issue to offer more options """ return [('project.task', "Tasks")] def _get_visibility_selection(self, cr, uid, context=None): """ Overriden in portal_project to offer more options """ - return [('public', 'Public'), - ('employees', 'Employees Only'), - ('followers', 'Followers Only')] + return [('public', 'Public project'), + ('employees', 'Internal project: all employees can access'), + ('followers', 'Private project: followers Only')] def attachment_tree_view(self, cr, uid, ids, context): task_ids = self.pool.get('project.task').search(cr, uid, [('project_id', 'in', ids)]) domain = [ - '|', + '|', '&', ('res_model', '=', 'project.project'), ('res_id', 'in', ids), - '&', ('res_model', '=', 'project.task'), ('res_id', 'in', task_ids) - ] + '&', ('res_model', '=', 'project.task'), ('res_id', 'in', task_ids)] res_id = ids and ids[0] or False return { 'name': _('Attachments'), @@ -237,6 +236,7 @@ class project(osv.osv): 'limit': 80, 'context': "{'default_res_model': '%s','default_res_id': %d}" % (self._name, res_id) } + # Lambda indirection method to avoid passing a copy of the overridable method when declaring the field _alias_models = lambda self, *args, **kwargs: self._get_alias_models(*args, **kwargs) _visibility_selection = lambda self, *args, **kwargs: self._get_visibility_selection(*args, **kwargs) @@ -370,13 +370,11 @@ class project(osv.osv): default['state'] = 'open' default['line_ids'] = [] default['tasks'] = [] - default.pop('alias_name', None) - default.pop('alias_id', None) proj = self.browse(cr, uid, id, context=context) if not default.get('name', False): default.update(name=_("%s (copy)") % (proj.name)) res = super(project, self).copy(cr, uid, id, default, context) - self.map_tasks(cr,uid,id,res,context) + self.map_tasks(cr, uid, id, res, context=context) return res def duplicate_template(self, cr, uid, ids, context=None): @@ -527,7 +525,7 @@ def Project(): for project in projects: project_gantt = getattr(projects_gantt, 'Project_%d' % (project.id,)) for task in project.tasks: - if task.state in ('done','cancelled'): + if task.state in ('done', 'cancelled'): continue p = getattr(project_gantt, 'Task_%d' % (task.id,)) @@ -547,23 +545,18 @@ def Project(): # ------------------------------------------------ def create(self, cr, uid, vals, context=None): - if context is None: context = {} - # Prevent double project creation when 'use_tasks' is checked! - context = dict(context, project_creation_in_progress=True) - mail_alias = self.pool.get('mail.alias') - if not vals.get('alias_id') and vals.get('name', False): - alias_name = vals.pop('alias_name', None) # prevent errors during copy() - alias_id = mail_alias.create_unique_alias(cr, uid, - # Using '+' allows using subaddressing for those who don't - # have a catchall domain setup. - {'alias_name': alias_name or "project+"+short_name(vals['name'])}, - model_name=vals.get('alias_model', 'project.task'), - context=context) - vals['alias_id'] = alias_id - if vals.get('type', False) not in ('template','contract'): + if context is None: + context = {} + # Prevent double project creation when 'use_tasks' is checked + alias management + create_context = dict(context, project_creation_in_progress=True, + alias_model_name=vals.get('alias_model', 'project.task'), alias_parent_model_name=self._name) + + if vals.get('type', False) not in ('template', 'contract'): vals['type'] = 'contract' - project_id = super(project, self).create(cr, uid, vals, context) - mail_alias.write(cr, uid, [vals['alias_id']], {'alias_defaults': {'project_id': project_id} }, context) + + project_id = super(project, self).create(cr, uid, vals, context=create_context) + project_rec = self.browse(cr, uid, project_id, context=context) + self.pool.get('mail.alias').write(cr, uid, [project_rec.alias_id.id], {'alias_parent_thread_id': project_id, 'alias_defaults': {'project_id': project_id}}, context) return project_id def write(self, cr, uid, ids, vals, context=None): diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index b7dcc2bdb83..b7e1524c2c8 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -46,9 +46,12 @@ <record id="project_project_2" model="project.project"> <field name="name">Research & Development</field> <field name="parent_id" ref="all_projects_account"/> - <field name="privacy_visibility">public</field> + <field name="privacy_visibility">followers</field> <field name="user_id" ref="base.user_demo"/> <field name="alias_model">project.task</field> + <field name="message_follower_ids" eval="[(6, 0, [ + ref('base.user_root'), + ref('base.user_demo')])]"/> </record> <!-- We assign after so that default values applies --> @@ -75,6 +78,7 @@ <field name="parent_id" ref="all_projects_account"/> <field name="name">Website Design Templates</field> <field name="user_id" ref="base.user_root"/> + <field name="privacy_visibility">followers</field> <field name="alias_model">project.task</field> <field name="privacy_visibility">employees</field> <field name="members" eval="[(4, ref('base.user_root')), (4,ref('base.user_demo'))]"/> diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index eb042e5f0c7..33842a9a19c 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -32,6 +32,7 @@ <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="partner_id"/> <field name="project_id"/> <field name="user_id"/> <group expand="0" string="Group By..."> @@ -89,17 +90,6 @@ <h1> <field name="name" string="Project Name"/> </h1> - <div name="group_alias" - attrs="{'invisible': [('alias_domain', '=', False)]}"> - <label for="alias_id" string="Email Alias"/> - <field name="alias_id" class="oe_inline oe_read_only" required="0" nolabel="1"/> - <span name="edit_alias" class="oe_edit_only"> - <field name="alias_name" class="oe_inline" - attrs="{'required': [('alias_id', '!=', False)]}"/> - @ - <field name="alias_domain" class="oe_inline" readonly="1"/> - </span> - </div> <div name="options_active"> <field name="use_tasks" class="oe_inline"/> <label for="use_tasks"/> @@ -112,17 +102,31 @@ </div> <group> <group> - <field name="privacy_visibility"/> <field name="user_id" string="Project Manager" - attrs="{'readonly':[('state','in',['close', 'cancelled'])]}" - context="{'default_groups_ref': ['base.group_user', 'project.group_project_manager']}"/> - </group> - <group> + attrs="{'readonly':[('state','in',['close', 'cancelled'])]}" + context="{'default_groups_ref': ['base.group_user', 'project.group_project_manager']}"/> <field name="partner_id" on_change="onchange_partner_id(partner_id)"/> - <p colspan="2" attrs="{'invisible': [('analytic_account_id','=',False)]}"> - To invoice or setup invoicing and renewal options, go to the related contract: <field name="analytic_account_id" readonly="1" required="0" class="oe_inline"/>. + <span></span> + <p attrs="{'invisible': [('analytic_account_id','=',False)]}"> + To invoice or setup invoicing and renewal options, go to the related contract: + <field name="analytic_account_id" readonly="1" required="0" class="oe_inline" nolabel="1"/>. </p> </group> + <group name="group_alias" + attrs="{'invisible': [('alias_domain', '=', False)]}"> + <label for="alias_name" string="Email Alias"/> + <div name="alias_def"> + <field name="alias_id" class="oe_read_only oe_inline" + string="Email Alias" required="0"/> + <div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" > + <field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/> + </div> + </div> + <label for="alias_model" string="Incoming Emails create"/> + <field name="alias_model" class="oe_inline" nolabel="1"/> + <field name="alias_contact" class="oe_inline" + string="Accept Emails From"/> + </group> </group> <notebook> <page string="Team" name="team"> @@ -145,20 +149,22 @@ </field> </page> <page string="Other Info"> - <group> - <group string="Administration" groups="project.group_time_work_estimation_tasks"> - <field name="planned_hours" widget="float_time"/> - <field name="effective_hours" widget="float_time"/> - <field name="resource_calendar_id"/> - </group> - <group string="Miscellaneous" name="misc"> - <field name="date_start"/> - <field name="date" string="End Date"/> - <field name="priority" groups="base.group_no_one"/> - <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/> - <field name="currency_id" groups="base.group_multi_currency" required="1"/> - <field name="parent_id" string="Parent" help="Append this project to another one using analytic accounts hierarchy" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}" /> - </group> + <group string="Administration"> + <field name="privacy_visibility" widget="radio"/> + <field name="planned_hours" widget="float_time" + groups="project.group_time_work_estimation_tasks"/> + <field name="effective_hours" widget="float_time" + groups="project.group_time_work_estimation_tasks"/> + <field name="resource_calendar_id" + groups="project.group_time_work_estimation_tasks"/> + </group> + <group string="Miscellaneous" name="misc"> + <field name="date_start"/> + <field name="date" string="End Date"/> + <field name="priority" groups="base.group_no_one"/> + <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/> + <field name="currency_id" groups="base.group_multi_currency" required="1"/> + <field name="parent_id" string="Parent" help="Append this project to another one using analytic accounts hierarchy" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}" /> </group> </page> <page string="Project Stages" attrs="{'invisible': [('use_tasks', '=', False)]}" name="project_stages"> @@ -252,7 +258,7 @@ <div class="oe_kanban_content"> <h4><field name="name"/></h4> <div class="oe_kanban_alias" t-if="record.alias_id.value"> - <span class="oe_e">%%</span><small><field name="alias_id"/></small> + <span class="oe_e oe_e_alias">%%</span><small><field name="alias_id"/></small> </div> <div class="oe_kanban_project_list"> <a t-if="record.use_tasks.raw_value" name="%(act_project_project_2_project_task_all)d" type="action" style="margin-right: 10px"> diff --git a/addons/project/res_partner.py b/addons/project/res_partner.py index e4ca63d79d8..e49cacf4f89 100644 --- a/addons/project/res_partner.py +++ b/addons/project/res_partner.py @@ -29,6 +29,14 @@ class res_partner(osv.osv): 'task_ids': fields.one2many('project.task', 'partner_id', 'Tasks'), } + def copy(self, cr, uid, record_id, default=None, context=None): + if default is None: + default = {} + + default['task_ids'] = [] + return super(res_partner, self).copy( + cr, uid, record_id, default=default, context=context) + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/res_partner_view.xml b/addons/project/res_partner_view.xml index d668e3c7092..f12189b5163 100644 --- a/addons/project/res_partner_view.xml +++ b/addons/project/res_partner_view.xml @@ -4,28 +4,20 @@ <!-- Partners inherited form --> <record id="view_task_partner_info_form" model="ir.ui.view"> - <field name="name">res.partner.task.info.inherit</field> + <field name="name">res.partner.task.buttons</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> + <field name="priority" eval="50"/> <field name="arch" type="xml"> - <xpath expr="//page[@name='page_history']" position="attributes"> - <attribute name="invisible">False</attribute> - </xpath> - <xpath expr="//page[@name='page_history']" position="inside"> - <group name="grp_task" string="Tasks"> - <field name="task_ids" colspan="4" nolabel="1"> - <tree string="Tasks" editable="bottom"> - <field name="name"/> - <field name="user_id"/> - <field name="date_deadline"/> - <field name="state" invisible="1"/> - <button name="do_open" states="pending,draft,done,cancelled" string="Start Task" type="object" icon="gtk-media-play" help="For changing to open state" invisible="context.get('set_visible',False)"/> - <button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/> - </tree> - </field> - </group> + <xpath expr="//div[@name='buttons']" position="inside"> + <button class="oe_inline" type="action" + name="%(action_view_task)d" + string="Tasks" + context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}" + groups="project.group_project_user" /> </xpath> </field> </record> + </data> </openerp> |
