From b11a71fd8751bc4fb33faa1f95f7915e230b86ab Mon Sep 17 00:00:00 2001 From: Thibault Francois Date: Thu, 7 Apr 2011 13:41:45 +0200 Subject: [PATCH] [MERGE] improvement project-issue bzr revid: tfr@openerp.com-20110407114145-xvr27pjquxwk9ff0 --- addons/analytic/analytic.py | 2 +- addons/document/document.py | 20 +++- .../email_template/email_template_mailbox.py | 1 + addons/email_template/email_template_view.xml | 2 +- .../marketing_campaign/marketing_campaign.py | 95 +++++++++++++++---- .../marketing_campaign_view.xml | 1 + addons/project/project.py | 5 + addons/project_issue/project_issue.py | 39 +++++--- addons/project_issue/project_issue_view.xml | 37 ++++---- .../report/project_issue_report.py | 7 +- .../report/project_issue_report_view.xml | 4 +- .../project_issue_sheet.py | 30 +++++- .../project_issue_sheet_view.xml | 18 +++- 13 files changed, 191 insertions(+), 70 deletions(-) diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py index ee458ca0076..39ffeb70eed 100644 --- a/addons/analytic/analytic.py +++ b/addons/analytic/analytic.py @@ -205,7 +205,7 @@ class account_analytic_account(osv.osv): def check_recursion(self, cr, uid, ids, parent=None): return super(account_analytic_account, self)._check_recursion(cr, uid, ids, parent=parent) - _order = 'date_start desc,parent_id desc,code' + _order = 'name asc' _constraints = [ (check_recursion, 'Error! You can not create recursive analytic accounts.', ['parent_id']), ] diff --git a/addons/document/document.py b/addons/document/document.py index 1a553b23ed1..27a6c3d3c19 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -279,10 +279,22 @@ class document_file(osv.osv): else: if vals.get('file_size'): del vals['file_size'] - if not self._check_duplication(cr, uid, vals): - raise osv.except_osv(_('ValidateError'), _('File name must be unique!')) - result = super(document_file, self).create(cr, uid, vals, context) - cr.commit() # ? + result = self._check_duplication(cr, uid, vals) + if not result: + domain = [ + ('res_id', '=', vals['res_id']), + ('res_model', '=', vals['res_model']), + ('datas_fname', '=', vals['datas_fname']), + ] + attach_ids = self.search(cr, uid, domain, context=context) + super(document_file, self).write(cr, uid, attach_ids, + {'datas' : vals['datas']}, + context=context) + result = attach_ids[0] + else: + #raise osv.except_osv(_('ValidateError'), _('File name must be unique!')) + result = super(document_file, self).create(cr, uid, vals, context) + cr.commit() # ? return result def __get_partner_id(self, cr, uid, res_model, res_id, context=None): diff --git a/addons/email_template/email_template_mailbox.py b/addons/email_template/email_template_mailbox.py index 49d61bf05df..4486cb5451e 100644 --- a/addons/email_template/email_template_mailbox.py +++ b/addons/email_template/email_template_mailbox.py @@ -92,6 +92,7 @@ class email_template_mailbox(osv.osv): self.unlink(cr, uid, [id], context=context) # Remove attachments for this mail attachment_pool.unlink(cr, uid, values['attachments_ids'], context=context) + return result else: self.write(cr, uid, id, {'folder':'sent', 'state':'na', 'date_mail':time.strftime("%Y-%m-%d %H:%M:%S")}, context) self.historise(cr, uid, [id], "Email sent successfully", context) diff --git a/addons/email_template/email_template_view.xml b/addons/email_template/email_template_view.xml index 5da74772c44..7d2a5f7ad5c 100644 --- a/addons/email_template/email_template_view.xml +++ b/addons/email_template/email_template_view.xml @@ -201,7 +201,7 @@ + parent="menu_email_template" action="action_email_template_tree_all" /> + diff --git a/addons/project/project.py b/addons/project/project.py index 14ee94e76a1..134364d8b1a 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -26,6 +26,10 @@ from datetime import datetime, date from tools.translate import _ from osv import fields, osv +class project_project(osv.osv): + _name = 'project.project' + +project_project() class project_task_type(osv.osv): _name = 'project.task.type' @@ -35,6 +39,7 @@ class project_task_type(osv.osv): 'name': fields.char('Stage Name', required=True, size=64, translate=True), 'description': fields.text('Description'), 'sequence': fields.integer('Sequence'), + 'project_ids': fields.many2many('project.project', 'project_task_type_rel', 'type_id', 'project_id', 'Projects'), } _defaults = { diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index aaaff37305e..a8a32847243 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -43,9 +43,9 @@ project_issue_version() class project_issue(crm.crm_case, osv.osv): _name = "project.issue" _description = "Project Issue" - _order = "priority, id desc" + _order = "priority, create_date desc" _inherit = ['mailgate.thread'] - + def case_open(self, cr, uid, ids, *args): """ @param self: The object pointer @@ -56,7 +56,7 @@ class project_issue(crm.crm_case, osv.osv): """ res = super(project_issue, self).case_open(cr, uid, ids, *args) - self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}) + self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'), 'assigned_to' : uid}) for (id, name) in self.name_get(cr, uid, ids): message = _("Issue '%s' has been opened.") % name self.log(cr, uid, id, message) @@ -175,7 +175,7 @@ class project_issue(crm.crm_case, osv.osv): 'section_id': fields.many2one('crm.case.section', 'Sales Team', \ select=True, help='Sales team to which Case belongs to.\ Define Responsible user and Email account for mail gateway.'), - 'user_id': fields.many2one('res.users', 'Responsible'), + 'user_id': fields.related('project_id', 'user_id', type='many2one', relation='res.users', store=True, select=1, string='Responsible'), 'partner_id': fields.many2one('res.partner', 'Partner'), 'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \ domain="[('partner_id','=',partner_id)]"), @@ -200,19 +200,19 @@ class project_issue(crm.crm_case, osv.osv): 'partner_name': fields.char("Employee's Name", size=64), 'partner_mobile': fields.char('Mobile', size=32), 'partner_phone': fields.char('Phone', size=32), - 'type_id': fields.many2one ('project.task.type', 'Resolution'), + 'type_id': fields.many2one ('project.task.type', 'Resolution', domain="[('project_ids', '=', project_id)]"), 'project_id':fields.many2one('project.project', 'Project'), 'duration': fields.float('Duration'), 'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"), 'day_open': fields.function(_compute_day, string='Days to Open', \ - method=True, multi='day_open', type="float", store=True), + method=True, multi='compute_day', type="float", store=True), 'day_close': fields.function(_compute_day, string='Days to Close', \ - method=True, multi='day_close', type="float", store=True), - 'assigned_to': fields.related('task_id', 'user_id', string = 'Assigned to', type="many2one", relation="res.users", store=True, help='This is the current user to whom the related task have been assigned'), + method=True, multi='compute_day', type="float", store=True), + 'assigned_to': fields.many2one('res.users', 'Assigned to', required=False, select=1), 'working_hours_open': fields.function(_compute_day, string='Working Hours to Open the Issue', \ - method=True, multi='working_days_open', type="float", store=True), + method=True, multi='compute_day', type="float", store=True), 'working_hours_close': fields.function(_compute_day, string='Working Hours to Close the Issue', \ - method=True, multi='working_days_close', type="float", store=True), + method=True, multi='compute_day', type="float", store=True), 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]), 'date_action_last': fields.datetime('Last Action', readonly=1), 'date_action_next': fields.datetime('Next Action', readonly=1), @@ -230,17 +230,30 @@ class project_issue(crm.crm_case, osv.osv): return user.context_project_id.id return False + def on_change_project(self, cr, uid, ids, project_id, context=None): + result = {} + + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project.user_id: + result['value'] = {'user_id' : project.user_id.id} + + return result + + _defaults = { 'active': 1, - 'user_id': crm.crm_case._get_default_user, + #'user_id': crm.crm_case._get_default_user, 'partner_id': crm.crm_case._get_default_partner, 'partner_address_id': crm.crm_case._get_default_partner_address, - 'email_from': crm.crm_case. _get_default_email, + 'email_from': crm.crm_case._get_default_email, 'state': 'draft', - 'section_id': crm.crm_case. _get_section, + 'section_id': crm.crm_case._get_section, 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), 'priority': crm.AVAILABLE_PRIORITIES[2][0], 'project_id':_get_project, + 'categ_id' : lambda *a: False, + #'assigned_to' : lambda obj, cr, uid, context: uid, } def convert_issue_task(self, cr, uid, ids, context=None): diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 36c0e4ba82f..2224527e9d2 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -52,13 +52,14 @@
- - - - - + + + + + + - +