[REM]: dependency on knowledge
[ADD] :edit button on template to trigger on website [REN]: Rename Number of Days into 'Quotation Perido Validity' [IMP]: template layout [FIX] : access right issue 'quote is not accesible without logged in' bzr revid: aja@tinyerp.com-20140123102337-i3jmee0n436azn2j
This commit is contained in:
parent
2577be53ac
commit
2d31781bf1
|
@ -9,7 +9,7 @@ OpenERP Sale Quote Roller
|
|||
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['website','sale', 'portal_sale', 'mail','document'],
|
||||
'depends': ['website','sale', 'portal_sale', 'mail'],
|
||||
'data': [
|
||||
'views/website_quotation.xml',
|
||||
'views/website_quotation_backend.xml',
|
||||
|
|
|
@ -28,18 +28,21 @@ import datetime
|
|||
|
||||
class sale_quote(http.Controller):
|
||||
|
||||
@http.route(["/quote/<int:order_id>/<token>"], type='http', auth="public", website=True)
|
||||
def view(self, order_id, token, message=False, **post):
|
||||
@http.route([
|
||||
"/quote/<int:order_id>",
|
||||
"/quote/<int:order_id>/<token>"
|
||||
], type='http', auth="public", website=True)
|
||||
def view(self, order_id, token=None, message=False, **post):
|
||||
# use SUPERUSER_ID allow to access/view order for public user
|
||||
order = request.registry.get('sale.order').browse(request.cr, SUPERUSER_ID, order_id)
|
||||
assert token == order.access_token, 'Access denied, wrong token!'
|
||||
order = request.registry.get('sale.order').browse(request.cr, token and SUPERUSER_ID or request.uid, order_id)
|
||||
if token: assert token == order.access_token, 'Access denied, wrong token!'
|
||||
# TODO: if not order.template_id: return to the URL of the portal view of SO
|
||||
values = {
|
||||
'quotation': order,
|
||||
'message': message,
|
||||
'new_post' : request.httprequest.session.get('new_post',False),
|
||||
'option': self._check_option_len(order),
|
||||
'date_diff': (datetime.datetime.now() > datetime.datetime.strptime(order.validity_date , '%Y-%m-%d'))
|
||||
'date_diff': order.validity_date and (datetime.datetime.now() > datetime.datetime.strptime(order.validity_date , '%Y-%m-%d')) or False
|
||||
}
|
||||
return request.website.render('website_quotation.so_quotation', values)
|
||||
|
||||
|
@ -89,14 +92,13 @@ class sale_quote(http.Controller):
|
|||
request.httprequest.session['new_post'] = True
|
||||
return werkzeug.utils.redirect("/quote/%s/%s?message=1" % (order_id, token))
|
||||
|
||||
def message_post(self , message, order_id):
|
||||
def message_post(self , message, order_id, type='comment'):
|
||||
request.session.body = message
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
if 'body' in request.session and request.session.body:
|
||||
request.registry.get('sale.order').message_post(cr, uid, order_id,
|
||||
body=request.session.body,
|
||||
type='comment',
|
||||
subtype='mt_comment',
|
||||
type=type,
|
||||
context=context,
|
||||
)
|
||||
request.session.body = False
|
||||
|
|
|
@ -33,7 +33,7 @@ class sale_quote_template(osv.osv):
|
|||
'quote_line': fields.one2many('sale.quote.line', 'quote_id', 'Quote Template Lines'),
|
||||
'note': fields.text('Terms and conditions'),
|
||||
'options': fields.one2many('sale.option.line', 'temp_option_id', 'Optional Products Lines'),
|
||||
'number_of_days': fields.integer('Number of Days'),
|
||||
'number_of_days': fields.integer('Quotation Period Validity'),
|
||||
}
|
||||
|
||||
def open_template(self, cr, uid, quote_id, context=None):
|
||||
|
@ -114,7 +114,7 @@ class sale_order(osv.osv):
|
|||
return {
|
||||
'type': 'ir.actions.act_url',
|
||||
'target': 'self',
|
||||
'url': '/quote/%s/%s' % (quote.id, quote.access_token)
|
||||
'url': '/quote/%s' % (quote.id)
|
||||
}
|
||||
|
||||
def onchange_template_id(self, cr, uid, ids, template_id, context=None):
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_sale_order_portal,sale.order.portal,model_sale_order,base.group_portal,1,1,1,0
|
||||
access_sale_order_public,sale.order.public,model_sale_order,base.group_public,1,1,1,0
|
||||
access_sale_order_line_public,sale.order.line.public,model_sale_order_line,base.group_public,1,1,1,0
|
||||
access_sale_options_line_public,sale.option.line.public,model_sale_option_line,base.group_public,1,1,1,0
|
||||
|
|
|
|
@ -94,7 +94,7 @@ var target_date = new Date($('#validity_date').val());
|
|||
setInterval(function () {
|
||||
var current_date = new Date();
|
||||
var days_left = Math.floor((target_date - current_date)/86400000);
|
||||
$('#countdown').html('<span><i class="fa fa-clock-o fa-2x"/><span class="day_counter">'+((days_left > 0) ? days_left : 0)+'</span><small class="days_left">Days</small></span>')
|
||||
$('#countdown').html('<span><i class="fa fa-clock-o fa-2x"/><span class="day_counter">'+((days_left > 0) ? days_left : 0)+'</span><small class="days_left">Day(s)</small></span>')
|
||||
}, 1000);
|
||||
|
||||
//vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
|
||||
|
|
|
@ -426,41 +426,36 @@
|
|||
</template>
|
||||
|
||||
<template id="so_template" name="SO Template">
|
||||
<t t-call="website.layout">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-4" id="sidebar">
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<li class="active"><a href="#template_introduction" data-toggle="tab">Contact Data</a></li>
|
||||
<li><a href="#template_introduction" data-toggle="tab">Our Offer</a></li>
|
||||
<t t-foreach="template.quote_line" t-as="line">
|
||||
<li><a t-att-href="'#%s'% line.id" data-toggle="tab"><t t-raw="line.product_id.name_template"/> </a></li>
|
||||
</t>
|
||||
<li><a href="#templateterms" data-toggle="tab">Terms & Conditions</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-8 tab-content">
|
||||
<div id="template_introduction" t-field="template.website_description"/>
|
||||
|
||||
<t t-foreach="template.quote_line" t-as="line">
|
||||
<section class="tab-pane" t-att-id="line.id">
|
||||
<div t-field="line.website_description" class="oe_structure"/>
|
||||
</section>
|
||||
</t>
|
||||
<section id="templateterms" class="tab-pane">
|
||||
<div class="container panel panel-default">
|
||||
<div class="row panel-body">
|
||||
<div class="text-center">
|
||||
<h2 class="page-header">Terms & Conditions</h2>
|
||||
<p class="lead" t-field="template.note"/>
|
||||
</div>
|
||||
<t t-call="website.layout">
|
||||
<t t-set="head">
|
||||
<script type="text/javascript" src="/website_quotation/static/src/js/website_quotation.js"></script>
|
||||
<link rel='stylesheet' href='/website_quotation/static/src/css/website_quotation.css'/>
|
||||
<t t-raw="head or ''"/>
|
||||
</t>
|
||||
<body data-spy="scroll" data-target=".navspy">
|
||||
<div class="container">
|
||||
<div class="row mt16">
|
||||
<div class="col-md-3">
|
||||
<div class="bs-sidebar">
|
||||
<div class="hidden-print navspy" role="complementary">
|
||||
<ul class="nav bs-sidenav" data-id="quote_sidebar">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<div id="template_introduction" t-field="template.website_description"/>
|
||||
<t t-foreach="template.quote_line" t-as="line"/>
|
||||
<div class="oe_structure"/>
|
||||
<section id="terms" class="container" t-if="template.note">
|
||||
<h2 class="page-header">Terms & Conditions</h2>
|
||||
<p t-field="template.note"/>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</body>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
</data>
|
||||
|
|
|
@ -40,10 +40,8 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Sale Quotation Template" version="7.0">
|
||||
<header>
|
||||
<button string="Edit Template" type="object" name="open_template" class="oe_highlight"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<button string="Edit Template" type="object" name="open_template" class="oe_link oe_right"/>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1>
|
||||
|
|
Loading…
Reference in New Issue