Files
enterprise-addons/account_budget_purchase/models/purchase_order.py
T

38 lines
1.6 KiB
Python

from odoo import fields, models, api
class PurchaseOrder(models.Model):
_inherit = "purchase.order"
is_above_budget = fields.Boolean('Is Above Budget', compute='_compute_above_budget')
is_analytic = fields.Boolean('Is Analytic', compute='_compute_is_analytic')
@api.depends('order_line.analytic_distribution')
def _compute_is_analytic(self):
for order in self:
order.is_analytic = any(order.order_line.mapped('analytic_distribution'))
@api.depends('order_line.budget_line_ids', 'order_line.price_unit', 'order_line.product_qty', 'order_line.qty_invoiced', 'state')
def _compute_above_budget(self):
for order in self:
uncommitted_amount = sum(
line.price_unit * (line.product_qty - line.qty_invoiced)
for line in order.order_line if line.budget_line_ids
) if order.state not in ('purchase', 'done') else 0
order.is_above_budget = any(
budget.committed_amount + uncommitted_amount > budget.budget_amount
for budget in order.order_line.mapped('budget_line_ids')
)
def action_budget(self):
self.ensure_one()
analytic_account_ids = [
int(account)
for line in self.order_line
for account_ids in (line.analytic_distribution or {})
for account in account_ids.split(',')
]
action = self.env["ir.actions.actions"]._for_xml_id("account_budget.budget_report_action")
action['domain'] = [('auto_account_id', 'in', analytic_account_ids), ('budget_analytic_id.budget_type', '!=', 'revenue')]
return action