[MERGE] upstream
This commit is contained in:
commit
0d49bbb8e0
|
@ -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
|
||||
|
|
|
@ -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/<model("forum.forum"):forum>/question/<model("forum.post"):question>/ask_for_close', type='http', auth="user", multilang=True, website=True)
|
||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):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/<model("forum.forum"):forum>/question/<model("forum.post"):question>/reopen', type='http', auth="user", multilang=True, website=True)
|
||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):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/<model("forum.forum"):forum>/question/<model("forum.post"):question>/delete', type='http', auth="user", multilang=True, website=True)
|
||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):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/<model("forum.forum"):forum>/question/<model("forum.post"):question>/undelete', type='http', auth="user", multilang=True, website=True)
|
||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):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/<model("forum.forum"):forum>/post/<model("forum.post"):post>/delete', type='http', auth="user", multilang=True, website=True)
|
||||
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):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/<model("forum.forum"):forum>/user/<model("res.users"):user>/save', type='http', auth="user", multilang=True, website=True)
|
||||
@http.route('/forum/<model("forum.forum"):forum>/user/<model("res.users"):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/<model("forum.forum"):forum>/post/<model("forum.post"):post>/comment/<model("mail.message"):comment>/convert_to_answer', type='http', auth="public", multilang=True, website=True)
|
||||
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/comment/<model("mail.message"):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/<model("forum.forum"):forum>/post/<model("forum.post"):post>/convert_to_comment', type='http', auth="user", multilang=True, website=True)
|
||||
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):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),
|
||||
|
|
|
@ -21,9 +21,9 @@
|
|||
</template>
|
||||
|
||||
<!-- helper -->
|
||||
<template id="muted_button">
|
||||
<template id="link_button">
|
||||
<form method="POST" t-att-action="url">
|
||||
<button t-attf-class="text-muted fa btn-link #{classes}">
|
||||
<button t-attf-class="fa btn-link #{classes}">
|
||||
<t t-esc="label"/></button>
|
||||
</form>
|
||||
</template>
|
||||
|
@ -440,7 +440,11 @@
|
|||
on <span t-field="question.closed_date"/></b>
|
||||
</p>
|
||||
<div t-if="question.state == 'close' and user.karma>=500" class="mb24 text-center">
|
||||
<a class="fa fa-arrow-right" t-attf-href="/forum/#{ slug(forum) }/question/#{slug(question)}/reopen"> Reopen</a>
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{ slug(forum) }/question/#{slug(question)}/reopen"/></t>
|
||||
<t t-set="label"> Reopen</t>
|
||||
<t t-set="classes">fa-arrow-right</t>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
<t t-raw="question.content"/>
|
||||
|
@ -460,19 +464,39 @@
|
|||
</a>
|
||||
</li>
|
||||
<li t-if="question.state != 'close' and ((user.id == question.create_uid.id and can_close_own) or can_close_all)">
|
||||
<a class="text-muted fa fa-times" t-attf-href="/forum/#{ slug(forum) }/question/#{slug(question)}/ask_for_close"> Close</a>
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{ slug(forum) }/question/#{slug(question)}/ask_for_close"/></t>
|
||||
<t t-set="label"> Close</t>
|
||||
<t t-set="classes">text-muted fa-times</t>
|
||||
</t>
|
||||
</li>
|
||||
<li t-if="question.state == 'close' and ((user.id == question.create_uid.id and can_close_own) or can_close_all)">
|
||||
<a class="text-muted fa fa-undo" t-attf-href="/forum/#{ slug(forum) }/question/#{slug(question)}/reopen"> Reopen</a>
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{ slug(forum) }/question/#{slug(question)}/reopen"/></t>
|
||||
<t t-set="label"> Reopen</t>
|
||||
<t t-set="classes">text-muted fa-undo</t>
|
||||
</t>
|
||||
</li>
|
||||
<li t-if="(user.id == question.create_uid.id and can_edit_own) or can_edit_all">
|
||||
<a class="text-muted fa fa-edit" t-attf-href="/forum/#{ slug(forum) }/post/#{slug(question)}/edit"> Edit</a>
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{ slug(forum) }/post/#{slug(question)}/edit"/></t>
|
||||
<t t-set="label"> Edit</t>
|
||||
<t t-set="classes">text-muted fa-edit</t>
|
||||
</t>
|
||||
</li>
|
||||
<li t-if="question.active and ((user.id == question.create_uid.id and can_unlink_own) or can_unlink_all)">
|
||||
<a class="text-muted fa fa-trash-o" t-attf-href="/forum/#{ slug(forum) }/question/#{slug(question)}/delete"> Delete</a>
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{ slug(forum) }/question/#{slug(question)}/delete"/></t>
|
||||
<t t-set="label"> Delete</t>
|
||||
<t t-set="classes">text-muted fa-trash-o</t>
|
||||
</t>
|
||||
</li>
|
||||
<li t-if="not question.active and ((user.id == question.create_uid.id and can_unlink_own) or can_unlink_all)">
|
||||
<a class="text-muted fa fa-trash-o" t-attf-href="/forum/#{ slug(forum) }/question/#{slug(question)}/undelete"> Undelete</a>
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{ slug(forum) }/question/#{slug(question)}/undelete"/></t>
|
||||
<t t-set="label"> Undelete</t>
|
||||
<t t-set="classes">text-muted fa-trash-o</t>
|
||||
</t>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -519,17 +543,17 @@
|
|||
<a class="text-muted fa fa-edit" t-attf-href="/forum/#{slug(forum)}/post/#{slug(answer)}/edit"> Edit</a>
|
||||
</li>
|
||||
<li t-if="(user.id == answer.create_uid.id and can_unlink_own) or can_unlink_all">
|
||||
<t t-call="website_forum.muted_button">
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{slug(forum)}/post/#{slug(answer)}/delete"/></t>
|
||||
<t t-set="label"> Delete</t>
|
||||
<t t-set="classes">fa-trash-o</t>
|
||||
<t t-set="classes">text-muted fa-trash-o</t>
|
||||
</t>
|
||||
</li>
|
||||
<li t-if="user.id == answer.create_uid.id">
|
||||
<t t-call="website_forum.muted_button">
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{slug(forum)}/post/#{slug(answer)}/convert_to_comment"/></t>
|
||||
<t t-set="label">Convert as a comment</t>
|
||||
<t t-set="classes">fa-magic</t>
|
||||
<t t-set="classes">text-muted fa-magic</t>
|
||||
</t>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -574,10 +598,10 @@
|
|||
style="display: inline-block;"/>
|
||||
on <span t-field="message.date" t-field-options='{"format":"short"}'/>
|
||||
|
||||
<t t-call="website_forum.muted_button">
|
||||
<t t-call="website_forum.link_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{slug(forum)}/post/#{slug(object)}/comment/#{slug(message)}/convert_to_answer"/></t>
|
||||
<t t-set="label"> Convert as an answer</t>
|
||||
<t t-set="classes">fa-magic pull-right</t>
|
||||
<t t-set="classes">text-muted fa-magic pull-right</t>
|
||||
</t>
|
||||
</small>
|
||||
</div>
|
||||
|
|
|
@ -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/<int:partner_id>', '/members/<partner_name>-<int:partner_id>'], 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']
|
||||
|
|
|
@ -59,14 +59,17 @@
|
|||
<t t-set="current_membership_id" t-value="membership_line_id.membership_id.id"/>
|
||||
<h3 class="text-center"><span t-field="membership_line_id.membership_id"/></h3>
|
||||
</t>
|
||||
<t t-set="partner_data" t-value="partners_data[membership_line_id.partner.id]"/>
|
||||
<t t-set="partner" t-value="partners[membership_line_id.partner.id]"/>
|
||||
<div class="media">
|
||||
<a class="pull-left" t-attf-href="/members/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
|
||||
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data.get('image_small')}"/>
|
||||
</a>
|
||||
<a class="pull-left" t-attf-href="/members/#{slug(partner)}"
|
||||
t-field="partner.image_small"
|
||||
t-field-options='{"widget": "image", "class": "media-object"}'
|
||||
></a>
|
||||
<div class="media-body" style="min-height: 64px;">
|
||||
<a class="media-heading" t-attf-href="/members/#{ slug([partner_data.get('id'), partner_data.get('name')]) }"><t t-if="partner_data.get('parent_id')"><span t-esc="partner_data.get('parent_id')[1]"/></t> <span t-esc="partner_data.get('name')"/></a>
|
||||
<div t-raw="partner_data.get('website_short_description')"/>
|
||||
<a class="media-heading" t-attf-href="/members/#{slug(partner)}">
|
||||
<span t-field="partner.display_name"/>
|
||||
</a>
|
||||
<div t-field="partner.website_short_description"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
|
Loading…
Reference in New Issue