changeset 3d5661114326 in modules/account:default
details: https://hg.tryton.org/modules/account?cmd=changeset;node=3d5661114326
description:
Store directly sequence type to sequence
issue10122
review351381002
diffstat:
CHANGELOG | 1 +
__init__.py | 1 +
configuration.py | 41 ++++++++++++++++++++++++++++++-
fiscalyear.py | 21 ++++++---------
journal.py | 8 +++--
journal.xml | 3 +-
move.py | 13 ++++-----
move.xml | 4 +--
period.py | 5 ++-
tests/scenario_account_reconcile.rst | 3 +-
tests/scenario_account_reconciliation.rst | 7 +++--
tests/test_account.py | 10 +++++--
tests/tools.py | 7 ++++-
view/configuration_form.xml | 3 ++
14 files changed, 89 insertions(+), 38 deletions(-)
diffs (400 lines):
diff -r 01493b338a7f -r 3d5661114326 CHANGELOG
--- a/CHANGELOG Sun Mar 07 19:07:31 2021 +0100
+++ b/CHANGELOG Thu Mar 11 23:00:09 2021 +0100
@@ -1,3 +1,4 @@
+* Add reconciliation sequence to configuration
* Add report for income statement and balance sheet
* Allow filtering general ledger by journal
* Add journal context to Move.query_get
diff -r 01493b338a7f -r 3d5661114326 __init__.py
--- a/__init__.py Sun Mar 07 19:07:31 2021 +0100
+++ b/__init__.py Thu Mar 11 23:00:09 2021 +0100
@@ -44,6 +44,7 @@
configuration.Configuration,
configuration.ConfigurationDefaultAccount,
configuration.DefaultTaxRule,
+ configuration.Sequence,
period.Period,
journal.Journal,
journal.JournalSequence,
diff -r 01493b338a7f -r 3d5661114326 configuration.py
--- a/configuration.py Sun Mar 07 19:07:31 2021 +0100
+++ b/configuration.py Thu Mar 11 23:00:09 2021 +0100
@@ -3,7 +3,7 @@
from trytond.pool import Pool
from trytond.model import ModelView, ModelSQL, ModelSingleton, fields
from trytond.transaction import Transaction
-from trytond.pyson import Eval
+from trytond.pyson import Eval, Id
from trytond.modules.company.model import (
CompanyMultiValueMixin, CompanyValueMixin)
@@ -47,6 +47,15 @@
help="Default supplier tax rule for new parties."))
tax_rounding = fields.MultiValue(fields.Selection(
tax_roundings, "Tax Rounding"))
+ reconciliation_sequence = fields.MultiValue(fields.Many2One(
+ 'ir.sequence', "Reconciliation Sequence", required=True,
+ domain=[
+ ('company', 'in',
+ [Eval('context', {}).get('company', -1), None]),
+ ('sequence_type', '=',
+ Id('account',
+ 'sequence_type_account_move_reconciliation')),
+ ]))
@classmethod
def multivalue_model(cls, field):
@@ -55,12 +64,19 @@
return pool.get('account.configuration.default_account')
if field in {'default_customer_tax_rule', 'default_supplier_tax_rule'}:
return pool.get('account.configuration.default_tax_rule')
+ if field == 'reconciliation_sequence':
+ return pool.get('account.configuration.sequence')
return super(Configuration, cls).multivalue_model(field)
@classmethod
def default_tax_rounding(cls, **pattern):
return cls.multivalue_model('tax_rounding').default_tax_rounding()
+ @classmethod
+ def default_reconciliation_sequence(cls, **pattern):
+ return cls.multivalue_model(
+ 'reconciliation_sequence').default_reconciliation_sequence()
+
class ConfigurationDefaultAccount(ModelSQL, CompanyValueMixin):
"Account Configuration Default Account"
@@ -131,3 +147,26 @@
@classmethod
def default_tax_rounding(cls):
return 'document'
+
+
+class Sequence(ModelSQL, CompanyValueMixin):
+ "Account Configuration Sequence"
+ __name__ = 'account.configuration.sequence'
+ reconciliation_sequence = fields.Many2One(
+ 'ir.sequence', "Reconciliation Sequence", required=True,
+ domain=[
+ ('company', 'in', [Eval('company', -1), None]),
+ ('sequence_type', '=',
+ Id('account', 'sequence_type_account_move_reconciliation')),
+ ],
+ depends=['company'])
+
+ @classmethod
+ def default_reconciliation_sequence(cls):
+ pool = Pool()
+ ModelData = pool.get('ir.model.data')
+ try:
+ return ModelData.get_id(
+ 'account', 'sequence_account_move_reconciliation')
+ except KeyError:
+ return None
diff -r 01493b338a7f -r 3d5661114326 fiscalyear.py
--- a/fiscalyear.py Sun Mar 07 19:07:31 2021 +0100
+++ b/fiscalyear.py Thu Mar 11 23:00:09 2021 +0100
@@ -7,7 +7,7 @@
from trytond.model import ModelView, ModelSQL, Workflow, fields
from trytond.model.exceptions import AccessError
from trytond.pool import Pool
-from trytond.pyson import Eval, If, PYSONEncoder
+from trytond.pyson import Eval, If, PYSONEncoder, Id
from trytond.rpc import RPC
from trytond.transaction import Transaction
from trytond.wizard import (
@@ -43,17 +43,14 @@
('close', 'Close'),
('locked', 'Locked'),
], 'State', readonly=True, required=True)
- post_move_sequence = fields.Many2One('ir.sequence', 'Post Move Sequence',
- required=True, domain=[('code', '=', 'account.move'),
- ['OR',
- ('company', '=', Eval('company')),
- ('company', '=', None)
- ]],
- context={
- 'code': 'account.move',
- 'company': Eval('company'),
- },
- depends=['company'])
+ post_move_sequence = fields.Many2One(
+ 'ir.sequence', "Post Move Sequence", required=True,
+ domain=[
+ ('sequence_type', '=',
+ Id('account', 'sequence_type_account_move')),
+ ('company', '=', Eval('company')),
+ ],
+ depends=['company'])
company = fields.Many2One('company.company', 'Company', required=True,
domain=[
('id', If(Eval('context', {}).contains('company'), '=', '!='),
diff -r 01493b338a7f -r 3d5661114326 journal.py
--- a/journal.py Sun Mar 07 19:07:31 2021 +0100
+++ b/journal.py Thu Mar 11 23:00:09 2021 +0100
@@ -9,7 +9,7 @@
from trytond.model import (
ModelView, ModelSQL, Workflow, DeactivableMixin, fields, Unique)
from trytond.model.exceptions import AccessError
-from trytond.pyson import Eval, Bool
+from trytond.pyson import Eval, Bool, Id
from trytond.transaction import Transaction
from trytond.pool import Pool
from trytond.tools import reduce_ids, grouped_slice, lstrip_wildcard
@@ -40,7 +40,8 @@
sequence = fields.MultiValue(fields.Many2One(
'ir.sequence', "Sequence",
domain=[
- ('code', '=', 'account.journal'),
+ ('sequence_type', '=',
+ Id('account', 'sequence_type_account_journal')),
('company', 'in', [
Eval('context', {}).get('company', -1), None]),
],
@@ -162,7 +163,8 @@
sequence = fields.Many2One(
'ir.sequence', "Sequence",
domain=[
- ('code', '=', 'account.journal'),
+ ('sequence_type', '=',
+ Id('account', 'sequence_type_account_journal')),
('company', 'in', [Eval('company', -1), None]),
],
depends=['company'])
diff -r 01493b338a7f -r 3d5661114326 journal.xml
--- a/journal.xml Sun Mar 07 19:07:31 2021 +0100
+++ b/journal.xml Thu Mar 11 23:00:09 2021 +0100
@@ -87,7 +87,6 @@
</record>
<record model="ir.sequence.type" id="sequence_type_account_journal">
<field name="name">Account Journal</field>
- <field name="code">account.journal</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_account_journal_group_admin">
@@ -102,7 +101,7 @@
<record model="ir.sequence" id="sequence_account_journal">
<field name="name">Default Account Journal</field>
- <field name="code">account.journal</field>
+ <field name="sequence_type" ref="sequence_type_account_journal"/>
</record>
<record model="ir.ui.view" id="journal_period_view_form">
diff -r 01493b338a7f -r 3d5661114326 move.py
--- a/move.py Sun Mar 07 19:07:31 2021 +0100
+++ b/move.py Thu Mar 11 23:00:09 2021 +0100
@@ -273,7 +273,6 @@
@classmethod
def create(cls, vlist):
pool = Pool()
- Sequence = pool.get('ir.sequence')
Journal = pool.get('account.journal')
vlist = [x.copy() for x in vlist]
@@ -284,7 +283,7 @@
if journal_id:
journal = Journal(journal_id)
if journal.sequence:
- vals['number'] = Sequence.get_id(journal.sequence.id)
+ vals['number'] = journal.sequence.get()
moves = super(Move, cls).create(vlist)
cls.validate_move(moves)
@@ -413,7 +412,6 @@
@ModelView.button
def post(cls, moves):
pool = Pool()
- Sequence = pool.get('ir.sequence')
Date = pool.get('ir.date')
Line = pool.get('account.move.line')
@@ -435,8 +433,7 @@
move.state = 'posted'
if not move.post_number:
move.post_date = Date.today()
- move.post_number = Sequence.get_id(
- move.period.post_move_sequence_used.id)
+ move.post_number = move.period.post_move_sequence_used.get()
def keyfunc(l):
return l.party, l.account
@@ -490,12 +487,14 @@
@classmethod
def create(cls, vlist):
- Sequence = Pool().get('ir.sequence')
+ pool = Pool()
+ Configuration = pool.get('account.configuration')
+ configuration = Configuration(1)
vlist = [x.copy() for x in vlist]
for vals in vlist:
if 'name' not in vals:
- vals['name'] = Sequence.get('account.move.reconciliation')
+ vals['name'] = configuration.reconciliation_sequence.get()
return super(Reconciliation, cls).create(vlist)
diff -r 01493b338a7f -r 3d5661114326 move.xml
--- a/move.xml Sun Mar 07 19:07:31 2021 +0100
+++ b/move.xml Thu Mar 11 23:00:09 2021 +0100
@@ -69,7 +69,6 @@
</record>
<record model="ir.sequence.type" id="sequence_type_account_move">
<field name="name">Account Move</field>
- <field name="code">account.move</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_account_move_group_admin">
@@ -131,7 +130,6 @@
</record>
<record model="ir.sequence.type"
id="sequence_type_account_move_reconciliation">
<field name="name">Account Move Reconciliation</field>
- <field name="code">account.move.reconciliation</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_account_move_reconciliation_group_admin">
@@ -146,7 +144,7 @@
<record model="ir.sequence" id="sequence_account_move_reconciliation">
<field name="name">Default Account Move Reconciliation</field>
- <field name="code">account.move.reconciliation</field>
+ <field name="sequence_type"
ref="sequence_type_account_move_reconciliation"/>
</record>
<record model="ir.ui.view" id="move_line_view_form">
diff -r 01493b338a7f -r 3d5661114326 period.py
--- a/period.py Sun Mar 07 19:07:31 2021 +0100
+++ b/period.py Thu Mar 11 23:00:09 2021 +0100
@@ -4,7 +4,7 @@
from trytond.i18n import gettext
from trytond.model import ModelView, ModelSQL, Workflow, fields
from trytond.model.exceptions import AccessError
-from trytond.pyson import Eval
+from trytond.pyson import Eval, Id
from trytond.transaction import Transaction
from trytond.pool import Pool
from trytond.const import OPERATORS
@@ -37,7 +37,8 @@
], 'State', readonly=True, required=True)
post_move_sequence = fields.Many2One('ir.sequence', 'Post Move Sequence',
domain=[
- ('code', '=', 'account.move'),
+ ('sequence_type', '=',
+ Id('account', 'sequence_type_account_move')),
['OR',
('company', '=', None),
('company', '=', Eval('company', -1)),
diff -r 01493b338a7f -r 3d5661114326 tests/scenario_account_reconcile.rst
--- a/tests/scenario_account_reconcile.rst Sun Mar 07 19:07:31 2021 +0100
+++ b/tests/scenario_account_reconcile.rst Thu Mar 11 23:00:09 2021 +0100
@@ -82,7 +82,8 @@
Create a write off method::
>>> Sequence = Model.get('ir.sequence')
- >>> sequence_journal, = Sequence.find([('code', '=', 'account.journal')])
+ >>> sequence_journal, = Sequence.find(
+ ... [('sequence_type.name', '=', "Account Journal")], limit=1)
>>> journal_writeoff = Journal(name='Write-Off', type='write-off',
... sequence=sequence_journal)
>>> journal_writeoff.save()
diff -r 01493b338a7f -r 3d5661114326 tests/scenario_account_reconciliation.rst
--- a/tests/scenario_account_reconciliation.rst Sun Mar 07 19:07:31 2021 +0100
+++ b/tests/scenario_account_reconciliation.rst Thu Mar 11 23:00:09 2021 +0100
@@ -124,11 +124,12 @@
>>> move.save()
>>> reconcile2, = [l for l in move.lines if l.account == receivable]
-Create a writeof payment method::
+Create a write-off payment method::
>>> Sequence = Model.get('ir.sequence')
- >>> sequence_journal, = Sequence.find([('code', '=', 'account.journal')])
+ >>> sequence_journal, = Sequence.find(
+ ... [('sequence_type.name', '=', "Account Journal")], limit=1)
>>> journal_writeoff = Journal(name='Write-Off', type='write-off',
... sequence=sequence_journal)
>>> journal_writeoff.save()
@@ -140,7 +141,7 @@
>>> writeoff_method.credit_account = expense
>>> writeoff_method.save()
-Reconcile Lines with writeoff::
+Reconcile Lines with write-off::
>>> reconcile_lines = Wizard('account.move.reconcile_lines',
... [reconcile1, reconcile2])
>>> reconcile_lines.form_state == 'writeoff'
diff -r 01493b338a7f -r 3d5661114326 tests/test_account.py
--- a/tests/test_account.py Sun Mar 07 19:07:31 2021 +0100
+++ b/tests/test_account.py Thu Mar 11 23:00:09 2021 +0100
@@ -86,6 +86,7 @@
def get_fiscalyear(company, today=None, start_date=None, end_date=None):
pool = Pool()
Sequence = pool.get('ir.sequence')
+ SequenceType = pool.get('ir.sequence.type')
FiscalYear = pool.get('account.fiscalyear')
if not today:
@@ -95,9 +96,12 @@
if not end_date:
end_date = today.replace(month=12, day=31)
+ sequence_type, = SequenceType.search([
+ ('name', '=', "Account Move"),
+ ], limit=1)
sequence, = Sequence.create([{
'name': '%s' % today.year,
- 'code': 'account.move',
+ 'sequence_type': sequence_type.id,
'company': company.id,
}])
fiscalyear = FiscalYear(name='%s' % today.year, company=company)
@@ -121,8 +125,8 @@
# Balance non-deferral
journal_sequence, = Sequence.search([
- ('code', '=', 'account.journal'),
- ])
+ ('sequence_type.name', '=', "Account Journal"),
+ ], limit=1)
journal_closing, = Journal.create([{
'name': 'Closing',
'code': 'CLO',
diff -r 01493b338a7f -r 3d5661114326 tests/tools.py
--- a/tests/tools.py Sun Mar 07 19:07:31 2021 +0100
+++ b/tests/tools.py Thu Mar 11 23:00:09 2021 +0100
@@ -16,6 +16,7 @@
"Create a fiscal year for the company on today"
FiscalYear = Model.get('account.fiscalyear', config=config)
Sequence = Model.get('ir.sequence', config=config)
+ SequenceType = Model.get('ir.sequence.type', config=config)
if not company:
company = get_company()
@@ -28,7 +29,11 @@
fiscalyear.end_date = today + relativedelta(month=12, day=31)
fiscalyear.company = company
- post_move_sequence = Sequence(name=str(today.year), code='account.move',
+ sequence_type, = SequenceType.find(
+ [('name', '=', "Account Move")], limit=1)
+ post_move_sequence = Sequence(
+ name=str(today.year),
+ sequence_type=sequence_type,
company=company)
post_move_sequence.save()
fiscalyear.post_move_sequence = post_move_sequence
diff -r 01493b338a7f -r 3d5661114326 view/configuration_form.xml
--- a/view/configuration_form.xml Sun Mar 07 19:07:31 2021 +0100
+++ b/view/configuration_form.xml Thu Mar 11 23:00:09 2021 +0100
@@ -14,4 +14,7 @@
<field name="default_supplier_tax_rule"/>
<label name="tax_rounding"/>
<field name="tax_rounding"/>
+ <separator id="move" string="Move" colspan="4"/>
+ <label name="reconciliation_sequence"/>
+ <field name="reconciliation_sequence"/>
</form>