[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:
Fabien Pinckaers 2013-11-16 23:43:06 +01:00
parent 77e50c6aa6
commit b61ac1998e
13 changed files with 164 additions and 16 deletions

View File

@ -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',

View File

@ -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)

View File

@ -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 = {}

View File

@ -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):

View File

@ -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)

View File

@ -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>&#9745; 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>

View File

@ -0,0 +1 @@
import models

View File

@ -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,
}

View File

@ -0,0 +1 @@
import sale_order

View File

@ -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}

View File

@ -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();
// }
// });
});

View File

@ -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>

View File

@ -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>