44 lines
2.1 KiB
Python
44 lines
2.1 KiB
Python
from odoo import api, fields, models, _
|
||
|
||
|
||
class AccountPayment(models.Model):
|
||
_inherit = 'account.payment'
|
||
|
||
mt_contract_id = fields.Many2one(
|
||
'partner.contract.customer', string=_('Номер договора'),
|
||
compute='_compute_mt_contract_id', store=True, readonly=False,
|
||
help='Договор-основание платежа. Используется для ведения расчётов '
|
||
'с контрагентом в разрезе договора (в т.ч. в РСБУ-слое).')
|
||
|
||
@api.depends('partner_id', 'company_id', 'partner_type')
|
||
def _compute_mt_contract_id(self):
|
||
"""Подставить договор контрагента по умолчанию.
|
||
|
||
Для клиентских платежей — действующий (signed) клиентский договор
|
||
партнёра в рамках компании; для платежей поставщикам — договор с
|
||
поставщиком. Выбранный вручную договор не перезаписываем.
|
||
"""
|
||
Contract = self.env['partner.contract.customer']
|
||
for payment in self:
|
||
if payment.mt_contract_id:
|
||
continue
|
||
if not payment.partner_id:
|
||
payment.mt_contract_id = False
|
||
continue
|
||
partner = payment.partner_id.commercial_partner_id \
|
||
or payment.partner_id
|
||
contract_type = 'customer' if payment.partner_type == 'customer' \
|
||
else 'supplier'
|
||
domain = [
|
||
('partner_id', '=', partner.id),
|
||
('type', '=', contract_type),
|
||
('is_template', '=', False),
|
||
]
|
||
if payment.company_id:
|
||
domain.append(('company_id', '=', payment.company_id.id))
|
||
contract = Contract.search(
|
||
domain + [('state', '=', 'signed')],
|
||
order='date_start desc', limit=1,
|
||
) or Contract.search(domain, order='date_start desc', limit=1)
|
||
payment.mt_contract_id = contract.id if contract else False
|