From c50d82ddea862cc8e619e683e639401f7971ef5d Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Tue, 13 May 2014 16:09:26 +0200 Subject: [PATCH 1/3] [FIX] crm: make days to close and days to open simple calendar delta When computing the duration to close or to open a lead, do not use some kind of complex computation with working days. It does not make sense to use the number of intervals with the number of days. The computation was incorrect and very slow. Replaced by simple calendar delta. --- addons/crm/crm_lead.py | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index bf6ef242cc8..ccc0cbd5396 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -167,9 +167,6 @@ class crm_lead(format_address, osv.osv): """ :return dict: difference between current date and log date """ - cal_obj = self.pool.get('resource.calendar') - res_obj = self.pool.get('resource.resource') - res = {} for lead in self.browse(cr, uid, ids, context=context): for field in fields: @@ -181,39 +178,14 @@ class crm_lead(format_address, osv.osv): 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 - date_until = lead.date_open 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") - date_until = lead.date_closed ans = date_close - date_create if ans: - resource_id = False - if lead.user_id: - resource_ids = res_obj.search(cr, uid, [('user_id','=',lead.user_id.id)]) - if len(resource_ids): - resource_id = resource_ids[0] - - duration = float(ans.days) - if lead.section_id and lead.section_id.resource_calendar_id: - duration = float(ans.days) * 24 - new_dates = cal_obj.interval_get(cr, - uid, - lead.section_id.resource_calendar_id and lead.section_id.resource_calendar_id.id or False, - datetime.strptime(lead.create_date, '%Y-%m-%d %H:%M:%S'), - duration, - resource=resource_id - ) - no_days = [] - date_until = datetime.strptime(date_until, '%Y-%m-%d %H:%M:%S') - for in_time, out_time in new_dates: - if in_time.date not in no_days: - no_days.append(in_time.date) - if out_time > date_until: - break - duration = len(no_days) - res[lead.id][field] = abs(int(duration)) + duration = abs(int(ans.days)) + res[lead.id][field] = duration return res _columns = { @@ -253,7 +225,7 @@ class crm_lead(format_address, osv.osv): 'day_open': fields.function(_compute_day, string='Days to Open', \ multi='day_open', type="float", store=True), 'day_close': fields.function(_compute_day, string='Days to Close', \ - multi='day_close', type="float", store=True), + multi='day_open', type="float", store=True), 'date_last_stage_update': fields.datetime('Last Stage Update', select=True), # Messaging and marketing From 6369400f5b5888f7c8c7a75b670fc1b8b72ec682 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 13 May 2014 16:57:12 +0200 Subject: [PATCH 2/3] [FIX] website_forum: restrict a bunch of controllers to POST-only, convert a few more links to buttons --- addons/website_forum/controllers/main.py | 18 +++---- addons/website_forum/views/website_forum.xml | 52 ++++++++++++++------ 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/addons/website_forum/controllers/main.py b/addons/website_forum/controllers/main.py index cd36a802422..8fa7922e518 100644 --- a/addons/website_forum/controllers/main.py +++ b/addons/website_forum/controllers/main.py @@ -73,7 +73,7 @@ class WebsiteForum(http.Controller): forums = Forum.browse(cr, uid, obj_ids, context=context) return request.website.render("website_forum.forum_all", {'forums': forums}) - @http.route('/forum/new', type='http', auth="user", multilang=True, website=True) + @http.route('/forum/new', type='http', auth="user", methods=['POST'], multilang=True, website=True) def forum_create(self, forum_name="New Forum", **kwargs): forum_id = request.registry['forum.forum'].create(request.cr, request.uid, { 'name': forum_name, @@ -220,7 +220,7 @@ class WebsiteForum(http.Controller): request.registry['forum.post'].write(request.cr, request.uid, [question.id], {'favourite_ids': favourite_ids}, context=request.context) return favourite - @http.route('/forum//question//ask_for_close', type='http', auth="user", multilang=True, website=True) + @http.route('/forum//question//ask_for_close', type='http', auth="user", methods=['POST'], multilang=True, website=True) def question_ask_for_close(self, forum, question, **post): check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_close_own' or '_karma_modo_close_all') if not check_res[0]: @@ -261,7 +261,7 @@ class WebsiteForum(http.Controller): }, context=request.context) return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question))) - @http.route('/forum//question//reopen', type='http', auth="user", multilang=True, website=True) + @http.route('/forum//question//reopen', type='http', auth="user", methods=['POST'], multilang=True, website=True) def question_reopen(self, forum, question, **kwarg): check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_close_own' or '_karma_modo_close_all') if not check_res[0]: @@ -270,7 +270,7 @@ class WebsiteForum(http.Controller): request.registry['forum.post'].write(request.cr, request.uid, [question.id], {'state': 'active'}, context=request.context) return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question))) - @http.route('/forum//question//delete', type='http', auth="user", multilang=True, website=True) + @http.route('/forum//question//delete', type='http', auth="user", methods=['POST'], multilang=True, website=True) def question_delete(self, forum, question, **kwarg): check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_unlink_own' or '_karma_modo_unlink_all') if not check_res[0]: @@ -279,7 +279,7 @@ class WebsiteForum(http.Controller): request.registry['forum.post'].write(request.cr, request.uid, [question.id], {'active': False}, context=request.context) return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question))) - @http.route('/forum//question//undelete', type='http', auth="user", multilang=True, website=True) + @http.route('/forum//question//undelete', type='http', auth="user", methods=['POST'], multilang=True, website=True) def question_undelete(self, forum, question, **kwarg): check_res = self._has_enough_karma(question.create_uid.id == request.uid and '_karma_modo_unlink_own' or '_karma_modo_unlink_all') if not check_res[0]: @@ -338,7 +338,7 @@ class WebsiteForum(http.Controller): request.registry['forum.post'].write(cr, uid, [post.id], {'is_correct': not post.is_correct}, context=context) return not post.is_correct - @http.route('/forum//post//delete', type='http', auth="user", multilang=True, website=True) + @http.route('/forum//post//delete', type='http', auth="user", methods=['POST'], multilang=True, website=True) def post_delete(self, forum, post, **kwargs): check_res = self._has_enough_karma(post.create_uid.id == request.uid and '_karma_modo_unlink_own' or '_karma_modo_unlink_all') if not check_res[0]: @@ -548,7 +548,7 @@ class WebsiteForum(http.Controller): }) return request.website.render("website_forum.edit_profile", values) - @http.route('/forum//user//save', type='http', auth="user", multilang=True, website=True) + @http.route('/forum//user//save', type='http', auth="user", methods=['POST'], multilang=True, website=True) def save_edited_profile(self, forum, user, **kwargs): request.registry['res.users'].write(request.cr, request.uid, [user.id], { 'name': kwargs.get('name'), @@ -589,7 +589,7 @@ class WebsiteForum(http.Controller): # Messaging # -------------------------------------------------- - @http.route('/forum//post//comment//convert_to_answer', type='http', auth="public", multilang=True, website=True) + @http.route('/forum//post//comment//convert_to_answer', type='http', auth="public", methods=['POST'], multilang=True, website=True) def convert_comment_to_answer(self, forum, post, comment, **kwarg): body = comment.body request.registry['mail.message'].unlink(request.cr, request.uid, [comment.id], context=request.context) @@ -599,7 +599,7 @@ class WebsiteForum(http.Controller): return self.post_comment(forum, answer, comment=html2plaintext(body)) return self.post_new(forum, question, content=body) - @http.route('/forum//post//convert_to_comment', type='http', auth="user", multilang=True, website=True) + @http.route('/forum//post//convert_to_comment', type='http', auth="user", methods=['POST'], multilang=True, website=True) def convert_answer_to_comment(self, forum, post, **kwarg): values = { 'comment': html2plaintext(post.content), diff --git a/addons/website_forum/views/website_forum.xml b/addons/website_forum/views/website_forum.xml index 75b9fcbd7e7..0e0ada6df48 100644 --- a/addons/website_forum/views/website_forum.xml +++ b/addons/website_forum/views/website_forum.xml @@ -21,9 +21,9 @@ -