Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
3 Trả lời
5992 Lượt xem

Hi all,

I'm trying to show the default_code of a product to my final PDF file. But i'm facing to a new language and software, i'm coming from PHP/Mysql. I just want to populate the sale_order_line.reference, then use my field in my report like line.reference.

And my database field is still empty...

Here is my code "sale_order_line_rdp.py" :

from openerp.osv import osv, fields

class sale_order_line_rdp(osv.osv):
    _inherit = "sale.order.line"

    _columns = {
            'reference':fields.char('Reference', required=False, readonly=False)
    }

    def sale_order_line_reference(self, cr, uid, line, account_id=False, context=None):
        res = super('sale_order_line', self)._prepare_order_line_invoice_line(cr, uid, line, account_id=account_id, context=context)
        product_obj = self.pool.get('product.product')
        product = product_obj.search(cr, uid, line, context=context)
        res.update({'reference': product.default_code})
        return res

sale_order_line_rdp()

If anyone can help me please!

Ảnh đại diện
Huỷ bỏ

Do you have any run-time errors?

Tác giả

No error appear unfortunately...

Because i don't write my .search() like you. I will post an answer you could try. If she is'nt good, i will delete her. But before, can you say to me : What is the line variable ? A list ? Just an id ? The id of what ?

Tác giả

Thanks for your answer, i just want to retreive the default internal Reference of a product. Default it's a char field. The field "default_code" in table product.product basic table in database.

I'm ok with the field "default_code", my question was about the line variable here : product_obj.search(cr, uid, line, context=context).

Câu trả lời hay nhất

I am having trouble with this.

I want to add another column to the quotation report that get the value from internal reference. i tried using [[ format(default_code) ]]

but can't seem to get it to work. can someone help me please

Ảnh đại diện
Huỷ bỏ
Tác giả Câu trả lời hay nhất

The line for me was the same thing what in sale.py. I feel i'm not understanding completely the OpenERP framework...

Not working with your code...

But you point me to the line variable. I changed my code now is:

    id_product = res['product_id']
    product_obj = self.pool.get('product.product')
    product = product_obj.search(cr, uid, [('id','=', id_product)])
    res.update({'reference': product.default_code})

The same thing... Nothing...

EDIT I finally find a solution!

Here my new code (not very clean but it work...)

*sale.py*    
from openerp.osv import osv, fields

class sale_order_line(osv.Model):
    _inherit = _name = "sale.order.line"

    _columns = {
            'reference':fields.char('Reference', required=False, readonly=False)
    }

    def product_id_change(self, cr, uid, ids, pricelist, product, qty=0,
                          uom=False, qty_uos=0, uos=False, name='', partner_id=False,
                          lang=False, update_tax=True, date_order=False, packaging=False, fiscal_position=False, flag=False, reference='', context=None):
        if not product:
            return {'value': {'th_weight': 0,
                'product_uos_qty': qty}, 'domain': {'product_uom': [],
                   'product_uos': []}}
        context = {'lang': lang, 'partner_id': partner_id}
        context_partner = {'lang': lang, 'partner_id': partner_id}
        product_obj = self.pool.get('product.product').browse(cr, uid, product, context=context_partner)

        res = super(sale_order_line, self).product_id_change(cr, uid, ids, pricelist, product, qty=qty,
                                                             uom=uom, qty_uos=qty_uos, uos=uos, name=name, partner_id=partner_id,
                                                             lang=lang, update_tax=update_tax, date_order=date_order, packaging=packaging, fiscal_position=fiscal_position, flag=flag, context=context)

        res['value'].update({'reference': product_obj.default_code or False})
        return res

sale_order_line()

class sale_order(osv.Model):
    _name = 'sale.order'
    _inherit = 'sale.order'

    def _prepare_invoice(self, cr, uid, order, line, context=None):
        res = super(sale_order, self)._prepare_invoice(cr, uid, order=order, line=line, context=context)
        res['reference'] = line.reference
        return res

sale_order()

*sale_view.xml*
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>
        <record id="view_order_reference_form_change" model="ir.ui.view">
            <field name="name">sale.order.form.sale.reference</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
                <xpath expr="//page[@string='Order Lines']/field[@name='order_line']/form[@string='Sales Order Lines']/group/group/field[@name='product_id']" position="replace">
                    <field name="reference"
                    context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}"
                    groups="base.group_user"
                    on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, product_uos_qty, product_uos, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False,reference, context)"/>
                </xpath>

            </field>
        </record>
        <record id="view_order_image_form_inherit" model="ir.ui.view">
            <field name="name">sale.order.form.sale.image</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
                <xpath expr="//page[@string='Order Lines']/field[@name='order_line']/form[@string='Sales Order Lines']/group/group/field[@name='product_id']" position="before">
                    <field name="reference"/>
                </xpath> 

                <xpath expr="//page[@string='Order Lines']/field[@name='order_line']/tree[@string='Sales Order Lines']/field[@name='price_subtotal']" position="before">
                    <field name="reference"/>
                </xpath>


            </field>
         </record>
    </data>
</openerp>

thanks for your patience

Ảnh đại diện
Huỷ bỏ

id_product return something ? (Try with "print id_product" to know that)

Tác giả

Tonight i going to install a debug environment in a VM with eclipse or aptana, because all my tests are in a Windows environment. I return after to explain more

Perfect ! Can you mark this question as close ?

Tác giả

I can't mark this question as close...

Me too, i don't have enought karma. By default, you can edit your question and add [Closed].

Câu trả lời hay nhất

Could you try this :

class sale_order_line_rdp(osv.osv):
    _inherit = "sale.order.line"

    _columns = {
            'reference':fields.char('Reference', required=False, readonly=False)
    }

    def sale_order_line_reference(self, cr, uid, line, account_id=False, context=None):
        res = super('sale_order_line', self)._prepare_order_line_invoice_line(cr, uid, line, account_id=account_id, context=context)
        product_obj = self.pool.get('product.product')
        product = product_obj.search(cr, uid, [('TheFieldCorrespondingInProduct_product','=',line)])
        res.update({'reference': product.default_code})
        return res

sale_order_line_rdp()

The edit is in the .search()

Ảnh đại diện
Huỷ bỏ