Custom nilai agregasi group by di tree view
Odoo 16

Bismillah,
Assalamu'alaikum Warohmatullah Wabarokatuh,


Di artikel kali ini, insyaAllah saya akan memberikan sedikit tips bagaimana cara custom nilai agregasi group by di tree view.
Contoh kasusnya adalah di laporan valuation yang ditampilkan dalam tree view, untuk field Unit Value akan kita buat isinya menjadi rata - rata.

Seperti yang kita ketahui bahwa fungsi agregasi yang bisa digunakan adalah COUNT, SUM, AVG, MIN dan MAX. Tapi jika kita menggunakan agregasi AVG nilai yang akan keluar masih belum tepat, karena akan ada kemungkanan terbentuk data valuation dengan field unit value-nya 0 yang terbentuk dari adjustment cost atau landed cost sehingga tidak menggambarkan nilai rata - rata yang sebenarnya.

Cara yang bisa kita lakukan adalah membuat nilai dari field unit value ketika digroup by adalah summary dari field value dibagi summary dari field quantity dengan cara overiding method read_group di object stock.valuation.layer, berikut code-nya :

class StockValuationLayer(models.Model):
_inherit = 'stock.valuation.layer'

@api.model
def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
# Tambahkan field 'unit_cost', karena di core default odoo di-remove
fields.append('unit_cost')
res = super().read_group(domain, fields, groupby, offset, limit, orderby, lazy)

# Unit Cost = Value / Quantity dari agregasi summary group by product
for rec in res:
value = rec.get('value')
quantity = rec.get('quantity')
rec['unit_cost'] = 0
if quantity:
rec['unit_cost'] = value / quantity

return res


Berikut hasilnya :


Terima kasih, semoga bermanfaat.
Kahfi
Wassalamu'alaikum Warohmatullah Wabarokatuh










Penggunaan BOT Telegram untuk Integrasi dan Penerapan CRUD di Odoo 16[Module Contact]