+19
-16
@@ -152,11 +152,12 @@ class Move(ModelSQL, ModelView):
|
||||
def default_company():
|
||||
return Transaction().context.get('company')
|
||||
|
||||
@staticmethod
|
||||
def default_period():
|
||||
@classmethod
|
||||
def default_period(cls):
|
||||
Period = Pool().get('account.period')
|
||||
return Period.find(Transaction().context.get('company'),
|
||||
exception=False)
|
||||
company = cls.default_company()
|
||||
period = Period.find(company, exception=False)
|
||||
return period.id if period else None
|
||||
|
||||
@staticmethod
|
||||
def default_state():
|
||||
@@ -385,10 +386,10 @@ class Move(ModelSQL, ModelView):
|
||||
move=self.rec_name))
|
||||
with Transaction().set_context(company=self.company.id):
|
||||
date = Date.today()
|
||||
period_id = Period.find(self.company.id, date=date)
|
||||
period = Period.find(self.company, date=date)
|
||||
default.update({
|
||||
'date': date,
|
||||
'period': period_id,
|
||||
'period': period.id,
|
||||
})
|
||||
if reversal:
|
||||
default['lines.debit'] = lambda data: data['credit']
|
||||
@@ -1561,7 +1562,7 @@ class Line(MoveLineMixin, ModelSQL, ModelView):
|
||||
if not date:
|
||||
with Transaction().set_context(company=company.id):
|
||||
date = Date.today()
|
||||
period_id = Period.find(reconcile_account.company.id, date=date)
|
||||
period = Period.find(reconcile_account.company, date=date)
|
||||
account = None
|
||||
journal = None
|
||||
if writeoff:
|
||||
@@ -1574,7 +1575,7 @@ class Line(MoveLineMixin, ModelSQL, ModelView):
|
||||
move = Move()
|
||||
move.company = company
|
||||
move.journal = journal
|
||||
move.period = period_id
|
||||
move.period = period
|
||||
move.date = date
|
||||
move.description = description
|
||||
|
||||
@@ -1665,11 +1666,13 @@ class OpenJournalAsk(ModelView):
|
||||
('state', '!=', 'close'),
|
||||
])
|
||||
|
||||
@staticmethod
|
||||
def default_period():
|
||||
Period = Pool().get('account.period')
|
||||
return Period.find(Transaction().context.get('company'),
|
||||
exception=False)
|
||||
@classmethod
|
||||
def default_period(cls):
|
||||
pool = Pool()
|
||||
Period = pool.get('account.period')
|
||||
company = Transaction().context.get('company')
|
||||
period = Period.find(company, exception=False)
|
||||
return period.id if period else None
|
||||
|
||||
|
||||
class OpenJournal(Wizard):
|
||||
@@ -2359,7 +2362,7 @@ class GroupLines(Wizard):
|
||||
if not date:
|
||||
with Transaction().set_context(company=company.id):
|
||||
date = Date.today()
|
||||
period = Period.find(company.id, date=date)
|
||||
period = Period.find(company, date=date)
|
||||
|
||||
move = Move()
|
||||
move.company = company
|
||||
@@ -2621,7 +2624,7 @@ class RescheduleLines(Wizard):
|
||||
if not date:
|
||||
with Transaction().set_context(company=company.id):
|
||||
date = Date.today()
|
||||
period = Period.find(company.id, date=date)
|
||||
period = Period.find(company, date=date)
|
||||
|
||||
move = Move()
|
||||
move.company = company
|
||||
@@ -2818,7 +2821,7 @@ class DelegateLines(Wizard):
|
||||
if not date:
|
||||
with Transaction().set_context(company=company.id):
|
||||
date = Date.today()
|
||||
period = Period.find(company.id, date=date)
|
||||
period = Period.find(company, date=date)
|
||||
|
||||
move = Move()
|
||||
move.company = company
|
||||
|
||||
@@ -405,12 +405,13 @@ class CreateMoveTemplate(ModelView):
|
||||
Eval('context', {}).get('company', 0)),
|
||||
])
|
||||
|
||||
@staticmethod
|
||||
def default_period():
|
||||
@classmethod
|
||||
def default_period(cls):
|
||||
pool = Pool()
|
||||
Period = pool.get('account.period')
|
||||
company = Transaction().context.get('company')
|
||||
return Period.find(company, exception=False)
|
||||
period = Period.find(company, exception=False)
|
||||
return period.id if period else None
|
||||
|
||||
|
||||
class CreateMoveKeywords(ModelView):
|
||||
|
||||
+37
-24
@@ -1,6 +1,7 @@
|
||||
# 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.cache import Cache
|
||||
from trytond.const import OPERATORS
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import Index, ModelSQL, ModelView, Workflow, fields
|
||||
@@ -50,6 +51,7 @@ class Period(Workflow, ModelSQL, ModelView):
|
||||
company = fields.Function(fields.Many2One('company.company', 'Company',),
|
||||
'on_change_with_company', searcher='search_company')
|
||||
icon = fields.Function(fields.Char("Icon"), 'get_icon')
|
||||
_find_cache = Cache(__name__ + '.find', context=False)
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
@@ -180,39 +182,46 @@ class Period(Workflow, ModelSQL, ModelView):
|
||||
second=periods[0].rec_name))
|
||||
|
||||
@classmethod
|
||||
def find(cls, company_id, date=None, exception=True, test_state=True):
|
||||
def find(cls, company, date=None, exception=True, test_state=True):
|
||||
'''
|
||||
Return the period for the company_id
|
||||
at the date or the current date.
|
||||
If exception is set the function will raise an exception
|
||||
if no period is found.
|
||||
If test_state is true, it will search on non-closed periods
|
||||
Return the period for the company at the date or the current date.
|
||||
If exception is set it raises an exception if no period is found.
|
||||
If test_state is true, it searches on non-closed periods
|
||||
'''
|
||||
pool = Pool()
|
||||
Date = pool.get('ir.date')
|
||||
Lang = pool.get('ir.lang')
|
||||
|
||||
company_id = int(company) if company is not None else None
|
||||
if not date:
|
||||
with Transaction().set_context(company=company_id):
|
||||
date = Date.today()
|
||||
clause = [
|
||||
('start_date', '<=', date),
|
||||
('end_date', '>=', date),
|
||||
('fiscalyear.company', '=', company_id),
|
||||
('type', '=', 'standard'),
|
||||
]
|
||||
if test_state:
|
||||
clause.append(('state', '=', 'open'))
|
||||
periods = cls.search(clause, order=[('start_date', 'DESC')], limit=1)
|
||||
if not periods:
|
||||
if exception:
|
||||
lang = Lang.get()
|
||||
raise PeriodNotFoundError(
|
||||
gettext('account.msg_no_period_date',
|
||||
date=lang.strftime(date)))
|
||||
key = (company_id, date, test_state)
|
||||
period = cls._find_cache.get(key, -1)
|
||||
if period is not None and period < 0:
|
||||
clause = [
|
||||
('start_date', '<=', date),
|
||||
('end_date', '>=', date),
|
||||
('fiscalyear.company', '=', company_id),
|
||||
('type', '=', 'standard'),
|
||||
]
|
||||
if test_state:
|
||||
clause.append(('state', '=', 'open'))
|
||||
periods = cls.search(
|
||||
clause, order=[('start_date', 'DESC')], limit=1)
|
||||
if periods:
|
||||
period, = periods
|
||||
else:
|
||||
return None
|
||||
return periods[0].id
|
||||
period = None
|
||||
cls._find_cache.set(key, int(period) if period else None)
|
||||
elif period is not None:
|
||||
period = cls(period)
|
||||
if not period and exception:
|
||||
lang = Lang.get()
|
||||
raise PeriodNotFoundError(
|
||||
gettext('account.msg_no_period_date',
|
||||
date=lang.strftime(date)))
|
||||
return period
|
||||
|
||||
@classmethod
|
||||
def _check(cls, periods):
|
||||
@@ -267,7 +276,9 @@ class Period(Workflow, ModelSQL, ModelView):
|
||||
if not vals.get('post_move_sequence'):
|
||||
vals['post_move_sequence'] = (
|
||||
fiscalyear.post_move_sequence.id)
|
||||
return super(Period, cls).create(vlist)
|
||||
periods = super(Period, cls).create(vlist)
|
||||
cls._find_cache.clear()
|
||||
return periods
|
||||
|
||||
@classmethod
|
||||
def write(cls, *args):
|
||||
@@ -307,11 +318,13 @@ class Period(Workflow, ModelSQL, ModelView):
|
||||
period=period.rec_name))
|
||||
args.extend((periods, values))
|
||||
super(Period, cls).write(*args)
|
||||
cls._find_cache.clear()
|
||||
|
||||
@classmethod
|
||||
def delete(cls, periods):
|
||||
cls._check(periods)
|
||||
super(Period, cls).delete(periods)
|
||||
cls._find_cache.clear()
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
|
||||
@@ -557,8 +557,9 @@ class TaxCodeContext(ModelView):
|
||||
def default_period(cls):
|
||||
pool = Pool()
|
||||
Period = pool.get('account.period')
|
||||
return Period.find(
|
||||
period = Period.find(
|
||||
cls.default_company(), exception=False, test_state=False)
|
||||
return period.id if period else None
|
||||
|
||||
@fields.depends(
|
||||
'method', 'company',
|
||||
|
||||
@@ -534,7 +534,7 @@ class Asset(Workflow, ModelSQL, ModelView):
|
||||
Move = pool.get('account.move')
|
||||
MoveLine = pool.get('account.move.line')
|
||||
|
||||
period_id = Period.find(self.company.id, line.date)
|
||||
period = Period.find(self.company, line.date)
|
||||
with Transaction().set_context(date=line.date):
|
||||
expense_line = MoveLine(
|
||||
credit=0,
|
||||
@@ -550,7 +550,7 @@ class Asset(Workflow, ModelSQL, ModelView):
|
||||
return Move(
|
||||
company=self.company,
|
||||
origin=line,
|
||||
period=period_id,
|
||||
period=period,
|
||||
journal=self.account_journal,
|
||||
date=line.date,
|
||||
lines=[expense_line, depreciation_line],
|
||||
@@ -596,7 +596,7 @@ class Asset(Workflow, ModelSQL, ModelView):
|
||||
if date is None:
|
||||
with Transaction().set_context(company=self.company.id):
|
||||
date = Date.today()
|
||||
period_id = Period.find(self.company.id, date)
|
||||
period = Period.find(self.company, date)
|
||||
if self.supplier_invoice_line:
|
||||
account_asset = self.supplier_invoice_line.account.current()
|
||||
else:
|
||||
@@ -626,7 +626,7 @@ class Asset(Workflow, ModelSQL, ModelView):
|
||||
return Move(
|
||||
company=self.company,
|
||||
origin=self,
|
||||
period=period_id,
|
||||
period=period,
|
||||
journal=self.account_journal,
|
||||
date=date,
|
||||
lines=lines,
|
||||
@@ -886,12 +886,12 @@ class UpdateAsset(Wizard):
|
||||
pool = Pool()
|
||||
Period = pool.get('account.period')
|
||||
Move = pool.get('account.move')
|
||||
period_id = Period.find(asset.company.id, self.show_move.date)
|
||||
period = Period.find(asset.company, self.show_move.date)
|
||||
return Move(
|
||||
company=asset.company,
|
||||
origin=asset,
|
||||
journal=asset.account_journal.id,
|
||||
period=period_id,
|
||||
period=period,
|
||||
date=self.show_move.date,
|
||||
)
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@ class FeeDunningLevel(ModelSQL, ModelView):
|
||||
move.company = self.dunning.company
|
||||
move.journal = self.level.fee.journal
|
||||
move.date = today
|
||||
move.period = Period.find(move.company.id, date=today)
|
||||
move.period = Period.find(move.company, date=today)
|
||||
move.origin = self
|
||||
move.description = self.level.fee.name
|
||||
|
||||
|
||||
@@ -1093,11 +1093,11 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin):
|
||||
remainder_total_currency
|
||||
|
||||
accounting_date = self.accounting_date or self.invoice_date or today
|
||||
period_id = Period.find(self.company.id, date=accounting_date)
|
||||
period = Period.find(self.company, date=accounting_date)
|
||||
|
||||
move = Move()
|
||||
move.journal = self.journal
|
||||
move.period = period_id
|
||||
move.period = period
|
||||
move.date = accounting_date
|
||||
move.origin = self
|
||||
move.company = self.company
|
||||
@@ -1174,11 +1174,10 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin):
|
||||
pattern = pattern.copy()
|
||||
|
||||
accounting_date = self.accounting_date or self.invoice_date
|
||||
period_id = Period.find(
|
||||
self.company.id, date=accounting_date,
|
||||
period = Period.find(
|
||||
self.company, date=accounting_date,
|
||||
test_state=self.type != 'in')
|
||||
|
||||
period = Period(period_id)
|
||||
fiscalyear = period.fiscalyear
|
||||
pattern.setdefault('company', self.company.id)
|
||||
pattern.setdefault('fiscalyear', fiscalyear.id)
|
||||
@@ -1443,10 +1442,10 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin):
|
||||
if line.account.party_required:
|
||||
line.party = party
|
||||
|
||||
period_id = Period.find(self.company.id, date=date)
|
||||
period = Period.find(self.company, date=date)
|
||||
|
||||
move = Move(
|
||||
journal=payment_method.journal, period=period_id, date=date,
|
||||
journal=payment_method.journal, period=period, date=date,
|
||||
origin=self, description=description,
|
||||
company=self.company, lines=lines)
|
||||
move.save()
|
||||
|
||||
@@ -214,7 +214,7 @@ class InvoiceDeferred(Workflow, ModelSQL, ModelView):
|
||||
Period = pool.get('account.period')
|
||||
# Ensure it starts at an opened period
|
||||
for deferral in deferrals:
|
||||
Period.find(deferral.company.id, deferral.start_date)
|
||||
Period.find(deferral.company, deferral.start_date)
|
||||
# Set state before create moves and defer amount to pass assert
|
||||
cls.write(deferrals, {'state': 'running'})
|
||||
cls.create_moves(deferrals)
|
||||
|
||||
@@ -246,7 +246,7 @@ class Payment(metaclass=PoolMeta):
|
||||
if date is None:
|
||||
with Transaction().set_context(company=self.company.id):
|
||||
date = Date.today()
|
||||
period = Period.find(self.company.id, date=date)
|
||||
period = Period.find(self.company, date=date)
|
||||
|
||||
local_currency = self.journal.currency == self.company.currency
|
||||
if not local_currency:
|
||||
|
||||
@@ -576,9 +576,9 @@ class Statement(Workflow, ModelSQL, ModelView):
|
||||
Move = pool.get('account.move')
|
||||
Period = pool.get('account.period')
|
||||
|
||||
period_id = Period.find(self.company.id, date=key['date'])
|
||||
period = Period.find(self.company, date=key['date'])
|
||||
return Move(
|
||||
period=period_id,
|
||||
period=period,
|
||||
journal=self.journal.journal,
|
||||
date=key['date'],
|
||||
origin=self,
|
||||
|
||||
@@ -70,8 +70,7 @@ class InvoiceLine(metaclass=PoolMeta):
|
||||
|
||||
accounting_date = (self.invoice.accounting_date
|
||||
or self.invoice.invoice_date)
|
||||
period_id = Period.find(self.invoice.company.id, date=accounting_date)
|
||||
period = Period(period_id)
|
||||
period = Period.find(self.invoice.company, date=accounting_date)
|
||||
if period.fiscalyear.account_stock_method != 'anglo_saxon':
|
||||
return result
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ class Product(metaclass=PoolMeta):
|
||||
company = Company(context['company'])
|
||||
with Transaction().set_context(company=company.id):
|
||||
stock_date_end = Date.today()
|
||||
period = Period(Period.find(company.id, date=stock_date_end))
|
||||
period = Period.find(company, date=stock_date_end)
|
||||
if period.fiscalyear.account_stock_method:
|
||||
moves = []
|
||||
with Transaction().set_context(locations=[l.id for l in locations],
|
||||
|
||||
@@ -105,20 +105,19 @@ class Move(metaclass=PoolMeta):
|
||||
with Transaction().set_context(company=self.company.id):
|
||||
today = Date.today()
|
||||
for date in [self.effective_date, today]:
|
||||
period_id = Period.find(
|
||||
self.company.id, date=date, exception=False, test_state=False)
|
||||
if not period_id and date < today:
|
||||
period = Period.find(
|
||||
self.company, date=date, exception=False, test_state=False)
|
||||
if not period and date < today:
|
||||
return
|
||||
elif period_id:
|
||||
elif period:
|
||||
break
|
||||
else:
|
||||
return
|
||||
period = Period(period_id)
|
||||
if not period.fiscalyear.account_stock_method:
|
||||
return
|
||||
if period.state != 'open':
|
||||
date = today
|
||||
period = Period(Period.find(self.company.id, date=date))
|
||||
period = Period.find(self.company, date=date)
|
||||
|
||||
type_ = self._get_account_stock_move_type()
|
||||
if not type_:
|
||||
@@ -153,7 +152,7 @@ class Move(metaclass=PoolMeta):
|
||||
'stock_journal', company=self.company.id)
|
||||
return AccountMove(
|
||||
journal=journal,
|
||||
period=period_id,
|
||||
period=period,
|
||||
date=date,
|
||||
origin=self,
|
||||
lines=account_move_lines,
|
||||
|
||||
@@ -306,7 +306,7 @@ class Invoice(metaclass=PoolMeta):
|
||||
date = Transaction().context.get(
|
||||
'payment_date', Date.today())
|
||||
periods[invoice.company] = Period.find(
|
||||
invoice.company.id, date=date)
|
||||
invoice.company, date=date)
|
||||
period = periods[invoice.company]
|
||||
ratio = invoice.cash_paid_ratio
|
||||
for line in invoice.move.lines:
|
||||
@@ -331,8 +331,7 @@ class InvoiceTax(metaclass=PoolMeta):
|
||||
accounting_date = (
|
||||
self.invoice.accounting_date or self.invoice.invoice_date)
|
||||
period = Period.find(
|
||||
self.invoice.company.id, date=accounting_date)
|
||||
period = Period(period)
|
||||
self.invoice.company, date=accounting_date)
|
||||
return period.is_on_cash_basis(self.tax)
|
||||
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ class Commission(metaclass=PoolMeta):
|
||||
if date is None:
|
||||
with Transaction().set_context(company=self.agent.company.id):
|
||||
date = Date.today()
|
||||
period = Period.find(self.agent.company.id, date=date)
|
||||
period = Period.find(self.agent.company, date=date)
|
||||
|
||||
move = Move(journal=self.get_journal(), origin=self,
|
||||
date=date, period=period, company=self.agent.company)
|
||||
|
||||
@@ -358,7 +358,7 @@ class POSSale(Workflow, ModelSQL, ModelView, TaxableMixin):
|
||||
Move = pool.get('account.move')
|
||||
Period = pool.get('account.period')
|
||||
|
||||
period_id = Period.find(self.company.id, date=self.date)
|
||||
period = Period.find(self.company, date=self.date)
|
||||
lines = []
|
||||
for line in self.lines:
|
||||
move_lines = line.get_account_move_lines()
|
||||
@@ -376,7 +376,7 @@ class POSSale(Workflow, ModelSQL, ModelView, TaxableMixin):
|
||||
|
||||
move = Move()
|
||||
move.journal = self.point.journal
|
||||
move.period = period_id
|
||||
move.period = period
|
||||
move.date = self.date
|
||||
move.origin = self
|
||||
move.company = self.company
|
||||
@@ -1299,7 +1299,7 @@ class POSCashTransfer(Workflow, ModelSQL, ModelView):
|
||||
Move = pool.get('account.move')
|
||||
Period = pool.get('account.period')
|
||||
|
||||
period_id = Period.find(self.company.id, date=self.date)
|
||||
period = Period.find(self.company, date=self.date)
|
||||
line = Line()
|
||||
if self.amount >= 0:
|
||||
line.debit, line.credit = self.amount, Decimal(0)
|
||||
@@ -1312,7 +1312,7 @@ class POSCashTransfer(Workflow, ModelSQL, ModelView):
|
||||
|
||||
move = Move()
|
||||
move.journal = self.type.journal
|
||||
move.period = period_id
|
||||
move.period = period
|
||||
move.date = self.date
|
||||
move.origin = self
|
||||
move.company = self.company
|
||||
|
||||
Reference in New Issue
Block a user