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',
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 = {
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')
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:
raise osv.except_osv(_('No Grid Available!'), _('No grid matching for this carrier!'))
'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)
},
}
+ # 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 = {}
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):
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)
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)
</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>
<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>
</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"/>
}'/></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"
<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>
</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>
--- /dev/null
+import models
--- /dev/null
+{
+ '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,
+}
--- /dev/null
+import sale_order
--- /dev/null
+# -*- 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}
--- /dev/null
+$(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();
+ // }
+ // });
+
+});
--- /dev/null
+<?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>
--- /dev/null
+<?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>