diff options
Diffstat (limited to 'addons/project')
| -rw-r--r-- | addons/project/__openerp__.py | 3 | ||||
| -rw-r--r-- | addons/project/project.py | 5 | ||||
| -rw-r--r-- | addons/project/wizard/__init__.py | 2 | ||||
| -rw-r--r-- | addons/project/wizard/mail_compose_message.py | 72 | ||||
| -rw-r--r-- | addons/project/wizard/project_task_close.py | 122 | ||||
| -rw-r--r-- | addons/project/wizard/project_task_close_view.xml | 41 |
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> |
