You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.8 KiB

5 years ago
  1. # Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from odoo import api, fields, models
  4. class AccountMove(models.Model):
  5. _inherit = "account.move"
  6. @api.model
  7. def _selection_financial_type(self):
  8. return [
  9. ("other", "Other"),
  10. ("liquidity", "Liquidity"),
  11. ("receivable", "Receivable"),
  12. ("receivable_refund", "Receivable refund"),
  13. ("payable", "Payable"),
  14. ("payable_refund", "Payable refund"),
  15. ]
  16. financial_type = fields.Selection(
  17. selection="_selection_financial_type",
  18. compute="_compute_financial_type",
  19. store=True,
  20. readonly=True,
  21. )
  22. @api.depends(
  23. "line_ids.account_id.internal_type",
  24. "line_ids.balance",
  25. "line_ids.account_id.user_type_id.type",
  26. )
  27. def _compute_financial_type(self):
  28. def _balance_get(line_ids, internal_type):
  29. return sum(
  30. line_ids.filtered(
  31. lambda x: x.account_id.internal_type == internal_type
  32. ).mapped("balance")
  33. )
  34. for move in self:
  35. internal_types = move.line_ids.mapped("account_id.internal_type")
  36. if "liquidity" in internal_types:
  37. move.financial_type = "liquidity"
  38. elif "payable" in internal_types:
  39. balance = _balance_get(move.line_ids, "payable")
  40. move.financial_type = "payable" if balance < 0 else "payable_refund"
  41. elif "receivable" in internal_types:
  42. balance = _balance_get(move.line_ids, "receivable")
  43. move.financial_type = (
  44. "receivable" if balance > 0 else "receivable_refund"
  45. )
  46. else:
  47. move.financial_type = "other"