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.
59 lines
2.3 KiB
59 lines
2.3 KiB
# -*- coding: utf-8 -*-
|
|
# © 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from openerp import models, fields, api
|
|
|
|
|
|
class AccountMove(models.Model):
|
|
_inherit = 'account.move'
|
|
|
|
move_type = fields.Selection(
|
|
string="Move type", selection=[
|
|
('other', 'Other'),
|
|
('liquidity', 'Liquidity'),
|
|
('receivable', 'Receivable'),
|
|
('receivable_refund', 'Receivable refund'),
|
|
('payable', 'Payable'),
|
|
('payable_refund', 'Payable refund'),
|
|
], compute='_compute_move_type', store=True, readonly=True)
|
|
|
|
@api.multi
|
|
@api.depends('line_ids.account_id.internal_type', 'line_ids.balance')
|
|
def _compute_move_type(self):
|
|
sequence = (
|
|
("liquidity", lambda balance: "liquidity"),
|
|
("payable", lambda balance: ('payable' if balance < 0
|
|
else 'payable_refund')),
|
|
("receivable", lambda balance: ('receivable' if balance > 0
|
|
else 'receivable_refund')),
|
|
(False, lambda balance: "other"),
|
|
)
|
|
chunked_self = (
|
|
self[i:i + models.PREFETCH_MAX]
|
|
for i in range(0, len(self), models.PREFETCH_MAX)
|
|
)
|
|
for chunk in chunked_self:
|
|
move_ids = set(chunk.ids)
|
|
for internal_type, criteria in sequence:
|
|
if not move_ids:
|
|
break
|
|
# Find balances of the expected type for this move
|
|
domain = [
|
|
("move_id", "in", list(move_ids)),
|
|
]
|
|
if internal_type:
|
|
domain += [
|
|
("account_id.internal_type", "=", internal_type),
|
|
]
|
|
balances = self.env["account.move.line"].read_group(
|
|
domain=domain,
|
|
fields=["move_id", "balance"],
|
|
groupby=["move_id"],
|
|
)
|
|
for balance in balances:
|
|
move = self.browse(balance["move_id"][0])
|
|
# Discard the move for next searches
|
|
move_ids.discard(move.id)
|
|
# Update its type
|
|
move.move_type = criteria(balance["balance"])
|