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 @@
-
+
@@ -440,7 +440,11 @@
on
-
Reopen
+
+
+ Reopen
+ fa-arrow-right
+
@@ -460,19 +464,39 @@
- Close
+
+
+ Close
+ text-muted fa-times
+
- Reopen
+
+
+ Reopen
+ text-muted fa-undo
+
- Edit
+
+
+ Edit
+ text-muted fa-edit
+
- Delete
+
+
+ Delete
+ text-muted fa-trash-o
+
- Undelete
+
+
+ Undelete
+ text-muted fa-trash-o
+
@@ -519,17 +543,17 @@
Edit
-
+
Delete
- fa-trash-o
+ text-muted fa-trash-o
-
+
Convert as a comment
- fa-magic
+ text-muted fa-magic
@@ -574,10 +598,10 @@
style="display: inline-block;"/>
on
-
+
Convert as an answer
- fa-magic pull-right
+ text-muted fa-magic pull-right
From a6f036d43fced59654770f6c30cca8581009cf2b Mon Sep 17 00:00:00 2001
From: Christophe Simonis
Date: Tue, 13 May 2014 18:52:37 +0200
Subject: [PATCH 3/3] [FIX] website_membership: correct view and controller
---
addons/website_membership/controllers/main.py | 14 +++++---------
.../views/website_membership.xml | 15 +++++++++------
2 files changed, 14 insertions(+), 15 deletions(-)
diff --git a/addons/website_membership/controllers/main.py b/addons/website_membership/controllers/main.py
index 11e764f0eac..810fd7dac14 100644
--- a/addons/website_membership/controllers/main.py
+++ b/addons/website_membership/controllers/main.py
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
-import openerp
from openerp import SUPERUSER_ID
from openerp.addons.web import http
from openerp.addons.web.http import request
@@ -39,7 +38,7 @@ class WebsiteMembership(http.Controller):
current_country = None
# base domain for groupby / searches
- base_line_domain = [("partner.website_published", "=", True),('state', 'in', ['free', 'paid'])]
+ base_line_domain = [("partner.website_published", "=", True), ('state', 'in', ['free', 'paid'])]
if membership_id:
base_line_domain.append(('membership_id', '=', membership_id))
membership = product_obj.browse(cr, uid, membership_id, context=context)
@@ -76,12 +75,10 @@ class WebsiteMembership(http.Controller):
membership_line_ids = membership_line_obj.search(cr, uid, line_domain, context=context)
membership_lines = membership_line_obj.browse(cr, uid, membership_line_ids, context=context)
membership_lines.sort(key=lambda x: x.membership_id.website_sequence)
- partner_ids = [m.partner and m.partner.id for m in membership_lines]
+ partner_ids = [m.partner.id for m in membership_lines]
google_map_partner_ids = ",".join(map(str, partner_ids))
- partners_data = {}
- for partner in partner_obj.read(cr, openerp.SUPERUSER_ID, partner_ids, request.website.get_partner_white_list_fields(), context=context):
- partners_data[partner.get("id")] = partner
+ partners = dict((p.id, p) for p in partner_obj.browse(request.cr, SUPERUSER_ID, partner_ids, request.context))
# format domain for group_by and memberships
membership_ids = product_obj.search(cr, uid, [('membership', '=', True)], order="website_sequence", context=context)
@@ -91,7 +88,7 @@ class WebsiteMembership(http.Controller):
pager = request.website.pager(url="/members", total=len(membership_line_ids), page=page, step=self._references_per_page, scope=7, url_args=post)
values = {
- 'partners_data': partners_data,
+ 'partners': partners,
'membership_lines': membership_lines,
'memberships': memberships,
'membership': membership,
@@ -107,8 +104,7 @@ class WebsiteMembership(http.Controller):
@http.route(['/members/', '/members/-'], type='http', auth="public", website=True, multilang=True)
def partners_ref(self, partner_id, **post):
- partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
- values = website_partner.get_partner_template_value(partner)
+ values = website_partner.get_partner_template_value(partner_id)
if not values:
return self.members(**post)
values['main_object'] = values['partner']
diff --git a/addons/website_membership/views/website_membership.xml b/addons/website_membership/views/website_membership.xml
index 6b7f8c088b6..ca38873c0d0 100644
--- a/addons/website_membership/views/website_membership.xml
+++ b/addons/website_membership/views/website_membership.xml
@@ -59,14 +59,17 @@
-
+