from trytond.pool import Pool, PoolMeta from trytond.model.exceptions import AccessError from trytond.i18n import gettext __all__ = ['Account','Move','Line'] class Account(metaclass=PoolMeta): __name__ = 'account.account' @classmethod def __setup__(cls): super(Account, cls).__setup__() cls.party_required.domain = [()] cls.party_required.states = {} class Move(metaclass=PoolMeta): __name__ = 'account.move' @classmethod def create(cls, vlist): pool = Pool() Sequence = pool.get('ir.sequence') Journal = pool.get('account.journal') Account_Configuration = pool.get('account.configuration') configuration = Account_Configuration(1) draft_default = configuration.default_draft_sequence vlist = [x.copy() for x in vlist] for vals in vlist: if not vals.get('number'): journal_id = (vals.get('journal') or Transaction().context.get('journal')) if journal_id: journal = Journal(journal_id) if journal.sequence: vals['number'] = Sequence.get_id(draft_default.id) moves = super(Move, cls).create(vlist) cls.validate_move(moves) return moves class Line(metaclass=PoolMeta): __name__ = 'account.move.line' @classmethod def __setup__(cls): super(Line, cls).__setup__() cls.party.states = {} def check_account(self): if not self.account.type or self.account.closed: raise AccessError( gettext('account.msg_line_closed_account', account=self.account.rec_name)) if self.account.party_required: if bool(self.party) != bool(self.account.party_required): error = 'party_set' if self.party else 'party_required' raise AccessError( gettext('account.msg_line_%s' % error, account=self.account.rec_name, line=self.rec_name))