diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index c9b78008245..8271ab025d2 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -503,8 +503,8 @@ class crm_case(osv.osv):
s[section] = dict([(v, k) for (k, v) in s[section].iteritems()])
if st in s[section]:
self.write(cr, uid, [case.id], {'stage_id': s[section][st]})
- return True
-
+ return True
+
def history(self, cr, uid, ids, keyword, history=False, email=False, details=None, context={}):
"""
@param self: The object pointer
@@ -552,7 +552,7 @@ class crm_case(osv.osv):
(case.section_id and case.section_id.reply_to) or \
(case.user_id and case.user_id.address_id and \
case.user_id.address_id.email) or tools.config.get('email_from',False)
- res = obj.create(cr, uid, data, context)
+ res = obj.create(cr, uid, data, context)
return True
_history = __history
@@ -631,7 +631,7 @@ class crm_case(osv.osv):
self.__history(cr, uid, cases, _('Send'), history=True, email=False)
for case in cases:
self.write(cr, uid, [case.id], {
- 'description': False,
+ 'description': False,
})
emails = [case.email_from] + (case.email_cc or '').split(',')
emails = filter(None, emails)
@@ -645,11 +645,11 @@ class crm_case(osv.osv):
_("No E-Mail ID Found for your Company address!"))
tools.email_send(
- emailfrom,
- emails,
- '[' + str(case.id) + '] ' + case.name,
- self.format_body(body),
- reply_to = case.section_id.reply_to,
+ emailfrom,
+ emails,
+ '[' + str(case.id) + '] ' + case.name,
+ self.format_body(body),
+ reply_to = case.section_id.reply_to,
openobject_id = str(case.id)
)
self.__history(cr, uid, [case], _('Send'), history=True, email=emails, details=body, email_from=emailfrom)
@@ -814,11 +814,11 @@ class crm_case_log(osv.osv):
_order = "id desc"
_columns = {
'name': fields.char('Status', size=64),
- 'date': fields.datetime('Date'),
- 'section_id': fields.many2one('crm.case.section', 'Section'),
- 'user_id': fields.many2one('res.users', 'User Responsible', readonly=True),
- 'model_id': fields.many2one('ir.model', "Model"),
- 'res_id': fields.integer('Resource ID'),
+ 'date': fields.datetime('Date'),
+ 'section_id': fields.many2one('crm.case.section', 'Section'),
+ 'user_id': fields.many2one('res.users', 'User Responsible', readonly=True),
+ 'model_id': fields.many2one('ir.model', "Model"),
+ 'res_id': fields.integer('Resource ID'),
}
_defaults = {
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index c1a9d9b5b1b..73fd420aa63 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -23,6 +23,7 @@ from osv import fields, osv, orm
from datetime import datetime, timedelta
import crm
import math
+from mx import DateTime
from tools.translate import _
class crm_lead(osv.osv):
@@ -92,11 +93,11 @@ class crm_lead(osv.osv):
'user_id': fields.many2one('res.users', 'Salesman'),
'referred': fields.char('Referred By', size=32),
- 'date_open': fields.datetime('Opened', readonly=True),
+ 'date_open': fields.datetime('Opened', readonly=True),
'day_open': fields.function(_compute_day, string='Days to Open', \
- method=True, multi='day_open', type="integer", store=True),
+ method=True, multi='day_open', type="integer", store=True),
'day_close': fields.function(_compute_day, string='Days to Close', \
- method=True, multi='day_close', type="integer", store=True),
+ method=True, multi='day_close', type="integer", store=True),
'function_name': fields.char('Function', size=64),
}
diff --git a/addons/crm/crm_opportunity.py b/addons/crm/crm_opportunity.py
index 1625d39fdde..7d9a0efec0e 100644
--- a/addons/crm/crm_opportunity.py
+++ b/addons/crm/crm_opportunity.py
@@ -40,8 +40,7 @@ class crm_opportunity(osv.osv):
_order = "id desc"
_inherit = 'crm.case'
- def _compute_openday(self, cr, uid, ids, name, args, context={}):
-
+ def _compute_day(self, cr, uid, ids, fields, args, context={}):
"""
@param cr: the current row, from the database cursor,
@param uid: the current user’s ID for security checks,
@@ -49,45 +48,37 @@ class crm_opportunity(osv.osv):
@return: difference between current date and log date
@param context: A standard dictionary for contextual values
"""
- result = {}
- for r in self.browse(cr, uid, ids , context):
- result[r.id] = 0
- model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', 'crm.opportunity')])
- log_obj = self.pool.get('crm.case.log')
- hist_id = log_obj.search(cr, uid, [('model_id', '=', model_id[0]), \
- ('res_id', '=', r.id), \
- ('name', '=', 'Open')])
+ log_obj = self.pool.get('crm.case.log')
+ model_obj = self.pool.get('ir.model')
+ cal_obj = self.pool.get('resource.calendar')
- if hist_id:
- # Considering last log for opening case
- log = log_obj.browse(cr, uid, hist_id[-1])
- date_lead_open = datetime.strptime(r.create_date, "%Y-%m-%d %H:%M:%S")
- date_log_open = datetime.strptime(log.date, "%Y-%m-%d %H:%M:%S")
- ans = date_lead_open - date_log_open
- duration = float(ans.days) + (float(ans.seconds) / 86400)
- result[r.id] = abs(int(duration))
- return result
+ model_ids = model_obj.search(cr, uid, [('model', '=', self._name)])
+ model_id = False
+ if len(model_ids):
+ model_id = model_ids[0]
- def _compute_closeday(self, cr, uid, ids, name, args, context={}):
+ res = {}
+ for lead in self.browse(cr, uid, ids , context):
+ for field in fields:
+ res[lead.id] = {}
+ duration = 0
+ if field == 'day_open':
+ if lead.date_open:
+ date_create = datetime.strptime(lead.create_date, "%Y-%m-%d %H:%M:%S")
+ date_open = datetime.strptime(lead.date_open, "%Y-%m-%d %H:%M:%S")
- """
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of closeday’s IDs
- @return: difference between current date and closed date
- @param context: A standard dictionary for contextual values
- """
- result = {}
- for r in self.browse(cr, uid, ids , context):
- result[r.id] = 0
+ ans = date_open - date_create
+ duration = float(ans.days) + (float(ans.seconds) / 86400)
- if r.date_closed:
- date_create = datetime.strptime(r.create_date, "%Y-%m-%d %H:%M:%S")
- date_close = datetime.strptime(r.date_closed, "%Y-%m-%d %H:%M:%S")
- ans = date_close - date_create
- duration = float(ans.days) + (float(ans.seconds) / 86400)
- result[r.id] = abs(int(duration))
- return result
+ elif field == 'day_close':
+ if lead.date_closed:
+ date_create = datetime.strptime(lead.create_date, "%Y-%m-%d %H:%M:%S")
+ date_close = datetime.strptime(lead.date_closed, "%Y-%m-%d %H:%M:%S")
+
+ ans = date_close - date_create
+ duration = float(ans.days) + (float(ans.seconds) / 86400)
+ res[lead.id][field] = abs(int(duration))
+ return res
_columns = {
'stage_id': fields.many2one ('crm.case.stage', 'Stage', \
@@ -113,11 +104,12 @@ class crm_opportunity(osv.osv):
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
- 'day_open': fields.function(_compute_openday, string='Days to Open', \
- method=True, type="integer", store=True),
- 'day_close': fields.function(_compute_closeday, string='Days to Close', \
- method=True, type="integer", store=True),
- }
+ 'date_open': fields.datetime('Opened', readonly=True),
+ 'day_open': fields.function(_compute_day, string='Days to Open', \
+ method=True, multi='day_open', type="integer", store=True),
+ 'day_close': fields.function(_compute_day, string='Days to Close', \
+ method=True, multi='day_close', type="integer", store=True),
+ }
def onchange_stage_id(self, cr, uid, ids, stage_id, context={}):
diff --git a/addons/crm/crm_opportunity_view.xml b/addons/crm/crm_opportunity_view.xml
index 4e37620839d..fb2a9eaba5f 100644
--- a/addons/crm/crm_opportunity_view.xml
+++ b/addons/crm/crm_opportunity_view.xml
@@ -138,12 +138,14 @@
+
+
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 03ecfdcc778..0248a6ee7a5 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -37,37 +37,45 @@ class project_issue(osv.osv):
_order = "priority, id desc"
_inherit = 'crm.case'
- def _compute_openday(self, cr, uid, ids, name, args, context={}):
- result = {}
- for r in self.browse(cr, uid, ids , context):
- result[r.id] = 0
- model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', 'project.issue')])
- log_obj = self.pool.get('crm.case.log')
- hist_id = log_obj.search(cr, uid, [('model_id', '=', model_id[0]), \
- ('res_id', '=', r.id), \
- ('name', '=', 'Open')])
+ def _compute_day(self, cr, uid, ids, fields, args, context={}):
+ """
+ @param cr: the current row, from the database cursor,
+ @param uid: the current user’s ID for security checks,
+ @param ids: List of Openday’s IDs
+ @return: difference between current date and log date
+ @param context: A standard dictionary for contextual values
+ """
+ log_obj = self.pool.get('crm.case.log')
+ model_obj = self.pool.get('ir.model')
+ cal_obj = self.pool.get('resource.calendar')
- if hist_id:
- # Considering last log for opening case
- log = log_obj.browse(cr, uid, hist_id[-1])
- date_lead_open = datetime.strptime(r.create_date, "%Y-%m-%d %H:%M:%S")
- date_log_open = datetime.strptime(log.date, "%Y-%m-%d %H:%M:%S")
- ans = date_lead_open - date_log_open
- duration = float(ans.days) + (float(ans.seconds) / 86400)
- result[r.id] = abs(int(duration))
- return result
+ model_ids = model_obj.search(cr, uid, [('model', '=', self._name)])
+ model_id = False
+ if len(model_ids):
+ model_id = model_ids[0]
- def _compute_closeday(self, cr, uid, ids, name, args, context={}):
- result = {}
- for r in self.browse(cr, uid, ids , context):
- result[r.id] = 0
- if r.date_closed:
- date_create = datetime.strptime(r.create_date, "%Y-%m-%d %H:%M:%S")
- date_close = datetime.strptime(r.date_closed, "%Y-%m-%d %H:%M:%S")
- ans = date_close - date_create
- duration = float(ans.days) + (float(ans.seconds) / 86400)
- result[r.id] = abs(int(duration))
- return result
+ res = {}
+ for lead in self.browse(cr, uid, ids , context):
+ for field in fields:
+ res[lead.id] = {}
+ duration = 0
+ if field == 'day_open':
+ if lead.date_open:
+ date_create = datetime.strptime(lead.create_date, "%Y-%m-%d %H:%M:%S")
+ date_open = datetime.strptime(lead.date_open, "%Y-%m-%d %H:%M:%S")
+
+ ans = date_open - date_create
+ duration = float(ans.days) + (float(ans.seconds) / 86400)
+
+ elif field == 'day_close':
+ if lead.date_closed:
+ date_create = datetime.strptime(lead.create_date, "%Y-%m-%d %H:%M:%S")
+ date_close = datetime.strptime(lead.date_closed, "%Y-%m-%d %H:%M:%S")
+
+ ans = date_close - date_create
+ duration = float(ans.days) + (float(ans.seconds) / 86400)
+ res[lead.id][field] = abs(int(duration))
+ return res
_columns = {
'date_closed': fields.datetime('Closed', readonly=True),
@@ -84,11 +92,12 @@ class project_issue(osv.osv):
'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_openday, string='Days to Open', \
- method=True, type="integer", store=True),
- 'day_close': fields.function(_compute_closeday, string='Days to Close', \
- method=True, type="integer", store=True),
- 'assigned_to' : fields.many2one('res.users', 'Assigned to'),
+ 'date_open': fields.datetime('Opened', readonly=True),
+ 'day_open': fields.function(_compute_day, string='Days to Open', \
+ method=True, multi='day_open', type="integer", store=True),
+ 'day_close': fields.function(_compute_day, string='Days to Close', \
+ method=True, multi='day_close', type="integer", store=True),
+ 'assigned_to' : fields.many2one('res.users', 'Assigned to'),
'timesheet_ids' : fields.one2many('hr.analytic.timesheet', 'issue_id', 'Timesheets'),
'analytic_account_id' : fields.many2one('account.analytic.account', 'Analytic Account',
domain="[('partner_id', '=', partner_id)]",
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index f09643c2590..1da031fa52e 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -77,7 +77,13 @@
+
+
+
+
+
+
@@ -88,7 +94,7 @@
-
+