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 @@