Pular para o conteúdo
Menu
Esta pergunta foi sinalizada
2 Respostas
3281 Visualizações

Hey! By default, Odoo can automatically create assets from invoice lines. However, it does not pay attention to quantity on the invoice lines. In other words, all the quantity of the same invoice line will be merge into ONE asset. I want odoo to create an asset for each quantity in the invoice line how can we do that. Right now asset create method for odoo is


@api.one
def asset_create(self):
if self.asset_category_id:
vals = {
'name': self.name,
'code': self.invoice_id.number or False,
'category_id': self.asset_category_id.id,
'value': self.price_subtotal_signed,
'partner_id': self.invoice_id.partner_id.id,
'company_id': self.invoice_id.company_id.id,
'currency_id': self.invoice_id.company_currency_id.id,
'date': self.invoice_id.date_invoice,
'invoice_id': self.invoice_id.id,
}
changed_vals = self.env['account.asset.asset'].onchange_category_id_values(vals['category_id'])
vals.update(changed_vals['value'])
asset = self.env['account.asset.asset'].create(vals)
if self.asset_category_id.open_asset:
asset.validate()
return True
Kindly share if you have any suggestion.
Avatar
Cancelar
Autor

Anyone????

Melhor resposta

Hi,

You have to loop on line qunatity field and modify the value field to have the unit.price but in company currency and since there no filed for signed unit price
you will divided the self.price_subtotal_signed field by line qunatity to get unit price signed.

So you will ovveride asset_create as below and you donot need to call the super:


@api.one
def asset_create(self):
for x in range(self.quantity):
if self.asset_category_id:
vals = {
'name': self.name,
'code': self.invoice_id.number or False,
'category_id': self.asset_category_id.id,
'value': self.price_subtotal_signed / self.quantity,
'partner_id': self.invoice_id.partner_id.id,
'company_id': self.invoice_id.company_id.id,
'currency_id': self.invoice_id.company_currency_id.id,
'date': self.invoice_id.date_invoice,
'invoice_id': self.invoice_id.id,
}
changed_vals = self.env['account.asset.asset'].onchange_category_id_values(vals['category_id'])
vals.update(changed_vals['value'])
asset = self.env['account.asset.asset'].create(vals)
if self.asset_category_id.open_asset:
asset.validate()
return True
Avatar
Cancelar
Autor

hey! Thanks for replying.

I have tried your code but it is giving me this error

TypeError: 'float' object cannot be interpreted as an integer

How to fix that sir? Thanks

Autor

Hey man i have fixed this using

for x in numpy.arange(self.quantity):

and it is working now. Thanks for your answer

Publicações relacionadas Respostas Visualizações Atividade
1
jan. 20
5563
2
mai. 19
8653
3
jul. 22
7538
0
nov. 21
2894
0
ago. 20
3794