/usr/lib/python2.7/dist-packages/trytond/modules/account_credit_limit/party.py is in tryton-modules-account-credit-limit 3.4.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
from trytond.model import fields
from trytond.pool import Pool, PoolMeta
from trytond.transaction import Transaction
from trytond.pyson import Eval
__all__ = ['Party']
__metaclass__ = PoolMeta
class Party:
__name__ = 'party.party'
credit_amount = fields.Function(fields.Numeric('Credit Amount',
digits=(16, Eval('credit_limit_digits', 2)),
depends=['credit_limit_digits']),
'get_credit_amount')
credit_limit_amount = fields.Property(fields.Numeric(
'Credit Limit Amount',
digits=(16, Eval('credit_limit_digits', 2)),
depends=['credit_limit_digits']))
credit_limit_digits = fields.Function(fields.Integer('Currency Digits'),
'get_credit_limit_digits')
@classmethod
def __setup__(cls):
super(Party, cls).__setup__()
cls._error_messages.update({
'credit_limit_amount': (
'"%s" has reached the credit limit amount (%s)'),
'credit_limit_dunning': (
'"%s" has reached the dunning credit limit (%s)'),
})
@classmethod
def get_credit_amount(cls, parties, name):
return {p.id: p.receivable for p in parties}
@staticmethod
def _credit_limit_to_lock():
'Return models to lock when checking credit limit'
return ['account.move.line']
def check_credit_limit(self, amount, origin=None):
'''
Check if amount will not reach credit limit for party
If origin is set and user is in group credit_limit then a warning will
be raised
'''
pool = Pool()
ModelData = pool.get('ir.model.data')
try:
Dunning = pool.get('account.dunning')
except KeyError:
Dunning = None
User = pool.get('res.user')
Group = pool.get('res.group')
if self.credit_limit_amount is None:
return
def in_group():
group = Group(ModelData.get_id('account_credit_limit',
'group_credit_limit'))
transaction = Transaction()
user_id = transaction.user
if user_id == 0:
user_id = transaction.context.get('user', user_id)
if user_id == 0:
return True
user = User(user_id)
return origin and group in user.groups
for model in self._credit_limit_to_lock():
Model = pool.get(model)
Transaction().cursor.lock(Model._table)
if self.credit_limit_amount < self.credit_amount + amount:
if not in_group():
self.raise_user_error('credit_limit_amount',
(self.rec_name, self.credit_limit_amount))
warning_name = 'credit_limit_amount_%s' % origin
self.raise_user_warning(warning_name, 'credit_limit_amount',
(self.rec_name, self.credit_limit_amount))
if Dunning:
dunnings = Dunning.search([
('party', '=', self.id),
('level.credit_limit', '=', True),
('blocked', '!=', True),
])
if dunnings:
dunning = dunnings[0]
if not in_group():
self.raise_user_error('credit_limit_dunning',
(self.rec_name, dunning.rec_name))
warning_name = 'credit_limit_dunning_%s' % origin
self.raise_user_warning(warning_name, 'credit_limit_dunning',
(self.rec_name, dunning.rec_name))
def get_credit_limit_digits(self, name):
pool = Pool()
Company = pool.get('company.company')
company_id = Transaction().context.get('company')
if not company_id:
return 2
company = Company(company_id)
return company.currency.digits
|