diff options
| author | Bharat (OpenERP) <bde@tinyerp.com> | 2011-09-15 16:49:02 +0530 |
|---|---|---|
| committer | Bharat (OpenERP) <bde@tinyerp.com> | 2011-09-15 16:49:02 +0530 |
| commit | a3847b9dffd3a8db4eaa1f8dade5ecae6a575bba (patch) | |
| tree | 392473368800fb5fb9a10d7e68ae643736040442 /addons/project | |
| parent | b84248c04cf86c8bfa56e275181bf7b9dce8723d (diff) | |
| parent | fbf6708d1041f84018bb9c13e997b705e6086648 (diff) | |
[MERGE] merged with main addons
bzr revid: bde@tinyerp.com-20110915111902-qgvz0veoqa5znlvv
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/project_view.xml | 67 | ||||
| -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 |
7 files changed, 139 insertions, 173 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/project_view.xml b/addons/project/project_view.xml index fdb7aa1ebb0..0f0c4a9ca0b 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -134,7 +134,7 @@ <field name="type">tree</field> <field name="field_parent">child_ids</field> <field name="arch" type="xml"> - <tree colors="red:date and (date<current_date) and (state in ('open'));blue:state in ('draft','pending');grey: state in ('close','cancelled')" string="Projects"> + <tree colors="red:date and (date<current_date) and (state == 'open');blue:state in ('draft','pending');grey: state in ('close','cancelled')" string="Projects"> <field name="sequence" invisible="1"/> <field name="date" invisible="1"/> <field name="name" string="Project Name"/> @@ -297,7 +297,7 @@ <field name="create_date"/> </group> <separator string="Miscelleanous" colspan="4"/> - <field name="partner_id"/> + <field name="partner_id" /> <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/> <group col="4" colspan="2"> <field name="type_id" widget="selection" readonly="1"/> @@ -312,6 +312,63 @@ </field> </record> + + + <record id="view_task_kanban" model="ir.ui.view"> + <field name="name">project.task.kanban</field> + <field name="model">project.task</field> + <field name="type">kanban</field> + <field name="arch" type="xml"> + <kanban> + <field name="state"/> + <templates> + <t t-name="kanban-box"> + <t t-set="color">#fff</t> + <t t-if="state.raw_value == 'done'" t-set="color">#dfd</t> + <t t-if="state.raw_value == 'open'" t-set="color">lightcyan</t> + <t t-if="state.raw_value == 'cancel' and total_hours.raw_value gt 0" t-set="color">red</t> + <div t-attf-style="background: #{color}"> + <table> + <tr> + <td>Title :</td> + <td><field name="name"/></td> + </tr> + <tr> + <td>Progress :</td> + <td><field name="progress"/></td> + </tr> + <tr> + <td><button data-type="action" data-name="%(action_project_task_reevaluate)d">Reevaluate</button><button data-type="edit" >Edit</button></td> + <td><button data-type="object" data-name="prev_type">Previous phase</button></td> + </tr> + <tr> + <td>Project name:</td> + <td colspan="2"><field name="project_id"/></td> + </tr> + <tr> + <td>Phase</td> + <td colspan="2"><field name="type_id"/></td> + </tr> + <tr> + <td>Remain Time :</td> + <td colspan="2"><field name="remaining_hours"/></td> + </tr> + <tr> + <td>Spent Time :</td> + <td colspan="2"><field name="remaining_hours"/></td> + </tr> + <tr> + <td>Remain Time :</td> + <td colspan="2"><field name="remaining_hours"/></td> + </tr> + </table> + </div> + </t> + </templates> + </kanban> + </field> + </record> + <record id="view_task_tree2" model="ir.ui.view"> <field name="name">project.task.tree</field> <field name="model">project.task</field> @@ -437,7 +494,7 @@ <field name="name">Tasks</field> <field name="res_model">project.task</field> <field name="view_type">form</field> - <field name="view_mode">tree,form,calendar,gantt,graph</field> + <field name="view_mode">tree,form,calendar,gantt,graph,kanban</field> <field eval="False" name="filter"/> <field name="view_id" ref="view_task_tree2"/> <field name="context">{"search_default_user_id":uid, "search_default_current": 1}</field> @@ -450,7 +507,7 @@ <field name="name">Overpassed Tasks</field> <field name="res_model">project.task</field> <field name="view_type">form</field> - <field name="view_mode">tree,form,calendar,graph</field> + <field name="view_mode">tree,form,calendar,graph,kanban</field> <field name="domain">[('date_deadline','<',time.strftime('%Y-%m-%d')),('state','in',('draft','pending','open'))]</field> <field name="filter" eval="True"/> <field name="search_view_id" ref="view_task_search_form"/> @@ -461,7 +518,7 @@ <field name="res_model">project.task</field> <field name="name">Project's tasks</field> <field name="view_type">form</field> - <field name="view_mode">tree,form,calendar,graph,gantt</field> + <field name="view_mode">tree,form,calendar,graph,gantt,kanban</field> <field name="domain">[('project_id', 'child_of', [active_id])]</field> <field name="context">{'project_id':active_id, 'active_test':False}</field> </record> 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> |
