[MERGE] MErged from main branch
[odoo/odoo.git] / addons / project / wizard / project_close_task.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
6 #
7 #    This program is free software: you can redistribute it and/or modify
8 #    it under the terms of the GNU Affero General Public License as
9 #    published by the Free Software Foundation, either version 3 of the
10 #    License, or (at your option) any later version.
11 #
12 #    This program is distributed in the hope that it will be useful,
13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #    GNU Affero General Public License for more details.
16 #
17 #    You should have received a copy of the GNU Affero General Public License
18 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 #
20 ##############################################################################
21
22 from osv import fields, osv
23
24 from tools.translate import _
25 from tools import email_send as email
26
27 class project_close_task(osv.osv_memory):
28     """
29     Close Task
30     """
31     _name = "close.task"
32     _description = "Project Close Task"
33     _columns = {
34         'email': fields.char('E-Mail', size=64, help="Email Address"),
35         'description': fields.text('Description'),
36                }
37
38     def _get_email(self, cr, uid, context={}):
39         email = ''
40         if 'task_id' in context:
41             task = self.pool.get('project.task').browse(cr, uid, context['task_id'])
42             partner_id = task.partner_id or task.project_id.partner_id
43             if partner_id and partner_id.address[0].email:
44                 email = partner_id.address[0].email
45         return email
46
47     def _get_desc(self, cr, uid, context={}):
48         if 'task_id' in context:
49             task = self.pool.get('project.task').browse(cr, uid, context['task_id'])
50             return task.description or task.name
51         return ''
52
53     _defaults={
54        'email': _get_email,
55        'description': _get_desc,
56                }
57
58     def confirm(self, cr, uid, ids, context={}):
59         if not 'task_id' in context:
60             return {}
61         close_task = self.read(cr, uid, ids[0], [])
62         to_adr = close_task['email']
63         description = close_task['description']
64         if 'task_id' in context:
65             for task in self.pool.get('project.task').browse(cr, uid, [context['task_id']], context=context):
66                 project = task.project_id
67                 subject = "Task '%s' closed" % task.name
68                 if task.user_id and task.user_id.address_id and task.user_id.address_id.email:
69                     from_adr = task.user_id.address_id.email
70                     signature = task.user_id.signature
71                 else:
72                     raise osv.except_osv(_('Error'), _("Couldn't send mail because your email address is not configured!"))
73                 if to_adr:
74                     val = {
75                         'name': task.name,
76                         'user_id': task.user_id.name,
77                         'task_id': "%d/%d" % (project.id, task.id),
78                         'date_start': task.date_start,
79                         'date_end': task.date_end,
80                         'state': task.state
81                     }
82                     header = (project.warn_header or '') % val
83                     footer = (project.warn_footer or '') % val
84                     body = u'%s\n%s\n%s\n\n-- \n%s' % (header, description, footer, signature)
85                     email(from_adr, [to_adr], subject, body.encode('utf-8'), email_bcc=[from_adr])
86                 else:
87                     raise osv.except_osv(_('Error'), _("Couldn't send mail because the contact for this task (%s) has no email address!") % contact.name)
88         return {}
89
90 project_close_task()
91 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: