Public release from ruodoo-project: 19.0 - 2026-11-01 22:52:25 UTC
This commit is contained in:
58
rsbu_mapping/models/rsbu_operation_matrix.py
Normal file
58
rsbu_mapping/models/rsbu_operation_matrix.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class RsbuOperationMatrix(models.Model):
|
||||
"""Матрица связности: подбор шаблона по признакам документа."""
|
||||
_name = 'rsbu.operation.matrix'
|
||||
_description = 'РСБУ — Матрица связности операций'
|
||||
_order = 'priority, id'
|
||||
_check_company_auto = True
|
||||
|
||||
name = fields.Char(string='Наименование правила', required=True)
|
||||
doc_kind = fields.Selection(
|
||||
selection=[
|
||||
# account.move
|
||||
('out_invoice', 'Счёт покупателю (реализация)'),
|
||||
('out_refund', 'Возврат покупателю (кредит-нота)'),
|
||||
('in_invoice', 'Счёт поставщика'),
|
||||
('in_refund', 'Возврат поставщику'),
|
||||
# account.payment
|
||||
('payment_inbound', 'Входящий платёж'),
|
||||
('payment_outbound', 'Исходящий платёж'),
|
||||
],
|
||||
string='Тип документа', required=True)
|
||||
has_advance = fields.Selection(
|
||||
selection=[('any', 'Не важно'), ('yes', 'Есть аванс'),
|
||||
('no', 'Без аванса')],
|
||||
string='Признак аванса', default='any', required=True)
|
||||
partner_kind = fields.Selection(
|
||||
selection=[('any', 'Не важно'), ('customer', 'Клиент'),
|
||||
('supplier', 'Поставщик')],
|
||||
string='Тип контрагента', default='any', required=True,
|
||||
help='Для платежей: различает клиента и поставщика при '
|
||||
'одинаковом направлении платежа.')
|
||||
template_id = fields.Many2one(
|
||||
'rsbu.operation.template', string='Шаблон РСБУ', required=True,
|
||||
check_company=True)
|
||||
priority = fields.Integer(string='Приоритет', default=10)
|
||||
company_id = fields.Many2one(
|
||||
'res.company', string='Компания',
|
||||
default=lambda self: self.env.company)
|
||||
active = fields.Boolean(default=True)
|
||||
|
||||
def _match(self, doc):
|
||||
"""Подходит ли правило документу."""
|
||||
self.ensure_one()
|
||||
doc_kind = doc._rsbu_doc_kind()
|
||||
if self.doc_kind != doc_kind:
|
||||
return False
|
||||
if self.has_advance != 'any':
|
||||
has_adv = doc._rsbu_has_advance()
|
||||
if self.has_advance == 'yes' and not has_adv:
|
||||
return False
|
||||
if self.has_advance == 'no' and has_adv:
|
||||
return False
|
||||
if self.partner_kind != 'any':
|
||||
if self.partner_kind != doc._rsbu_partner_kind():
|
||||
return False
|
||||
return True
|
||||
Reference in New Issue
Block a user