This question has been flagged
5871 Views

Hi.

for giving discount as fixed amount in sales order line the below mentoined code is used

in .PY file

class sale_order_line(osv.osv):

_inherit = 'sale.order.line'
def _amount_line(self, cr, uid, ids, field_name, arg, context=None):
    tax_obj = self.pool.get('account.tax')
    cur_obj = self.pool.get('res.currency')
    res = {}
    if context is None:
        context = {}
    for line in self.browse(cr, uid, ids, context=context):
        if line.amount_discount:
            price = line.price_unit - (line.discount or 0.0)
            taxes = tax_obj.compute_all(cr, uid, line.tax_id, price, line.product_uom_qty, line.product_id, line.order_id.partner_id)
            res[line.id] = taxes['total']
        if line.invoice_ids:
               cur = line.invoice_ids.currency_id
               res[line.id] = cur_obj.round(cr, uid, cur, res[line.id])  
        else:
            price = line.price_unit  * (1 - (line.discount or 0.0) / 100.0)
            taxes = tax_obj.compute_all(cr, uid, line.tax_id, price, line.product_uom_qty, line.product_id, line.order_id.partner_id)
            cur = line.order_id.pricelist_id.currency_id
            res[line.id] = cur_obj.round(cr, uid, cur, taxes['total'])
    return res

_name = 'sale.order.line'
_description = 'Sales Order Line'
_columns = {
 'amount_discount': fields.float('Discount (Amount)', digits_compute= dp.get_precision('Discount')),    
 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', type="float",digits_compute= dp.get_precision('Account'), store=True),   
 'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),    
 'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Discount')),   
 'invoice_ids': fields.many2many('account.invoice', 'sale_order_invoice_rel', 'order_id', 'invoice_id', 'Invoices', readonly=True, ),
        }

sale_order_line()

IN xml file

<openerp>
<data>
 <record id="view_fixed_dis_line" model="ir.ui.view">
    <field name="name">fixed.dis.line</field>
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale.view_order_form"/>
    <field name="arch" type="xml">
                <xpath expr="//field[@name='discount']" position="after">
                <field name ="amount_discount"/>
               </xpath> 
       </field>
 </record>

</data> </openerp>

This module installed succesfully without any error when adding product in the order line , while click on the update button The error will be displayed.

OpenERP Server Error

Client Traceback (most recent call last): File "/opt/openerp/server/openerp/addons/web/http.py", line 204, in dispatch response["result"] = method(self, *self.params) File "/opt/openerp/server/openerp/addons/web/controllers/main.py", line 1128, in call_kw return self._call_kw(req, model, method, args, kwargs) File "/opt/openerp/server/openerp/addons/web/controllers/main.py", line 1120, in _call_kw return getattr(req.session.model(model), method)(args, **kwargs) File "/opt/openerp/server/openerp/addons/web/session.py", line 42, in proxy result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw) File "/opt/openerp/server/openerp/addons/web/session.py", line 30, in proxy_method result = self.session.send(self.service_name, method, *args) File "/opt/openerp/server/openerp/addons/web/session.py", line 103, in send raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info)

Server Traceback (most recent call last): File "/opt/openerp/server/openerp/addons/web/session.py", line 89, in send return openerp.netsvc.dispatch_rpc(service_name, method, args) File "/opt/openerp/server/openerp/netsvc.py", line 292, in dispatch_rpc result = ExportService.getService(service_name).dispatch(method, params) File "/opt/openerp/server/openerp/service/web_services.py", line 626, in dispatch res = fn(db, uid, params) File "/opt/openerp/server/openerp/osv/osv.py", line 188, in execute_kw return self.execute(db, uid, obj, method, *args, *kw or {}) File "/opt/openerp/server/openerp/osv/osv.py", line 131, in wrapper return f(self, dbname, args, *kwargs) File "/opt/openerp/server/openerp/osv/osv.py", line 197, in execute res = self.execute_cr(cr, uid, obj, method, args, *kw) File "/opt/openerp/server/openerp/osv/osv.py", line 185, in execute_cr return getattr(object, method)(cr, uid, args, *kw) File "/opt/openerp/server/openerp/addons/sale_stock/sale_stock.py", line 75, in create order = super(sale_order, self).create(cr, uid, vals, context=context) File "/opt/openerp/server/openerp/addons/sale/sale.py", line 336, in create return super(sale_order, self).create(cr, uid, vals, context=context) File "/opt/openerp/server/openerp/addons/mail/mail_thread.py", line 242, in create thread_id = super(mail_thread, self).create(cr, uid, values, context=context) File "/opt/openerp/server/openerp/osv/orm.py", line 4478, in create self.pool.get(object)._store_set_values(cr, user, ids, fields2, context) File "/opt/openerp/server/openerp/osv/orm.py", line 4627, in _store_set_values result = self._columns[f].get(cr, self, ids, f, SUPERUSER_ID, context=context) File "/opt/openerp/server/openerp/osv/fields.py", line 1133, in get result = self._fnct(obj, cr, uid, ids, name, self._arg, context) File "/opt/openerp/server/openerp/addons/discount/discount.py", line 44, in _amount_line if line.invoice_ids: File "/opt/openerp/server/openerp/osv/orm.py", line 486, in __getattr__ raise AttributeError(e) AttributeError: "Field 'invoice_id' does not exist in object 'browse_record(sale.order.line, 24)'"

How to solve this...........

Avatar
Discard

Facing the same type of error.....any update?