Skip to Content
เมนู
คุณต้องลงทะเบียนเพื่อโต้ตอบกับคอมมูนิตี้
คำถามนี้ถูกตั้งค่าสถานะ
2 ตอบกลับ
2091 มุมมอง

Hello guys. Thanks a lot for your help. I'm new at Odoo and I need your support :)

There's a better way to code this?


class AccountMove(models.Model):
_inherit = 'account.move'


business_unit_id = fields.Many2one('business.unit', compute='get_sale_order', string='Business Unit')
order_type_id = fields.Many2one('order.type', compute='get_sale_order')
client_order_ref = fields.Char(compute='get_sale_order', readonly=True)

@api.depends('invoice_origin')
def get_sale_order(self):
for move in self:
sale_order = self.env['sale.order'].search([
('name', '=', move.invoice_origin)
])

move.client_order_ref = sale_order.client_order_ref
move.business_unit_id = sale_order.business_unit_id.id

As you can see, there are 3 computes. Theres is a better way to write this code?

Thanks in advance :)




อวตาร
ละทิ้ง
คำตอบที่ดีที่สุด

You should not do that, the "invoice_origin" is a Char that can have multiple SO names.
sale.order < - > account.move is a many2many relation, for example:
From 5 sales you can generate only one invoice, and from 1 sale you can generate 5 invoices

In my opinion you should override the "_prepare_invoice" from sale.order and "_prepare_invoice_values" from sale.advance.payment.inv

อวตาร
ละทิ้ง
คำตอบที่ดีที่สุด

In other option, You can use onchange of 'invoice_origin' and set value of all three fields but without compute it will not be read only. So, you have to set readonly for those fields if you want.

อวตาร
ละทิ้ง
Related Posts ตอบกลับ มุมมอง กิจกรรม
1
มี.ค. 23
2532
0
พ.ย. 18
2936
1
ม.ค. 17
5157
1
ก.ย. 22
2780
1
ธ.ค. 19
8030