diff --git a/addons/delivery/sale.py b/addons/delivery/sale.py index f43eb1c0a30..5b9f6fbf595 100644 --- a/addons/delivery/sale.py +++ b/addons/delivery/sale.py @@ -20,22 +20,55 @@ ############################################################################## import time -from openerp.osv import fields,osv + +from openerp.addons import decimal_precision +from openerp.addons.sale.sale import sale_order as OriginalSaleOrder +from openerp.osv import fields, osv from openerp.tools.translate import _ + class sale_order_line(osv.osv): _inherit = 'sale.order.line' + _columns = { - 'is_delivery':fields.boolean("Is a Delivery"), + 'is_delivery': fields.boolean("Is a Delivery"), } + _defaults = { 'is_delivery': False } -class sale_order(osv.osv): + +class sale_order(osv.Model): _inherit = 'sale.order' + + def _amount_all(self, cr, uid, ids, field_name, arg, context=None): + res = super(sale_order, self)._amount_all(cr, uid, ids, field_name, arg, context=context) + Currency = self.pool.get('res.currency') + for order in self.browse(cr, uid, ids, context=context): + line_amount = sum([line.price_subtotal for line in order.order_line if line.is_delivery]) + currency = order.pricelist_id.currency_id + res[order.id]['amount_delivery'] = Currency.round(cr, uid, currency, line_amount) + return res + + def _get_order(self, cr, uid, ids, context=None): + result = {} + for line in self.pool.get('sale.order.line').browse(cr, uid, ids, context=context): + result[line.order_id.id] = True + return result.keys() + _columns = { - 'carrier_id':fields.many2one("delivery.carrier", "Delivery Method", help="Complete this field if you plan to invoice the shipping based on picking."), + 'carrier_id': fields.many2one( + "delivery.carrier", string="Delivery Method", + help="Complete this field if you plan to invoice the shipping based on picking."), + 'amount_delivery': fields.function( + _amount_all, type='float', digits_compute=decimal_precision.get_precision('Account'), string='Delivery Amount', + store={ + 'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10), + 'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10), + }, + multi='sums', help="The amount without tax.", track_visibility='always' + ), } def onchange_partner_id(self, cr, uid, ids, part, context=None): @@ -57,7 +90,6 @@ class sale_order(osv.osv): 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') @@ -85,14 +117,10 @@ class sale_order(osv.osv): 'product_uom': grid.carrier_id.product_id.uom_id.id, '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)], + 'tax_id': [(6, 0, taxes_ids)], '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) - #return {'type': 'ir.actions.act_window_close'} action reload? - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - + # remove the value of the carrier_id field on the sale order + # TDE NOTE: why removing it ?? seems weird + # return self.write(cr, uid, ids, {'carrier_id': False}, context=context) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 0e3fedb1814..914a736abce 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -589,8 +589,7 @@ class Ecommerce(http.Controller): # alread a transaction: forward to confirmation tx = context.get('website_sale_transaction') if tx and not tx.state == 'draft': - print 'embetatn' - # return request.redirect('/shop/confirmation/%s' % order.id) + return request.redirect('/shop/confirmation/%s' % order.id) partner_id = False shipping_partner_id = False diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 1b783dd9a83..7a899774598 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -22,7 +22,8 @@ from openerp import SUPERUSER_ID from openerp.osv import osv, fields -class sale_order(osv.Model): + +class SaleOrder(osv.Model): _inherit = "sale.order" _columns = { @@ -30,17 +31,21 @@ class sale_order(osv.Model): } def _get_website_data(self, cr, uid, order, context): - return {} + return { + 'partner': order.partner_id.id, + 'order': order + } def get_total_quantity(self, cr, uid, ids, context=None): order = self.browse(cr, uid, ids[0], context=context) return int(sum(l.product_uom_qty for l in (order.order_line or []))) -class sale_order_line(osv.Model): +class SaleOrderLine(osv.Model): _inherit = "sale.order.line" def _recalculate_product_values(self, cr, uid, ids, product_id=0, context=None): + # TDE FIXME: seems to be defined several times -> fix me ? if context is None: context = {} user_obj = self.pool.get('res.users') diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index 1e69db2c684..5aee67697cf 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -467,13 +467,13 @@ - +

Total:

- + Taxes: +

+ }'/> + - + Taxes: + + + + Delivery: + + + + + + - - -

Choose Your Delivery method:

-
    -
  • - -
  • -
-
- +
+

Choose your Delivery Method

+
+
    +
  • + +
  • +
+
+
+ +
+
- +