summaryrefslogtreecommitdiff
path: root/addons/project
diff options
context:
space:
mode:
Diffstat (limited to 'addons/project')
-rw-r--r--addons/project/__openerp__.py3
-rw-r--r--addons/project/project.py5
-rw-r--r--addons/project/wizard/__init__.py2
-rw-r--r--addons/project/wizard/mail_compose_message.py72
-rw-r--r--addons/project/wizard/project_task_close.py122
-rw-r--r--addons/project/wizard/project_task_close_view.xml41
6 files changed, 77 insertions, 168 deletions
diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py
index a2387ce24dc..936c7d361fc 100644
--- a/addons/project/__openerp__.py
+++ b/addons/project/__openerp__.py
@@ -28,7 +28,7 @@
"category": "Project Management",
'complexity': "easy",
"images": ["images/gantt.png", "images/project_dashboard.jpeg","images/project_task_tree.jpeg","images/project_task.jpeg","images/project.jpeg","images/task_analysis.jpeg"],
- "depends": ["base_setup", "product", "analytic", "board"],
+ "depends": ["base_setup", "product", "analytic", "board", "mail"],
"description": """
Project management module tracks multi-level projects, tasks, work done on tasks, eso.
======================================================================================
@@ -46,7 +46,6 @@ Dashboard for project members that includes:
"update_xml": [
"security/project_security.xml",
"wizard/project_task_delegate_view.xml",
- "wizard/project_task_close_view.xml",
"wizard/project_task_reevaluate_view.xml",
"security/ir.model.access.csv",
"project_data.xml",
diff --git a/addons/project/project.py b/addons/project/project.py
index 96e39f1f1de..e62570a1a43 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -590,11 +590,12 @@ class task(osv.osv):
'name': _('Send Email after close task'),
'view_type': 'form',
'view_mode': 'form',
- 'res_model': 'project.task.close',
+ 'res_model': 'mail.compose.message',
'type': 'ir.actions.act_window',
'target': 'new',
'nodestroy': True,
- 'context': {'active_id': task.id}
+ 'context': {'active_id': task.id,
+ 'active_model': 'project.task'}
}
return res
diff --git a/addons/project/wizard/__init__.py b/addons/project/wizard/__init__.py
index 69e1051e621..f5324d2b6aa 100644
--- a/addons/project/wizard/__init__.py
+++ b/addons/project/wizard/__init__.py
@@ -19,7 +19,7 @@
#
##############################################################################
-import project_task_close
+import mail_compose_message
import project_task_delegate
import project_task_reevaluate
diff --git a/addons/project/wizard/mail_compose_message.py b/addons/project/wizard/mail_compose_message.py
new file mode 100644
index 00000000000..82d67ea9b92
--- /dev/null
+++ b/addons/project/wizard/mail_compose_message.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2010-Today OpenERP SA (<http://www.openerp.com>)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>
+#
+##############################################################################
+
+from osv import osv
+from osv import fields
+from tools.translate import _
+
+class mail_compose_message(osv.osv_memory):
+ _inherit = 'mail.compose.message'
+
+ def get_value(self, cr, uid, model, resource_id, context=None):
+ '''
+ To get values of the resource_id for the model
+ @param model: Object
+ @param resource_id: id of a record for which values to be read
+
+ @return: Returns a dictionary
+ '''
+ result = super(mail_compose_message, self).get_value(cr, uid, model, resource_id, context=context)
+ if model == 'project.task' and resource_id:
+ task_pool = self.pool.get('project.task')
+ task_data = task_pool.browse(cr, uid, resource_id, context=context)
+ partner = task_data.partner_id or task_data.project_id.partner_id
+ if task_data.project_id.warn_manager and (not task_data.project_id.user_id or task_data.project_id.user_id and not task_data.project_id.user_id.user_email) :
+ raise osv.except_osv(_('Error'), _("Please specify the Project Manager or email address of Project Manager."))
+ elif task_data.project_id.warn_customer and (not partner or not len(partner.address) or (partner and len(partner.address) and not partner.address[0].email)):
+ raise osv.except_osv(_('Error'), _("Please specify the Customer or email address of Customer."))
+
+ result.update({'email_from': task_data.user_id and task_data.user_id.user_email or False})
+ val = {
+ 'name': task_data.name,
+ 'user_id': task_data.user_id.name,
+ 'task_id': "%d/%d" % (task_data.project_id.id, task_data.id),
+ 'date_start': task_data.date_start,
+ 'date': task_data.date_end,
+ 'state': task_data.state
+ }
+ header = (task_data.project_id.warn_header or '') % val
+ footer = (task_data.project_id.warn_footer or '') % val
+ description = u'%s\n %s\n %s\n\n \n%s' % (header, task_data.description or '', footer, task_data.user_id and task_data.user_id.signature)
+ if partner and len(partner.address):
+ result.update({'email_to': result.get('email_to',False) and result.get('email_to') + ',' + partner.address[0].email})
+ result.update({
+ 'body_text': description or False,
+ 'email_to': task_data.project_id.user_id and task_data.project_id.user_id.user_email or False,
+ 'subject': _("Task '%s' Closed") % task_data.name,
+ 'model': model,
+ 'res_id': resource_id,
+ })
+
+ return result
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project/wizard/project_task_close.py b/addons/project/wizard/project_task_close.py
deleted file mode 100644
index 627864820f6..00000000000
--- a/addons/project/wizard/project_task_close.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-from osv import fields, osv
-import tools
-from tools.translate import _
-import re
-class project_task_close(osv.osv_memory):
- """
- Close Task
- """
- _name = "project.task.close"
- _description = "Project Close Task"
- _columns = {
- 'manager_warn': fields.boolean("Warn Manager", help="Warn Manager by Email"),
- 'partner_warn': fields.boolean("Warn Customer", help="Warn Customer by Email"),
- 'manager_email': fields.char('Manager Email', size=128, help="Email Address of Project's Manager"),
- 'partner_email': fields.char('Customer Email', size=128, help="Email Address of Customer"),
- 'description': fields.text('Description'),
- }
-
- def default_get(self, cr, uid, fields, context=None):
- """
- This function gets default values
- """
- if context is None:
- context = {}
- record_id = context and context.get('active_id', False) or False
- task_pool = self.pool.get('project.task')
-
- res = super(project_task_close, self).default_get(cr, uid, fields, context=context)
- task = task_pool.browse(cr, uid, record_id, context=context)
- project = task.project_id
- manager = project.user_id or False
- partner = task.partner_id or task.project_id.partner_id
-
- if 'description' in fields:
- res.update({'description': task.description or False})
- if 'manager_warn' in fields:
- res.update({'manager_warn': project.warn_manager or False})
- if 'partner_warn' in fields:
- res.update({'partner_warn': project.warn_customer or False})
- if 'manager_email' in fields:
- res.update({'manager_email': manager and manager.user_email or False})
- if partner and len(partner.address) and 'partner_email' in fields:
- res.update({'partner_email': partner.address[0].email})
- return res
-
- def send(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
-
- task_pool = self.pool.get('project.task')
- task_id = context.get('active_id', False)
- if not task_id:
- return {}
- task = task_pool.browse(cr, uid, task_id, context=context)
- for data in self.browse(cr, uid, ids, context=context):
- # Send Warn Message by Email to Manager and Customer
- if data.manager_warn and not data.manager_email:
- raise osv.except_osv(_('Error'), _("Please specify the email address of Project Manager."))
-
- elif data.partner_warn and not data.partner_email:
- raise osv.except_osv(_('Error'), _("Please specify the email address of Customer."))
-
- elif data.manager_warn or data.partner_warn:
- project = task.project_id
- subject = _("Task '%s' Closed") % task.name
- if task.user_id and task.user_id.user_email:
- from_adr = task.user_id.user_email
- signature = task.user_id.signature
- else:
- raise osv.except_osv(_('Error'), _("Couldn't send mail because your email address is not configured!"))
- val = {
- 'name': task.name,
- 'user_id': task.user_id.name,
- 'task_id': "%d/%d" % (project.id, task.id),
- 'date_start': task.date_start,
- 'date_end': task.date_end,
- 'state': task.state
- }
-
- to_adr = []
- header = footer = ''
- try:
- header_str = (project.warn_header or '')
- footer_str = (project.warn_footer or '')
- header = (re.sub(r'\%\W*\(', '%(', header_str)) % val
- footer = (re.sub(r'\%\W*\(', '%(', footer_str)) % val
- except:
- raise osv.except_osv(_('Error'), _("Invlaid automatic variables used in project header or foooter."))
- body = u'%s\n%s\n%s\n\n-- \n%s' % (header, data.description or '', footer, signature)
- if data.manager_warn and data.manager_email:
- to_adr.append(data.manager_email)
- if data.partner_warn and data.partner_email:
- to_adr.append(data.partner_email)
- mail_id = tools.email_send(from_adr, to_adr, subject, tools.ustr(body), email_bcc=[from_adr])
- if not mail_id:
- raise osv.except_osv(_('Error'), _("Couldn't send mail! Check the email ids and smtp configuration settings"))
- return {'type': 'ir.actions.act_window_close'}
-
-project_task_close()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project/wizard/project_task_close_view.xml b/addons/project/wizard/project_task_close_view.xml
deleted file mode 100644
index d6bed92824d..00000000000
--- a/addons/project/wizard/project_task_close_view.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
- <data>
-
- <record id="view_project_task_close" model="ir.ui.view">
- <field name="name">Send Email</field>
- <field name="model">project.task.close</field>
- <field name="type">form</field>
- <field name="arch" type="xml">
- <form string="Send Email">
- <group colspan="4" col="4">
- <field name="manager_warn" invisible="1"/>
- <field name="manager_email" widget="email" attrs="{'invisible':[('manager_warn','=',False)], 'required':[('manager_warn','=',True)]}" width="250"/>
- <field name="partner_warn" invisible="1"/>
- <field name="partner_email" widget="email" attrs="{'invisible':[('partner_warn','=',False)], 'required':[('partner_warn','=',True)]}"/>
- <separator string="Warn Message" colspan="4"/>
- <field name="description" nolabel="1" colspan="4" width="200" height="150"/>
- </group>
- <separator string="" colspan="4"/>
- <group colspan="2" col="2">
- </group>
- <group colspan="2" col="3">
- <button icon="gtk-cancel" special="cancel" string="_Cancel"/>
- <button icon="terp-mail-message-new" string="_Send" name="send" type="object"/>
- </group>
- </form>
- </field>
- </record>
-
- <record id="action_project_task_close" model="ir.actions.act_window">
- <field name="name">Send Email</field>
- <field name="type">ir.actions.act_window</field>
- <field name="res_model">project.task.close</field>
- <field name="view_type">form</field>
- <field name="view_mode">form</field>
- <field name="view_id" ref="view_project_task_close"/>
- <field name="target">new</field>
- </record>
-
- </data>
-</openerp>