[FIX] access right with sale with event crashed [NEW] website_sale_delivery module
bzr revid: fp@openerp.com-20131116224306-7is2hawhhpzazie3
This commit is contained in:
parent
77e50c6aa6
commit
b61ac1998e
|
@ -32,7 +32,7 @@ You can define your own carrier and delivery grids for prices. When creating
|
|||
invoices from picking, OpenERP is able to add and compute the shipping line.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['sale', 'purchase', 'stock'],
|
||||
'depends': ['sale', 'stock'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'delivery_report.xml',
|
||||
|
|
|
@ -23,7 +23,15 @@ import time
|
|||
from openerp.osv import fields,osv
|
||||
from openerp.tools.translate import _
|
||||
|
||||
# Overloaded sale_order to manage carriers :
|
||||
class sale_order_line(osv.osv):
|
||||
_inherit = 'sale.order.line'
|
||||
_columns = {
|
||||
'is_delivery':fields.boolean("Is a Delivery"),
|
||||
}
|
||||
_defaults = {
|
||||
'is_delivery': False
|
||||
}
|
||||
|
||||
class sale_order(osv.osv):
|
||||
_inherit = 'sale.order'
|
||||
_columns = {
|
||||
|
@ -42,12 +50,20 @@ class sale_order(osv.osv):
|
|||
result.update(carrier_id=order.carrier_id.id)
|
||||
return result
|
||||
|
||||
def _delivery_unset(self, cr, uid, order, context=None):
|
||||
for line in order.order_line:
|
||||
if line.is_delivery:
|
||||
self.pool.get('sale.order.line').unlink(cr, uid, [line.id], context=context)
|
||||
return True
|
||||
|
||||
def delivery_set(self, cr, uid, ids, context=None):
|
||||
order_obj = self.pool.get('sale.order')
|
||||
line_obj = self.pool.get('sale.order.line')
|
||||
grid_obj = self.pool.get('delivery.grid')
|
||||
carrier_obj = self.pool.get('delivery.carrier')
|
||||
acc_fp_obj = self.pool.get('account.fiscal.position')
|
||||
for order in self.browse(cr, uid, ids, context=context):
|
||||
self._delivery_unset(cr, uid, order, context=context)
|
||||
for order in self.browse(cr, uid, ids, context=context):
|
||||
grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id)
|
||||
if not grid_id:
|
||||
|
@ -70,7 +86,8 @@ class sale_order(osv.osv):
|
|||
'product_id': grid.carrier_id.product_id.id,
|
||||
'price_unit': grid_obj.get_price(cr, uid, grid.id, order, time.strftime('%Y-%m-%d'), context),
|
||||
'tax_id': [(6,0,taxes_ids)],
|
||||
'type': 'make_to_stock'
|
||||
'type': 'make_to_stock',
|
||||
'is_delivery': True
|
||||
})
|
||||
#remove the value of the carrier_id field on the sale order
|
||||
return self.write(cr, uid, ids, {'carrier_id': False}, context=context)
|
||||
|
|
|
@ -39,6 +39,10 @@ class sale_order(osv.osv):
|
|||
},
|
||||
}
|
||||
|
||||
# Hook for website_sale to inherit (website_sale_delivery)
|
||||
def _get_website_data(self, cr, uid, order, context):
|
||||
return {}
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if not default:
|
||||
default = {}
|
||||
|
|
|
@ -35,10 +35,6 @@ from dateutil.relativedelta import relativedelta
|
|||
from openerp import tools
|
||||
import urllib
|
||||
|
||||
|
||||
Ecommerce.domain += [('product_variant_ids.event_ticket_ids', '=', False), ('event_ok', '=', False)]
|
||||
|
||||
|
||||
class website_event(http.Controller):
|
||||
@website.route(['/event/', '/event/page/<int:page>/'], type='http', auth="public", multilang=True)
|
||||
def events(self, page=1, **searches):
|
||||
|
|
|
@ -347,6 +347,7 @@ class Ecommerce(http.Controller):
|
|||
domain = [('id', 'in', ids or [0] )] + domain
|
||||
|
||||
step = 20
|
||||
print '**', domain
|
||||
product_count = len(product_obj.search(request.cr, request.uid, domain, context=request.context))
|
||||
pager = request.website.pager(url="/shop/", total=product_count, page=page, step=step, scope=7, url_args=post)
|
||||
|
||||
|
@ -711,8 +712,9 @@ class Ecommerce(http.Controller):
|
|||
|
||||
values = {
|
||||
'partner': False,
|
||||
'order': order
|
||||
'order': order,
|
||||
}
|
||||
values.update( request.registry.get('sale.order')._get_website_data(request.cr, request.uid, order, request.context) )
|
||||
|
||||
payment_obj = request.registry.get('portal.payment.acquirer')
|
||||
payment_ids = payment_obj.search(request.cr, SUPERUSER_ID, [('visible', '=', True)], context=request.context)
|
||||
|
|
|
@ -380,7 +380,7 @@
|
|||
</ul>
|
||||
<h1 class="mb32">Shopping Cart</h1>
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-1 oe_mycart">
|
||||
<div class="col-md-8 col-sm-9 oe_mycart">
|
||||
<div t-if="not website_sale_order or not website_sale_order.order_line" class="well well-lg">
|
||||
Your cart is empty!
|
||||
</div>
|
||||
|
@ -473,7 +473,7 @@
|
|||
<a t-if="website_sale_order and website_sale_order.order_line" href="/shop/checkout/" class="btn btn-primary pull-right mb32">Process Checkout <span class="icon-long-arrow-right"/></a>
|
||||
<div class="oe_structure"/>
|
||||
</div>
|
||||
<div class="col-md-3 text-muted" id="right_column">
|
||||
<div class="col-lg-3 col-lg-offset-1 col-sm-3 text-muted" id="right_column">
|
||||
<h4>Policies</h4>
|
||||
<ul class="list-unstyled mb32">
|
||||
<li>☑ 30-days money-back guarantee</li>
|
||||
|
@ -804,7 +804,7 @@
|
|||
</ul>
|
||||
<h1 class="mb32">Validate Order</h1>
|
||||
<div class="row">
|
||||
<div class="col-md-8 oe_mycart">
|
||||
<div class="col-lg-8 col-sm-9 oe_mycart">
|
||||
<table class='table table-striped table-condensed' id="mycart_products" t-if="website_sale_order and website_sale_order.order_line">
|
||||
<colgroup>
|
||||
<col width="80"/>
|
||||
|
@ -857,7 +857,7 @@
|
|||
}'/></h3></th>
|
||||
</tr>
|
||||
<tr class="text-muted">
|
||||
<td><abbr title="Taxes may be updated after providing shipping address">Incl. Taxes:</abbr></td>
|
||||
<td>Incl. Taxes:</td>
|
||||
<td class="text-right"><span t-field="website_sale_order.amount_tax" t-field-options='{
|
||||
"widget": "monetary",
|
||||
"display_currency": "website.pricelist_id.currency_id"
|
||||
|
@ -868,7 +868,7 @@
|
|||
<div class="clearfix"/>
|
||||
<div class="oe_structure"/>
|
||||
</div>
|
||||
<div class="col-md-3 col-md-offset-1 text-muted" id="right_column">
|
||||
<div class="col-lg-3 col-lg-offset-1 col-sm-3 text-muted" id="right_column">
|
||||
<h4>Bill To:</h4>
|
||||
<div t-field="website_sale_order.partner_invoice_id"/>
|
||||
<div>
|
||||
|
@ -884,12 +884,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="js_payment mb64">
|
||||
<p>Select your payment method:</p>
|
||||
<div class="js_payment mb64" id="js_payment">
|
||||
<p>Payment method:</p>
|
||||
<div>
|
||||
<t t-foreach="payments or []" t-as="payment">
|
||||
<label>
|
||||
<input t-att-value="payment.id" type="radio" name="payment_type"/> <t t-esc="payment.name"/>
|
||||
<input t-att-value="payment.id" type="radio" name="payment_type"/> <span t-field="payment.name"/>
|
||||
</label>
|
||||
</t>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
import models
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
'name': 'eCommerce Delivery Methods',
|
||||
'category': 'Website',
|
||||
'summary': 'Add delivery costs to sales',
|
||||
'version': '1.0',
|
||||
'description': """
|
||||
Delivery Costs
|
||||
==============
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['website_sale', 'delivery'],
|
||||
'data': [
|
||||
'views/website_sale_delivery.xml',
|
||||
'views/website_sale_delivery_view.xml',
|
||||
],
|
||||
'demo': [],
|
||||
'qweb': [],
|
||||
'installable': True,
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
import sale_order
|
|
@ -0,0 +1,37 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from openerp.osv import orm, fields
|
||||
|
||||
class delivery_carrier(orm.Model):
|
||||
_inherit = 'delivery.carrier'
|
||||
_columns = {
|
||||
'website_published': fields.boolean('Available in the website'),
|
||||
'website_description': fields.text('Description for the website'),
|
||||
}
|
||||
_defaults = {
|
||||
'website_published': True
|
||||
}
|
||||
|
||||
class sale_order(orm.Model):
|
||||
_inherit = 'sale.order'
|
||||
def _get_website_data(self, cr, uid, order, context=None):
|
||||
|
||||
# We need a delivery only if we have stockable products
|
||||
todo = False
|
||||
for line in order.order_line:
|
||||
if line.product_id.type in ('consu','product'):
|
||||
todo = True
|
||||
if not todo: return {'deliveries': []}
|
||||
|
||||
carrier_obj = self.pool.get('delivery.carrier')
|
||||
dids = carrier_obj.search(cr, uid, [], context=context)
|
||||
context['order_id'] = order.id
|
||||
deliveries = carrier_obj.browse(cr, uid, dids, context=context)
|
||||
|
||||
# By default, select the first carrier
|
||||
if not order.carrier_id and dids:
|
||||
self.pool.get('sale.order').write(cr, uid, [order.id], {'carrier_id': dids[0]}, context=context)
|
||||
|
||||
# recompute delivery costs
|
||||
self.pool.get('sale.order').delivery_set(cr, uid, [order.id], context=context)
|
||||
return {'deliveries': deliveries}
|
|
@ -0,0 +1,24 @@
|
|||
$(document).ready(function () {
|
||||
|
||||
// $('.js_nav_month a:first').on('click', function (e) {
|
||||
// e.preventDefault();
|
||||
// var $ul = $(this).next("ul");
|
||||
// if (!$ul.find('li').length) {
|
||||
// // TODO: Why POST? (to pass the domain) A GET would be more appropriate...
|
||||
// // This should be done server side anyway...
|
||||
// $.post('/blog/nav', {'domain': $(this).data("domain")}, function (result) {
|
||||
// var blog_id = +window.location.pathname.split("/").pop();
|
||||
// $(JSON.parse(result)).each(function () {
|
||||
// var $li = $($.parseHTML(this.fragment));
|
||||
// if (blog_id == this.id) $li.addClass("active");
|
||||
// if (!this.website_published) $li.find('a').css("color", "red");
|
||||
// $ul.append($li);
|
||||
// });
|
||||
|
||||
// });
|
||||
// } else {
|
||||
// $ul.toggle();
|
||||
// }
|
||||
// });
|
||||
|
||||
});
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<template id="delivery" name="Delivery Costs" inherit_id="website_sale.payment">
|
||||
<xpath expr="//t[@t-set='head']" position="inside">
|
||||
<script type="text/javascript" src="/website_sale_delivery/static/src/js/website_sale_delivery.js"></script>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='js_payment']" position="before">
|
||||
|
||||
<p>Choose Your Delivery method:</p>
|
||||
<ul class="list-unstyled">
|
||||
<li t-foreach="deliveries" t-as="delivery">
|
||||
<label>
|
||||
<input t-att-value="delivery.id" type="radio" name="delivery_type"/>
|
||||
<span t-field="delivery.name"/>
|
||||
<span class="badge" t-field="delivery.price"/>
|
||||
<!-- TODO: add monetary widget -->
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="ir.ui.view" id="view_delivery_carrier_form">
|
||||
<field name="name">delivery.carrier.website.form</field>
|
||||
<field name="model">delivery.carrier</field>
|
||||
<field name="inherit_id" ref="delivery.view_delivery_carrier_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='general']" position="after">
|
||||
<group name="website">
|
||||
<field name="website_published"/>
|
||||
<field name="website_description" attrs="{'invisible':[('website_published', '=', False)]}"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
Loading…
Reference in New Issue