[tryton-debian-vcs] tryton-modules-account-statement branch debian updated. debian/3.4.1-1-2-g93fd249

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Thu Apr 23 16:02:14 UTC 2015


The following commit has been merged in the debian branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-modules-account-statement.git;a=commitdiff;h=debian/3.4.1-1-2-g93fd249

commit 93fd249696133718dfa1681576e687e25876982f
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Thu Apr 23 16:59:52 2015 +0200

    Merging upstream version 3.6.0.

diff --git a/CHANGELOG b/CHANGELOG
index 222fc4c..a234e17 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,8 @@
-Version 3.4.1 - 2015-03-01
+Version 3.6.0 - 2015-04-20
 * Bug fixes (see mercurial logs for details)
+* Add support for PyPy
+* Add line group model
+* Create Move by grouped lines (number, date, party)
 
 Version 3.4.0 - 2014-10-20
 * Bug fixes (see mercurial logs for details)
diff --git a/PKG-INFO b/PKG-INFO
index c32e357..e6a4b18 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond_account_statement
-Version: 3.4.1
+Version: 3.6.0
 Summary: Tryton module with account statements
 Home-page: http://www.tryton.org/
 Author: Tryton
 Author-email: issue_tracker at tryton.org
 License: GPL-3
-Download-URL: http://downloads.tryton.org/3.4/
+Download-URL: http://downloads.tryton.org/3.6/
 Description: trytond_account_statement
         =========================
         
@@ -64,5 +64,7 @@ Classifier: Natural Language :: Slovenian
 Classifier: Natural Language :: Spanish
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Office/Business
 Classifier: Topic :: Office/Business :: Financial :: Accounting
diff --git a/__init__.py b/__init__.py
index 246d390..e12d022 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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.pool import Pool
 from .journal import *
@@ -12,6 +12,7 @@ def register():
         Journal,
         Statement,
         Line,
+        LineGroup,
         Move,
         module='account_statement', type_='model')
     Pool.register(
diff --git a/account.py b/account.py
index af74f27..ee29faf 100644
--- a/account.py
+++ b/account.py
@@ -1,6 +1,13 @@
-#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.pool import PoolMeta
+# 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 itertools import groupby
+from operator import itemgetter
+
+from sql.operators import Concat
+
+from trytond.pool import PoolMeta, Pool
+from trytond.transaction import Transaction
+from trytond.tools import grouped_slice, reduce_ids
 
 __all__ = ['Move']
 __metaclass__ = PoolMeta
@@ -10,5 +17,33 @@ class Move:
     __name__ = 'account.move'
 
     @classmethod
+    def __register__(cls, module_name):
+        pool = Pool()
+        StatementLine = pool.get('account.statement.line')
+        cursor = Transaction().cursor
+        sql_table = cls.__table__()
+
+        super(Move, cls).__register__(module_name)
+
+        # Migration from 3.4:
+        # account.statement.line origin changed to account.statement
+        statement_line = StatementLine.__table__()
+        cursor.execute(*sql_table.join(statement_line,
+                condition=(
+                    Concat(StatementLine.__name__ + ',', statement_line.id)
+                    == sql_table.origin
+                    )
+                ).select(sql_table.id, statement_line.statement,
+                order_by=(sql_table.id, statement_line.statement)))
+        for statement_id, values in groupby(cursor.fetchall(), itemgetter(1)):
+            ids = [x[0] for x in values]
+            for sub_ids in grouped_slice(ids):
+                red_sql = reduce_ids(sql_table.id, sub_ids)
+                cursor.execute(*sql_table.update(
+                        columns=[sql_table.origin],
+                        values=['account.statement,%s' % statement_id],
+                        where=red_sql))
+
+    @classmethod
     def _get_origin(cls):
-        return super(Move, cls)._get_origin() + ['account.statement.line']
+        return super(Move, cls)._get_origin() + ['account.statement']
diff --git a/doc/index.rst b/doc/index.rst
index 00fa451..aabece2 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -22,8 +22,8 @@ The statement can be in one of this states:
 
 * Validated
 
-  The statement is validated and is waiting to be posted. The moves for each
-  line are already created in draft state.
+  The statement is validated and is waiting to be posted. A move for each
+  grouped lines is already created in draft state.
 
 * Posted
 
@@ -39,12 +39,22 @@ Line
 
 A Statement Line is mainly defined by:
 
+- Sequence: Use to order the lines in the statement.
+- Number: The number to identify a transaction.
 - Date.
 - Amount.
 - Party.
 - Account.
 - Invoice.
 - Description.
+- Move: The move created for this line.
+
+Line Group
+**********
+
+The line group represent the group of lines created at the validation of the
+statement.
+By default the lines of a statement are grouped by *Number*, *Date* and *Party*.
 
 Journal
 *******
diff --git a/journal.py b/journal.py
index 10cd2af..e6ffb01 100644
--- a/journal.py
+++ b/journal.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 ModelView, ModelSQL, fields
 from trytond.transaction import Transaction
 from trytond.pool import Pool
diff --git a/journal.xml b/journal.xml
index 54f890b..1ac2a59 100644
--- a/journal.xml
+++ b/journal.xml
@@ -56,7 +56,9 @@ this repository contains the full copyright notices and license terms. -->
             <field name="global_p" eval="True"/>
         </record>
         <record model="ir.rule" id="rule_statement_journal1">
-            <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+            <field name="domain"
+                eval="[('company', '=', Eval('user', {}).get('company', None))]"
+                pyson="1"/>
             <field name="rule_group" ref="rule_group_statement_journal"/>
         </record>
 
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index 1e03722..2c8f9df 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -3,12 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr ""
 
@@ -16,10 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr ""
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr ""
@@ -29,6 +19,10 @@ msgid "Number of Lines must be \"%s\"."
 msgstr ""
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr ""
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr ""
 
@@ -228,6 +222,81 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Променено от"
 
+#, fuzzy
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Сума"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Създадено на"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Създадено от"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Управление на валути"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Цифри за валута"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Дата"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Дневник"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Движение"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Номер"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Управление на партньор"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Условие за плащане"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Отчет"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Променено на"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Променено от"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Отчет"
@@ -244,10 +313,36 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Ред от отчет за сметка"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr ""
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr ""
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Движения"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Движения"
+
 #, fuzzy
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
@@ -258,6 +353,16 @@ msgid "Statement Journals"
 msgstr "Дневник за отчети"
 
 #, fuzzy
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Редове от отчет"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Редове от отчет"
+
+#, fuzzy
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Отчет"
@@ -284,6 +389,10 @@ msgctxt ""
 msgid "Validated"
 msgstr "Проверен"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr ""
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Отчети"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index b9e7def..4b3396b 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -3,14 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-"El compte \"%(account)s\" a la línia d'extracte \"%(line)s\" és la mateixa "
-"que la configurada com a haver o deure al diari \"%(journal)s\"."
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr "L'import \"%s\" és més gran que l'import a pagar de la factura."
 
@@ -18,10 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr "L'import hauria de ser un valor positiu o negatiu."
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr "Proporcioneu un compte d'haver i de deure al diari d'extracte \"%s\"."
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr "El saldo final ha de ser \"%s\"."
@@ -31,6 +19,10 @@ msgid "Number of Lines must be \"%s\"."
 msgstr "El nombre de línies ha de ser \"%s\"."
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr "Afegeix un compte deure i haver en el diari d'extracte \"%s\"."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Heu de cancel·lar l'extracte \"%s\"abans de ser eliminat."
 
@@ -226,6 +218,66 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Usuari modificació"
 
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Import"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Data creació"
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Usuari creació"
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimals de la moneda"
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Data"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Diari"
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Assentament"
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Tercer"
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Extracte"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Data modificació"
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Usuari modificació"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Extracte"
@@ -242,10 +294,34 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Línia d'extracte bancari"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr "Grup de línies d'extracte"
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grups de línies d'extracte"
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr "Grups de línies"
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr "Apunts"
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr "Apunts"
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Assentaments"
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Assentaments"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr "Tots els extractes"
@@ -254,13 +330,21 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Diaris d'extracte"
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Línies extracte"
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Línies extracte"
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Extracte"
 
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
-msgstr "Tot"
+msgstr "Tots"
 
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_statement_form_domain_draft"
@@ -270,13 +354,17 @@ msgstr "Esborrany"
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_statement_form_domain_posted"
 msgid "Posted"
-msgstr "Confirmat"
+msgstr "Comptabilitzat"
 
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_statement_form_domain_validated"
 msgid "Validated"
 msgstr "Validat"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grups de línies d'extracte"
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Extractes"
@@ -367,7 +455,7 @@ msgstr "Esborrany"
 
 msgctxt "selection:account.statement,state:"
 msgid "Posted"
-msgstr "Confirmat"
+msgstr "Comptabilitzat"
 
 msgctxt "selection:account.statement,state:"
 msgid "Validated"
@@ -393,6 +481,14 @@ msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
 msgstr "Diaris d'extracte"
 
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Group"
+msgstr "Grup de línies d'extracte"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Groups"
+msgstr "Grups de línies d'extracte"
+
 msgctxt "view:account.statement.line:"
 msgid "Amount"
 msgstr "Import"
@@ -419,7 +515,7 @@ msgstr "Informació addicional"
 
 msgctxt "view:account.statement:"
 msgid "Post"
-msgstr "Confirma"
+msgstr "Comptabilitza"
 
 msgctxt "view:account.statement:"
 msgid "Statement"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 0e36f08..8be66b3 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -3,12 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr ""
 
@@ -16,10 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr ""
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr ""
@@ -29,6 +19,10 @@ msgid "Number of Lines must be \"%s\"."
 msgstr ""
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr ""
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr ""
 
@@ -224,6 +218,66 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr ""
 
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr ""
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr ""
@@ -240,10 +294,34 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr ""
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr ""
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr ""
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr ""
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr ""
@@ -252,6 +330,14 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr ""
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr ""
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr ""
@@ -275,6 +361,10 @@ msgctxt ""
 msgid "Validated"
 msgstr ""
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr ""
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index c188f4d..dda2225 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -3,14 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-"Konto \"%(account)s\" in Bankauszugszeile \"%(line)s\" ist dasselbe wie das "
-"für Soll oder Haben eingetragene in Journal \"%(journal)s\"."
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr "Betrag \"%s\" ist größer als der für die Rechnung zu zahlende Betrag."
 
@@ -18,11 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr "Der Betrag sollte einen positiven oder negativen Wert aufweisen."
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-"Bitte tragen Sie Soll- und Habenkonto für das Bankauszugsjournal \"%s\" ein."
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr "Endsaldo muss \"%s\" sein."
@@ -32,6 +19,10 @@ msgid "Number of Lines must be \"%s\"."
 msgstr "Anzahl der Zeilen muss \"%s\" sein."
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr "Bitte tragen Sie Haben- und Sollkonto für Bankauszugsjournal \"%s\" ein."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Bankauszug \"%s\" muss annulliert werden, bevor er gelöscht werden kann."
 
@@ -227,6 +218,66 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Letzte Änderung durch"
 
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Betrag"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Währung"
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Nachkommastellen Währung"
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Datum"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Journal"
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Buchungssatz"
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Nummer"
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Partei"
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Bankauszug"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Letzte Änderung durch"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Bankauszug"
@@ -243,10 +294,34 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Bankauszugszeile"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr "Bankauszugszeilengruppe"
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Bankauszugszeilengruppen"
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr "Zeilengruppen"
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr "Buchungszeilen"
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr "Buchungszeilen"
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Buchungssätze"
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Buchungssätze"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr "Bankauszüge"
@@ -255,6 +330,14 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Bankauszugsjournale"
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Bankauszugszeilen"
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Bankauszugszeilen"
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Zahlung"
@@ -278,6 +361,10 @@ msgctxt ""
 msgid "Validated"
 msgstr "Geprüft"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Bankauszugszeilengruppen"
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Bankauszüge"
@@ -394,17 +481,25 @@ msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
 msgstr "Bankauszugsjournale"
 
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Group"
+msgstr "Bankauszugszeilengruppe"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Groups"
+msgstr "Bankauszugszeilengruppen"
+
 msgctxt "view:account.statement.line:"
 msgid "Amount"
 msgstr "Betrag"
 
 msgctxt "view:account.statement.line:"
 msgid "Statement Line"
-msgstr "Bankauszug Zeile"
+msgstr "Bankauszugszeile"
 
 msgctxt "view:account.statement.line:"
 msgid "Statement Lines"
-msgstr "Bankauszug Zeile"
+msgstr "Bankauszugszeilen"
 
 msgctxt "view:account.statement:"
 msgid "Cancel"
@@ -428,7 +523,7 @@ msgstr "Bankauszug"
 
 msgctxt "view:account.statement:"
 msgid "Statement Lines"
-msgstr "Bankauszug Zeilen"
+msgstr "Bankauszugszeilen"
 
 msgctxt "view:account.statement:"
 msgid "Statements"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index 2bd398e..48f720c 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -3,14 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-"La cuenta «%(account)s» en la línea de estracto «%(line)s» es la misma que "
-"la configurada como haber o debe en el diario «%(journal)s»."
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr "El importe «%s» es mayor que el importe a pagar de la factura."
 
@@ -18,11 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr "El importe debería ser un valor positivo o negativo."
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-"Proporcione una cuenta de crédito y de débito en el diario de extracto «%s»."
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr "El saldo final debe ser «%s»."
@@ -32,6 +19,11 @@ msgid "Number of Lines must be \"%s\"."
 msgstr "Número de Líneas debe ser «%s»."
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr ""
+"Proporcione una cuenta de crédito y de débito en el diario de extracto «%s»."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Debe cancelar el extracto «%s» antes de eliminar."
 
@@ -61,7 +53,7 @@ msgstr "Usuario creación"
 
 msgctxt "field:account.statement,currency_digits:"
 msgid "Currency Digits"
-msgstr "Dígitos de moneda"
+msgstr "Decimales de moneda"
 
 msgctxt "field:account.statement,date:"
 msgid "Date"
@@ -227,6 +219,66 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Usuario modificación"
 
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Importe"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de moneda"
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Diario"
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Asiento"
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Entidad"
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Extracto"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Extracto"
@@ -243,10 +295,34 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Línea de extracto bancario"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr "Cuenta de grupo de líneas de extracto"
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grupos de líneas de extracto"
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr "Grupos de líneas"
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr "Líneas de asiento"
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr "Líneas de asiento"
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Asientos"
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Asientos"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr "Todos los extractos"
@@ -255,6 +331,14 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Diarios de extracto"
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Líneas de extracto bancario"
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Líneas de extracto bancario"
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Extracto"
@@ -278,6 +362,10 @@ msgctxt ""
 msgid "Validated"
 msgstr "Validado"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grupos de líneas de extracto"
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Extractos"
@@ -394,6 +482,14 @@ msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
 msgstr "Diarios de extracto"
 
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Group"
+msgstr "Grupo de líneas de extracto"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Groups"
+msgstr "Grupos de líneas de extracto"
+
 msgctxt "view:account.statement.line:"
 msgid "Amount"
 msgstr "Importe"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 60026ad..02f9171 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -3,14 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-"Cuenta \"%(account)s\" en linea de declaración \"%(line)s\" es la misma que "
-"la configurada como crédito o débito en diario \"%(journal)s\"."
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr "El valor \"%s\" es mayor que el valor a pagar en la factura."
 
@@ -18,12 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr "El valor debería ser positivo o negativo!"
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-"Por favor indique las cuentas débito y crédito en el libro de estado de "
-"cuentas \"%s\"."
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr "El Saldo Final debe ser \"%s!\"."
@@ -33,6 +19,12 @@ msgid "Number of Lines must be \"%s\"."
 msgstr "El número de líneas debe ser \"%s\"."
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr ""
+"Por favor provea un cuenta debito y credito en el libro del estado de cuenta"
+" \"%s\"."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "El estado de cuenta \"%s\" debe ser cancelado antes de ser eliminado."
 
@@ -228,6 +220,66 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Modificado por Usuario"
 
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Valor"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Fecha de Creación"
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Creado por Usuario"
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Monedas"
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de Moneda"
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Libro Contable"
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Asiento"
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Tercero"
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Estado de Cuenta"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Fecha de Modificación"
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Modificado por Usuario"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Estado de Cuenta"
@@ -244,10 +296,35 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Línea de Estado de Cuenta"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grupos de Línea de Estado de Cuenta"
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr "Grupos de Línea"
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr "Líneas de Asiento"
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr "Líneas de Asiento"
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Asientos"
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Movimientos"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr "Estados de Cuenta"
@@ -256,6 +333,14 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Libros de Estados de Cuenta"
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Líneas de Estado de Cuenta"
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Líneas de Estado de Cuenta"
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Estado de Cuenta"
@@ -279,6 +364,11 @@ msgctxt ""
 msgid "Validated"
 msgstr "Validado"
 
+#, fuzzy
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grupos de Línea de Estado de Cuenta"
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Estados de Cuenta"
@@ -341,7 +431,7 @@ msgstr "Número"
 
 msgctxt "odt:account.statement:"
 msgid "Party"
-msgstr "Terceros"
+msgstr "Tercero"
 
 msgctxt "odt:account.statement:"
 msgid "Phone:"
@@ -395,6 +485,14 @@ msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
 msgstr "Libros de Estados de Cuenta"
 
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Group"
+msgstr "Grupo Línea de Estado de Cuenta"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Groups"
+msgstr "Grupos de Línea de Estado de Cuenta"
+
 msgctxt "view:account.statement.line:"
 msgid "Amount"
 msgstr "Valor"
diff --git a/locale/es_EC.po b/locale/es_EC.po
index 55e075f..8573ece 100644
--- a/locale/es_EC.po
+++ b/locale/es_EC.po
@@ -3,35 +3,26 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-"La cuenta \"%(account)s\" en la línea de estado de cuenta \"%(line)s\" es la"
-" misma que la configurada como crédito o débito en el libro diario "
-"\"%(journal)s\"."
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
-msgstr "El valor \"%s\" es mayor que el valor a pagar de la factura."
+msgstr "El importe \"%s\" es mayor que el importe a pagar de la factura."
 
 msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
-msgstr "El valor debería ser positivo o negativo."
-
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-"Por favor proporcione una cuenta de débito y de crédito en el libro diario "
-"de estado de cuenta \"%s\"."
+msgstr "El importe debería ser un valor positivo o negativo."
 
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
-msgstr "El Saldo Final debe ser \"%s\"."
+msgstr "El saldo final debe ser \"%s\"."
 
 msgctxt "error:account.statement:"
 msgid "Number of Lines must be \"%s\"."
-msgstr "El Número de Líneas debe ser \"%s\"."
+msgstr "El número de líneas debe ser \"%s\"."
+
+msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr ""
+"Por favor proporcione una cuenta de débito y de crédito en el libro diario "
+"del estado de cuenta \"%s\"."
 
 msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
@@ -43,7 +34,7 @@ msgstr "Hay facturas pagadas en los estados de cuenta borrador."
 
 msgctxt "error:account.statement:"
 msgid "Total Amount must be \"%s\"."
-msgstr "La Cantidad Total debe ser \"%s\"."
+msgstr "El importe total debe ser \"%s\"."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
@@ -55,11 +46,11 @@ msgstr "Empresa"
 
 msgctxt "field:account.statement,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:account.statement,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:account.statement,currency_digits:"
 msgid "Currency Digits"
@@ -71,7 +62,7 @@ msgstr "Fecha"
 
 msgctxt "field:account.statement,end_balance:"
 msgid "End Balance"
-msgstr "Saldo Final"
+msgstr "Saldo final"
 
 msgctxt "field:account.statement,id:"
 msgid "ID"
@@ -79,11 +70,11 @@ msgstr "ID"
 
 msgctxt "field:account.statement,journal:"
 msgid "Journal"
-msgstr "Libro Diario"
+msgstr "Libro diario"
 
 msgctxt "field:account.statement,lines:"
 msgid "Lines"
-msgstr "Transacciones"
+msgstr "Líneas"
 
 msgctxt "field:account.statement,name:"
 msgid "Name"
@@ -91,7 +82,7 @@ msgstr "Nombre"
 
 msgctxt "field:account.statement,number_of_lines:"
 msgid "Number of Lines"
-msgstr "Número de Líneas"
+msgstr "Número de líneas"
 
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
@@ -99,7 +90,7 @@ msgstr "Nombre"
 
 msgctxt "field:account.statement,start_balance:"
 msgid "Start Balance"
-msgstr "Saldo Inicial"
+msgstr "Saldo inicial"
 
 msgctxt "field:account.statement,state:"
 msgid "State"
@@ -107,7 +98,7 @@ msgstr "Estado"
 
 msgctxt "field:account.statement,total_amount:"
 msgid "Total Amount"
-msgstr "Valor Total"
+msgstr "Valor total"
 
 msgctxt "field:account.statement,validation:"
 msgid "Validation"
@@ -115,11 +106,11 @@ msgstr "Validación"
 
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:account.statement,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
 
 msgctxt "field:account.statement.journal,company:"
 msgid "Company"
@@ -127,11 +118,11 @@ msgstr "Empresa"
 
 msgctxt "field:account.statement.journal,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:account.statement.journal,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:account.statement.journal,currency:"
 msgid "Currency"
@@ -143,7 +134,7 @@ msgstr "ID"
 
 msgctxt "field:account.statement.journal,journal:"
 msgid "Journal"
-msgstr "Libro Diario"
+msgstr "Libro diario"
 
 msgctxt "field:account.statement.journal,name:"
 msgid "Name"
@@ -155,15 +146,15 @@ msgstr "Nombre"
 
 msgctxt "field:account.statement.journal,validation:"
 msgid "Validation Type"
-msgstr "Tipo de Validación"
+msgstr "Tipo de validación"
 
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:account.statement.journal,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
 
 msgctxt "field:account.statement.line,account:"
 msgid "Account"
@@ -171,15 +162,15 @@ msgstr "Cuenta"
 
 msgctxt "field:account.statement.line,amount:"
 msgid "Amount"
-msgstr "Valor"
+msgstr "Importe"
 
 msgctxt "field:account.statement.line,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:account.statement.line,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:account.statement.line,date:"
 msgid "Date"
@@ -199,7 +190,7 @@ msgstr "Factura"
 
 msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
-msgstr "Asiento Contable"
+msgstr "Asiento contable"
 
 msgctxt "field:account.statement.line,number:"
 msgid "Number"
@@ -219,47 +210,139 @@ msgstr "Secuencia"
 
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
-msgstr "Estado de Cuenta"
+msgstr "Estado de cuenta"
 
 msgctxt "field:account.statement.line,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
+
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Importe"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Fecha de creación"
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Creado por usuario"
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de moneda"
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Libro diario"
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Asiento"
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Tercero"
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Estado de cuenta"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Fecha de modificación"
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Modificado por usuario"
 
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
-msgstr "Extracto"
+msgstr "Estado de cuenta"
 
 msgctxt "model:account.statement,name:"
 msgid "Account Statement"
-msgstr "Estado de Cuenta"
+msgstr "Estado de cuenta"
 
 msgctxt "model:account.statement.journal,name:"
 msgid "Statement Journal"
-msgstr "Libro Diario de Estados de Cuenta"
+msgstr "Libro diario de estados de cuenta"
 
 msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
-msgstr "Línea de Estado de Cuenta"
+msgstr "Línea de estado de cuenta"
+
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr "Cuenta de grupo de líneas de estado de cuenta"
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grupos de líneas de estado de cuenta"
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr "Grupos de líneas"
 
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr "Líneas de Asiento"
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr "Líneas de Asiento"
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Asientos"
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Asientos"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr "Estados de Cuenta"
 
 msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
-msgstr "Libros Diarios de Estados de Cuenta"
+msgstr "Libros diarios de estados de cuenta"
+
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Líneas de estado de cuenta"
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Línesa de estado de cuenta"
 
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
-msgstr "Estado de Cuenta"
+msgstr "Estado de cuenta"
 
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
@@ -280,13 +363,17 @@ msgctxt ""
 msgid "Validated"
 msgstr "Validado"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grupos de Líneas de Estado de Cuenta"
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
-msgstr "Estados de Cuenta"
+msgstr "Estados de cuenta"
 
 msgctxt "model:ir.ui.menu,name:menu_statement_form"
 msgid "Statements"
-msgstr "Estados de Cuenta"
+msgstr "Estados de cuenta"
 
 msgctxt "model:ir.ui.menu,name:menu_statement_journal_form"
 msgid "Statement Journals"
@@ -306,7 +393,7 @@ msgstr "#"
 
 msgctxt "odt:account.statement:"
 msgid "Amount"
-msgstr "Valor"
+msgstr "Importe"
 
 msgctxt "odt:account.statement:"
 msgid "Canceled"
@@ -334,7 +421,7 @@ msgstr "Correo electrónico:"
 
 msgctxt "odt:account.statement:"
 msgid "Journal:"
-msgstr "Libro Diario:"
+msgstr "Libro diario:"
 
 msgctxt "odt:account.statement:"
 msgid "Number"
@@ -350,7 +437,7 @@ msgstr "Teléfono:"
 
 msgctxt "odt:account.statement:"
 msgid "Statement"
-msgstr "Estado de Cuenta"
+msgstr "Estado de cuenta"
 
 msgctxt "odt:account.statement:"
 msgid "Total"
@@ -378,7 +465,7 @@ msgstr "Validado"
 
 msgctxt "selection:account.statement.journal,validation:"
 msgid "Amount"
-msgstr "Valor"
+msgstr "Importe"
 
 msgctxt "selection:account.statement.journal,validation:"
 msgid "Balance"
@@ -386,27 +473,35 @@ msgstr "Saldo"
 
 msgctxt "selection:account.statement.journal,validation:"
 msgid "Number of Lines"
-msgstr "Número de Líneas"
+msgstr "Número de líneas"
 
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
-msgstr "Libro Diario de Estados de Cuenta"
+msgstr "Libro diario de estados de cuenta"
 
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
-msgstr "Libros Diarios de Estados de Cuenta"
+msgstr "Libros diarios de estados de cuenta"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Group"
+msgstr "Grupo de líneas de estado de cuenta"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Groups"
+msgstr "Grupos de líneas de estado de cuenta"
 
 msgctxt "view:account.statement.line:"
 msgid "Amount"
-msgstr "Valor"
+msgstr "Importe"
 
 msgctxt "view:account.statement.line:"
 msgid "Statement Line"
-msgstr "Línea de Estado de Cuenta"
+msgstr "Línea de estado de cuenta"
 
 msgctxt "view:account.statement.line:"
 msgid "Statement Lines"
-msgstr "Líneas de Estado de Cuenta"
+msgstr "Líneas de estado de cuenta"
 
 msgctxt "view:account.statement:"
 msgid "Cancel"
@@ -418,7 +513,7 @@ msgstr "Borrador"
 
 msgctxt "view:account.statement:"
 msgid "Other Info"
-msgstr "Información Adicional"
+msgstr "Información adicional"
 
 msgctxt "view:account.statement:"
 msgid "Post"
@@ -426,15 +521,15 @@ msgstr "Contabilizar"
 
 msgctxt "view:account.statement:"
 msgid "Statement"
-msgstr "Estado de Cuenta"
+msgstr "Estado de cuenta"
 
 msgctxt "view:account.statement:"
 msgid "Statement Lines"
-msgstr "Líneas de Estado de Cuenta"
+msgstr "Líneas de estado de cuenta"
 
 msgctxt "view:account.statement:"
 msgid "Statements"
-msgstr "Estados de Cuenta"
+msgstr "Estados de cuenta"
 
 msgctxt "view:account.statement:"
 msgid "Validate"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index 9176758..96be169 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -3,14 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-"La cuenta \"%(account)s\" en la línea de extracto \"%(line)s\" es la misma "
-"que la configurada como haber o debe en el diario \"%(journal)s\"."
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr "El importe \"%s\" es mayor que el importe a pagar de la factura."
 
@@ -18,11 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr "El importe debería ser un valor positivo o negativo."
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-"Proporcione una cuenta de haber y de debe en el diario de extracto \"%s\"."
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr "El saldo final debe ser \"%s\"."
@@ -32,6 +19,10 @@ msgid "Number of Lines must be \"%s\"."
 msgstr "El número de líneas debe ser \"%s\"."
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr "Añade una cuenta debe y haber en el diario de extracto \"%s\"."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Debe cancelar el extracto \"%s\" antes de borrarlo."
 
@@ -227,6 +218,66 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Usuario modificación"
 
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Importe"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de la moneda"
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Diario"
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Asiento"
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Tercero"
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Extracto"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Extracto"
@@ -243,10 +294,34 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Línea de extracto bancario"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr "Grupo de líneas de extracto"
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grupos de líneas de extracto"
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr "Grupos de líneas"
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr "Apuntes"
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr "Apuntes"
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Asientos"
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Asientos"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr "Todos los extractos"
@@ -255,6 +330,14 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Diarios de extracto"
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Líneas de extracto bancario"
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Líneas de extracto bancario"
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Extracto"
@@ -271,13 +354,17 @@ msgstr "Borrador"
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_statement_form_domain_posted"
 msgid "Posted"
-msgstr "Confirmado"
+msgstr "Contabilizado"
 
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_statement_form_domain_validated"
 msgid "Validated"
 msgstr "Validado"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Grupos de líneas de extracto"
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Extractos"
@@ -368,7 +455,7 @@ msgstr "Borrador"
 
 msgctxt "selection:account.statement,state:"
 msgid "Posted"
-msgstr "Confirmado"
+msgstr "Contabilizado"
 
 msgctxt "selection:account.statement,state:"
 msgid "Validated"
@@ -394,6 +481,14 @@ msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
 msgstr "Diarios de extracto"
 
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Group"
+msgstr "Grupo de líneas de extracto"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Groups"
+msgstr "Grupos de líneas de extracto"
+
 msgctxt "view:account.statement.line:"
 msgid "Amount"
 msgstr "Importe"
@@ -420,7 +515,7 @@ msgstr "Información adicional"
 
 msgctxt "view:account.statement:"
 msgid "Post"
-msgstr "Confirmar"
+msgstr "Contabilizar"
 
 msgctxt "view:account.statement:"
 msgid "Statement"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index e1216ab..c9ed351 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -3,14 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-"Le compte « %(account)s » sur la ligne de relevé  « %(line)s » que celui "
-"configuré comme crédit ou débit sur le journal « %(journal)s »."
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr ""
 "Le montant « %s » est plus grand que le montant restant à payer de la "
@@ -20,12 +12,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr "Le montant doit être une valeur positive ou négative."
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-"Veuillez remplir les comptes de débit et crédit sur le journal des relevés «"
-" %s »."
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr "La balance de fin doit valoir « %s »."
@@ -35,6 +21,11 @@ msgid "Number of Lines must be \"%s\"."
 msgstr "Le nombre de lignes doit être « %s »."
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr ""
+"Veullez fournir les comptes de débit et crédit sur le journal de relevés."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Le relevé « %s » doit être annulé avant suppression."
 
@@ -230,6 +221,66 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Mis à jour par"
 
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Montant"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Devise"
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Décimales de la devise"
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Date"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Journal"
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Mouvement"
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Numéro"
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Tiers"
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Relevé"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Relevé"
@@ -246,10 +297,34 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Ligne de relevé comptable"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr "Groupe de lignes de relevé comptable"
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Groupes de lignes de relevé"
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr "Groupes de ligne"
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr "Lignes de mouvement"
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr "Lignes de mouvement"
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Mouvements"
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Mouvements"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr "Relevés"
@@ -258,6 +333,14 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Journaux de relevés"
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Lignes de relevé"
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Lignes de relevé"
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Relevé"
@@ -281,6 +364,10 @@ msgctxt ""
 msgid "Validated"
 msgstr "Validé"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Groupes de lignes de relevé"
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Relevés"
@@ -397,6 +484,14 @@ msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
 msgstr "Journaux de relevés"
 
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Group"
+msgstr "Groupe de lignes de relevé"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Groups"
+msgstr "Groupes de lignes de relevé"
+
 msgctxt "view:account.statement.line:"
 msgid "Amount"
 msgstr "Montant"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index 2834ecd..4a109cc 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -3,12 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr ""
 
@@ -16,10 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr ""
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr ""
@@ -29,6 +19,10 @@ msgid "Number of Lines must be \"%s\"."
 msgstr ""
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr ""
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr ""
 
@@ -230,6 +224,76 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr ""
 
+#, fuzzy
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Bedrag"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Valuta"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Valuta decimalen"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Vervaldatum"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Dagboek"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Boeking"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Nummer"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Relaties"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Naam bijlage"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Bankafschrift"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr ""
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Bankafschrift"
@@ -246,10 +310,36 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Rekeningafschriftregel"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr ""
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr ""
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Boekingen"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Boekingen"
+
 #, fuzzy
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
@@ -260,6 +350,16 @@ msgid "Statement Journals"
 msgstr "Dagboeken bankafschriften"
 
 #, fuzzy
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Bankafschriftregels"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Bankafschriftregels"
+
+#, fuzzy
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Bankafschrift"
@@ -286,6 +386,10 @@ msgctxt ""
 msgid "Validated"
 msgstr "Goedgekeurd"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr ""
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Bankafschriften"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index d5396fd..bbab630 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -3,12 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr ""
 
@@ -16,10 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr ""
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr ""
@@ -29,6 +19,10 @@ msgid "Number of Lines must be \"%s\"."
 msgstr ""
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr ""
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr ""
 
@@ -265,6 +259,80 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Изменено пользователем"
 
+#, fuzzy
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Сумма"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Дата создания"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Создано пользователем"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Валюты"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Кол-во цифр валюты"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Дата"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Журнал"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Перемещение"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Номер"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Организации"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Правило оплаты"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Дата изменения"
+
+#, fuzzy
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Изменено пользователем"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr ""
@@ -281,10 +349,36 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr ""
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr ""
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr ""
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr ""
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Перемещения"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Перемещения"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr ""
@@ -293,6 +387,14 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr ""
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr ""
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr ""
@@ -320,6 +422,10 @@ msgctxt ""
 msgid "Validated"
 msgstr "Утвержденный"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr ""
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr ""
diff --git a/locale/sl_SI.po b/locale/sl_SI.po
index 0038784..d1ec0b0 100644
--- a/locale/sl_SI.po
+++ b/locale/sl_SI.po
@@ -3,14 +3,6 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:account.statement.line:"
-msgid ""
-"Account \"%(account)s\" in statement line \"%(line)s\" is the same as the "
-"one configured as credit or debit on journal \"%(journal)s\"."
-msgstr ""
-"Konto \"%(account)s\" v postavki izpiska \"%(line)s\" je enak kontu, ki je "
-"nastavljen v dnevniku \"%(journal)s\" kot kredit ali debet."
-
-msgctxt "error:account.statement.line:"
 msgid "Amount \"%s\" is greater than the amount to pay of invoice."
 msgstr "Znesek \"%s\" je večji od zneska za plačat na računu."
 
@@ -18,11 +10,6 @@ msgctxt "error:account.statement.line:"
 msgid "Amount should be a positive or negative value."
 msgstr "Znesek mora biti pozitivna ali negativna vrednost."
 
-msgctxt "error:account.statement.line:"
-msgid "Please provide debit and credit account on statement journal \"%s\"."
-msgstr ""
-"Prosimo, da nastavite debetni in kreditni konto v dnevniku izpiskov \"%s\"."
-
 msgctxt "error:account.statement:"
 msgid "End Balance must be \"%s\"."
 msgstr "Končni saldo mora biti \"%s\"."
@@ -32,6 +19,10 @@ msgid "Number of Lines must be \"%s\"."
 msgstr "Število postavk mora biti \"%s\"."
 
 msgctxt "error:account.statement:"
+msgid "Please provide debit and credit account on statement journal \"%s\"."
+msgstr "Pri dnevniku izpiskov \"%s\" vnesi debetni in kreditni konto."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Izpisek \"%s\" mora biti pred izbrisom preklican."
 
@@ -85,7 +76,7 @@ msgstr "Postavke"
 
 msgctxt "field:account.statement,name:"
 msgid "Name"
-msgstr "Plačilni rok"
+msgstr "Naziv"
 
 msgctxt "field:account.statement,number_of_lines:"
 msgid "Number of Lines"
@@ -227,6 +218,66 @@ msgctxt "field:account.statement.line,write_uid:"
 msgid "Write User"
 msgstr "Zapisal"
 
+msgctxt "field:account.statement.line.group,amount:"
+msgid "Amount"
+msgstr "Znesek"
+
+msgctxt "field:account.statement.line.group,create_date:"
+msgid "Create Date"
+msgstr "Izdelano"
+
+msgctxt "field:account.statement.line.group,create_uid:"
+msgid "Create User"
+msgstr "Izdelal"
+
+msgctxt "field:account.statement.line.group,currency:"
+msgid "Currency"
+msgstr "Valuta"
+
+msgctxt "field:account.statement.line.group,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimalke"
+
+msgctxt "field:account.statement.line.group,date:"
+msgid "Date"
+msgstr "Datum"
+
+msgctxt "field:account.statement.line.group,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:account.statement.line.group,journal:"
+msgid "Journal"
+msgstr "Dnevnik"
+
+msgctxt "field:account.statement.line.group,move:"
+msgid "Move"
+msgstr "Knjižba"
+
+msgctxt "field:account.statement.line.group,number:"
+msgid "Number"
+msgstr "Številka"
+
+msgctxt "field:account.statement.line.group,party:"
+msgid "Party"
+msgstr "Partner"
+
+msgctxt "field:account.statement.line.group,rec_name:"
+msgid "Name"
+msgstr "Ime"
+
+msgctxt "field:account.statement.line.group,statement:"
+msgid "Statement"
+msgstr "Izpisek"
+
+msgctxt "field:account.statement.line.group,write_date:"
+msgid "Write Date"
+msgstr "Zapisano"
+
+msgctxt "field:account.statement.line.group,write_uid:"
+msgid "Write User"
+msgstr "Zapisal"
+
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
 msgstr "Izpisek"
@@ -243,10 +294,34 @@ msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
 msgstr "Postavka izpiska"
 
+msgctxt "model:account.statement.line.group,name:"
+msgid "Account Statement Line Group"
+msgstr "Skupina postavk izpiska"
+
+msgctxt "model:ir.action,name:act_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Skupine postavk izpiska"
+
+msgctxt "model:ir.action,name:act_line_groups_form"
+msgid "Line Groups"
+msgstr "Skupine postavk"
+
 msgctxt "model:ir.action,name:act_move_lines_form"
 msgid "Move Lines"
 msgstr "Postavke prometa"
 
+msgctxt "model:ir.action,name:act_move_lines_form2"
+msgid "Move Lines"
+msgstr "Postavke prometa"
+
+msgctxt "model:ir.action,name:act_moves_form"
+msgid "Moves"
+msgstr "Promet"
+
+msgctxt "model:ir.action,name:act_moves_form2"
+msgid "Moves"
+msgstr "Promet"
+
 msgctxt "model:ir.action,name:act_statement_form"
 msgid "Statements"
 msgstr "Izpiski"
@@ -255,6 +330,14 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Dnevniki izpiskov"
 
+msgctxt "model:ir.action,name:act_statement_line_move"
+msgid "Statement Lines"
+msgstr "Postavke izpiska"
+
+msgctxt "model:ir.action,name:act_statement_line_move_line"
+msgid "Statement Lines"
+msgstr "Postavke izpiska"
+
 msgctxt "model:ir.action,name:report_statement"
 msgid "Statement"
 msgstr "Izpisek"
@@ -278,6 +361,10 @@ msgctxt ""
 msgid "Validated"
 msgstr "Odobreno"
 
+msgctxt "model:ir.ui.menu,name:menu_line_group_form"
+msgid "Statement Line Groups"
+msgstr "Skupine postavk izpiska"
+
 msgctxt "model:ir.ui.menu,name:menu_statement_configuration"
 msgid "Statements"
 msgstr "Izpiski"
@@ -394,6 +481,14 @@ msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
 msgstr "Dnevniki izpiskov"
 
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Group"
+msgstr "Skupina postavk izpiska"
+
+msgctxt "view:account.statement.line.group:"
+msgid "Statement Line Groups"
+msgstr "Skupine postavk izpiska"
+
 msgctxt "view:account.statement.line:"
 msgid "Amount"
 msgstr "Znesek"
diff --git a/setup.py b/setup.py
index 5465147..6f416ab 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 setuptools import setup
 import re
@@ -41,12 +41,11 @@ if minor_version % 2:
         'hg+http://hg.tryton.org/modules/%s#egg=%s-%s' % (
             name[8:], name, version))
 
-requires = []
+requires = ['python-sql >= 0.4']
 for dep in info.get('depends', []):
     if not re.match(r'(ir|res|webdav)(\W|$)', dep):
         requires.append(get_require_version('trytond_%s' % dep))
 requires.append(get_require_version('trytond'))
-requires.append('python-sql')
 
 tests_require = [get_require_version('proteus')]
 dependency_links = []
@@ -93,6 +92,8 @@ setup(name=name,
         'Natural Language :: Spanish',
         'Operating System :: OS Independent',
         'Programming Language :: Python :: 2.7',
+        'Programming Language :: Python :: Implementation :: CPython',
+        'Programming Language :: Python :: Implementation :: PyPy',
         'Topic :: Office/Business',
         'Topic :: Office/Business :: Financial :: Accounting',
         ],
diff --git a/statement.odt b/statement.odt
index c85d075..b3d53f8 100644
Binary files a/statement.odt and b/statement.odt differ
diff --git a/statement.py b/statement.py
index 39bd11a..9fc0e49 100644
--- a/statement.py
+++ b/statement.py
@@ -1,10 +1,11 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 decimal import Decimal
 from collections import namedtuple
 from itertools import groupby
 
-from sql.aggregate import Sum
+from sql import Null
+from sql.aggregate import Max, Sum
 
 from trytond.model import Workflow, ModelView, ModelSQL, fields
 from trytond.pyson import Eval, If, Bool
@@ -12,9 +13,8 @@ from trytond.transaction import Transaction
 from trytond import backend
 from trytond.pool import Pool
 from trytond.modules.company import CompanyReport
-from trytond.tools import reduce_ids
 
-__all__ = ['Statement', 'Line', 'StatementReport']
+__all__ = ['Statement', 'Line', 'LineGroup', 'StatementReport']
 
 _STATES = {'readonly': Eval('state') != 'draft'}
 _DEPENDS = ['state']
@@ -41,7 +41,7 @@ _NUMBER_STATES.update({
 _NUMBER_DEPENDS = _DEPENDS + ['validation']
 
 
-class Null(object):
+class Unequal(object):
     "Always different"
 
     def __eq__(self, other):
@@ -67,12 +67,12 @@ class Statement(Workflow, ModelSQL, ModelView):
     journal = fields.Many2One('account.statement.journal', 'Journal',
         required=True, select=True,
         domain=[
-            ('company', '=', Eval('context', {}).get('company', -1)),
+            ('company', '=', Eval('company', -1)),
             ],
         states={
             'readonly': (Eval('state') != 'draft') | Eval('lines', [0]),
             },
-        depends=['state'])
+        depends=['state', 'company'])
     currency_digits = fields.Function(fields.Integer('Currency Digits'),
         'on_change_with_currency_digits')
     date = fields.Date('Date', required=True, states=_STATES, depends=_DEPENDS,
@@ -120,6 +120,8 @@ class Statement(Workflow, ModelSQL, ModelView):
                     'deletion.'),
                 'paid_invoice_draft_statement': ('There are paid invoices on '
                     'draft statements.'),
+                'debit_credit_account_statement_journal': ('Please provide '
+                    'debit and credit account on statement journal "%s".'),
                 })
         cls._transitions |= set((
                 ('draft', 'validated'),
@@ -177,7 +179,7 @@ class Statement(Workflow, ModelSQL, ModelView):
         # Migration from 3.2: add required name
         cursor.execute(*sql_table.update([sql_table.name],
                 [sql_table.id.cast(cls.name.sql_type().base)],
-                where=sql_table.name == None))
+                where=sql_table.name == Null))
 
     @staticmethod
     def default_company():
@@ -202,9 +204,8 @@ class Statement(Workflow, ModelSQL, ModelView):
 
     @fields.depends('journal', 'state', 'lines')
     def on_change_journal(self):
-        res = {}
         if not self.journal:
-            return res
+            return
 
         statements = self.search([
                 ('journal', '=', self.journal.id),
@@ -212,11 +213,10 @@ class Statement(Workflow, ModelSQL, ModelView):
                 ('date', 'DESC'),
                 ], limit=1)
         if not statements:
-            return res
+            return
 
         statement, = statements
-        res['start_balance'] = statement.end_balance
-        return res
+        self.start_balance = statement.end_balance
 
     @fields.depends('journal')
     def on_change_with_currency_digits(self, name=None):
@@ -240,9 +240,6 @@ class Statement(Workflow, ModelSQL, ModelView):
         pool = Pool()
         Currency = pool.get('currency.currency')
         Line = pool.get('account.statement.line')
-        res = {
-            'lines': {},
-            }
         if self.journal and self.lines:
             invoices = set()
             for line in self.lines:
@@ -259,52 +256,36 @@ class Statement(Workflow, ModelSQL, ModelView):
                         Currency.compute(invoice.currency,
                             invoice.amount_to_pay, self.journal.currency))
 
+            lines = list(self.lines)
             line_offset = 0
             for index, line in enumerate(self.lines or []):
                 if getattr(line, 'invoice', None) and line.id:
                     amount_to_pay = invoice_id2amount_to_pay[line.invoice.id]
-                    res['lines'].setdefault('update', [])
                     if (not self.journal.currency.is_zero(amount_to_pay)
                             and getattr(line, 'amount', None)
                             and (line.amount >= 0) == (amount_to_pay <= 0)):
-                        res['lines']['update'].append({
-                                'id': line.id,
-                                'amount': (amount_to_pay.copy_sign(line.amount)
-                                    if abs(line.amount) > abs(amount_to_pay)
-                                    else line.amount)
-                                })
                         if abs(line.amount) > abs(amount_to_pay):
-                            res['lines'].setdefault('add', [])
-                            vals = {}
+                            new_line = Line()
                             for field_name, field in Line._fields.iteritems():
+                                if field_name == 'id':
+                                    continue
                                 try:
-                                    value = getattr(line, field_name)
+                                    setattr(new_line, field_name,
+                                        getattr(line, field_name))
                                 except AttributeError:
-                                    continue
-                                if (value and field._type in ('many2one',
-                                            'one2one')):
-                                    vals[field_name] = value.id
-                                    if value.id >= 0:
-                                        vals[field_name + '.rec_name'] = \
-                                            value.rec_name
-                                else:
-                                    vals[field_name] = value
-                            del vals['id']
-                            vals['amount'] = line.amount + amount_to_pay
-                            vals['invoice'] = None
-                            del vals['invoice.rec_name']
+                                    pass
+                            new_line.amount = line.amount + amount_to_pay
+                            new_line.invoice = None
                             line_offset += 1
-                            res['lines']['add'].append((index + line_offset, vals))
+                            lines.insert(index + line_offset, new_line)
                             invoice_id2amount_to_pay[line.invoice.id] = 0
+                            line.amount = amount_to_pay.copy_sign(line.amount)
                         else:
                             invoice_id2amount_to_pay[line.invoice.id] = (
                                 line.amount + amount_to_pay)
                     else:
-                        res['lines']['update'].append({
-                                'id': line.id,
-                                'invoice': None,
-                                })
-        return res
+                        line.invoice = None
+            self.lines = lines
 
     @fields.depends('journal')
     def on_change_with_validation(self, name=None):
@@ -313,7 +294,7 @@ class Statement(Workflow, ModelSQL, ModelView):
 
     def _group_key(self, line):
         key = (
-            ('number', line.number or Null()),
+            ('number', line.number or Unequal()),
             ('date', line.date),
             ('party', line.party),
             )
@@ -405,8 +386,9 @@ class Statement(Workflow, ModelSQL, ModelView):
 
         for statement in statements:
             getattr(statement, 'validate_%s' % statement.validation)()
-            for line in statement.lines:
-                line.create_move()
+
+        cls.create_move(statements)
+
         cls.write(statements, {
                 'state': 'validated',
                 })
@@ -422,6 +404,103 @@ class Statement(Workflow, ModelSQL, ModelView):
                     })
 
     @classmethod
+    def create_move(cls, statements):
+        '''Create move for the statements and try to reconcile the lines.
+        Returns the list of move, statement and lines
+        '''
+        pool = Pool()
+        Line = pool.get('account.statement.line')
+        Move = pool.get('account.move')
+        MoveLine = pool.get('account.move.line')
+
+        moves = []
+        for statement in statements:
+            for key, lines in groupby(
+                    statement.lines, key=statement._group_key):
+                lines = list(lines)
+                key = dict(key)
+                move = statement._get_move(key)
+                moves.append((move, statement, lines))
+
+        Move.save([m for m, _, _ in moves])
+
+        to_write = []
+        for move, _, lines in moves:
+            to_write.append(lines)
+            to_write.append({
+                    'move': move.id,
+                    })
+        Line.write(*to_write)
+
+        move_lines = []
+        for move, statement, lines in moves:
+            amount = 0
+            amount_second_currency = 0
+            for line in lines:
+                move_line = line.get_move_line()
+                move_line.move = move
+                amount += move_line.debit - move_line.credit
+                if move_line.amount_second_currency:
+                    amount_second_currency += move_line.amount_second_currency
+                move_lines.append((move_line, line))
+
+            move_line = statement._get_move_line(
+                amount, amount_second_currency)
+            move_line.move = move
+            move_lines.append((move_line, None))
+
+        MoveLine.save([l for l, _ in move_lines])
+
+        for move_line, line in move_lines:
+            if line:
+                line.reconcile(move_line)
+        return moves
+
+    def _get_move(self, key):
+        'Return Move for the grouping key'
+        pool = Pool()
+        Move = pool.get('account.move')
+        Period = pool.get('account.period')
+
+        period_id = Period.find(self.company.id, date=key['date'])
+        return Move(
+            period=period_id,
+            journal=self.journal.journal,
+            date=key['date'],
+            origin=self,
+            company=self.company,
+            )
+
+    def _get_move_line(self, amount, amount_second_currency):
+        'Return counterpart Move Line for the amount'
+        pool = Pool()
+        MoveLine = pool.get('account.move.line')
+
+        if amount < 0:
+            account = self.journal.journal.debit_account
+        else:
+            account = self.journal.journal.credit_account
+
+        if not account:
+            self.raise_user_error('debit_credit_account_statement_journal',
+                (self.journal.rec_name,))
+
+        if self.journal.currency != self.company.currency:
+            second_currency = self.journal.currency
+            amount_second_currency *= -1
+        else:
+            second_currency = None
+            amount_second_currency = None
+
+        return MoveLine(
+            debit=abs(amount) if amount < 0 else 0,
+            credit=abs(amount) if amount > 0 else 0,
+            account=account,
+            second_currency=second_currency,
+            amount_second_currency=amount_second_currency,
+            )
+
+    @classmethod
     @ModelView.button
     @Workflow.transition('posted')
     def post(cls, statements):
@@ -457,7 +536,10 @@ class Line(ModelSQL, ModelView):
             ('kind', '!=', 'view'),
             ])
     description = fields.Char('Description')
-    move = fields.Many2One('account.move', 'Account Move', readonly=True)
+    move = fields.Many2One('account.move', 'Account Move', readonly=True,
+        domain=[
+            ('company', '=', Eval('_parent_statement', {}).get('company', -1)),
+            ])
     invoice = fields.Many2One('account.invoice', 'Invoice',
         domain=[
             If(Bool(Eval('party')), [('party', '=', Eval('party'))], []),
@@ -473,11 +555,6 @@ class Line(ModelSQL, ModelView):
         super(Line, cls).__setup__()
         cls._order.insert(0, ('sequence', 'ASC'))
         cls._error_messages.update({
-                'debit_credit_account_statement_journal': ('Please provide '
-                    'debit and credit account on statement journal "%s".'),
-                'same_debit_credit_account': ('Account "%(account)s" in '
-                    'statement line "%(line)s" is the same as the one '
-                    'configured as credit or debit on journal "%(journal)s".'),
                 'amount_greater_invoice_amount_to_pay': ('Amount "%s" is '
                     'greater than the amount to pay of invoice.'),
                 })
@@ -489,7 +566,7 @@ class Line(ModelSQL, ModelView):
     @staticmethod
     def order_sequence(tables):
         table, _ = tables[None]
-        return [table.sequence == None, table.sequence]
+        return [table.sequence == Null, table.sequence]
 
     @staticmethod
     def default_amount():
@@ -497,31 +574,24 @@ class Line(ModelSQL, ModelView):
 
     @fields.depends('amount', 'party', 'invoice')
     def on_change_party(self):
-        res = {}
-
         if self.party:
             if self.amount:
                 if self.amount > Decimal("0.0"):
-                    account = self.party.account_receivable
+                    self.account = self.party.account_receivable
                 else:
-                    account = self.party.account_payable
-                res['account'] = account.id
-                res['account.rec_name'] = account.rec_name
+                    self.account = self.party.account_payable
 
         if self.invoice:
             if self.party:
                 if self.invoice.party != self.party:
-                    res['invoice'] = None
+                    self.invoice = None
             else:
-                res['invoice'] = None
-        return res
+                self.invoice = None
 
     @fields.depends('amount', 'party', 'account', 'invoice',
         '_parent_statement.journal')
     def on_change_amount(self):
         Currency = Pool().get('currency.currency')
-        res = {}
-
         if self.party:
             if self.account and self.account not in (
                     self.party.account_receivable, self.party.account_payable):
@@ -529,11 +599,9 @@ class Line(ModelSQL, ModelView):
                 pass
             elif self.amount:
                 if self.amount > Decimal("0.0"):
-                    account = self.party.account_receivable
+                    self.account = self.party.account_receivable
                 else:
-                    account = self.party.account_payable
-                res['account'] = account.id
-                res['account.rec_name'] = account.rec_name
+                    self.account = self.party.account_payable
         if self.invoice:
             if self.amount and self.statement and self.statement.journal:
                 invoice = self.invoice
@@ -542,34 +610,26 @@ class Line(ModelSQL, ModelView):
                     amount_to_pay = Currency.compute(invoice.currency,
                         invoice.amount_to_pay, journal.currency)
                 if abs(self.amount) > amount_to_pay:
-                    res['invoice'] = None
+                    self.invoice = None
             else:
-                res['invoice'] = None
-        return res
+                self.invoice = None
 
     @fields.depends('account', 'invoice')
     def on_change_account(self):
-        res = {}
-
         if self.invoice:
             if self.account:
                 if self.invoice.account != self.account:
-                    res['invoice'] = None
+                    self.invoice = None
             else:
-                res['invoice'] = None
-        return res
+                self.invoice = None
 
     @fields.depends('party', 'account', 'invoice')
     def on_change_invoice(self):
-        changes = {}
         if self.invoice:
             if not self.party:
-                changes['party'] = self.invoice.party.id
-                changes['party.rec_name'] = self.invoice.party.rec_name
+                self.party = self.invoice.party
             if not self.account:
-                changes['account'] = self.invoice.account.id
-                changes['account.rec_name'] = self.invoice.account.rec_name
-        return changes
+                self.account = self.invoice.account
 
     def get_rec_name(self, name):
         return self.statement.rec_name
@@ -587,36 +647,12 @@ class Line(ModelSQL, ModelView):
         default.setdefault('invoice', None)
         return super(Line, cls).copy(lines, default=default)
 
-    def create_move(self):
-        '''
-        Create move for the statement line and return move if created.
-        '''
+    def reconcile(self, move_line):
         pool = Pool()
-        Move = pool.get('account.move')
-        Period = pool.get('account.period')
-        Invoice = pool.get('account.invoice')
         Currency = pool.get('currency.currency')
-        MoveLine = pool.get('account.move.line')
         Lang = pool.get('ir.lang')
-
-        if self.move:
-            return
-
-        period_id = Period.find(self.statement.company.id, date=self.date)
-
-        move_lines = self._get_move_lines()
-        move = Move(
-            period=period_id,
-            journal=self.statement.journal.journal,
-            date=self.date,
-            origin=self,
-            lines=move_lines,
-            )
-        move.save()
-
-        self.write([self], {
-                'move': move.id,
-                })
+        Invoice = pool.get('account.invoice')
+        MoveLine = pool.get('account.move.line')
 
         if self.invoice:
             with Transaction().set_context(date=self.invoice.currency_date):
@@ -641,30 +677,28 @@ class Line(ModelSQL, ModelView):
             reconcile_lines = self.invoice.get_reconcile_lines_for_amount(
                 amount)
 
-            for move_line in move.lines:
-                if move_line.account == self.invoice.account:
-                    Invoice.write([self.invoice], {
-                            'payment_lines': [('add', [move_line.id])],
-                            })
-                    break
+            assert move_line.account == self.invoice.account
+
+            Invoice.write([self.invoice], {
+                    'payment_lines': [('add', [move_line.id])],
+                    })
             if reconcile_lines[1] == Decimal('0.0'):
                 lines = reconcile_lines[0] + [move_line]
                 MoveLine.reconcile(lines)
-        return move
 
     @classmethod
     def post_move(cls, lines):
         Move = Pool().get('account.move')
-        Move.post([l.move for l in lines if l.move])
+        Move.post(list({l.move for l in lines if l.move}))
 
     @classmethod
     def delete_move(cls, lines):
         Move = Pool().get('account.move')
-        Move.delete([l.move for l in lines if l.move])
+        Move.delete(list({l.move for l in lines if l.move}))
 
-    def _get_move_lines(self):
+    def get_move_line(self):
         '''
-        Return the move lines for the statement line
+        Return the move line for the statement line
         '''
         pool = Pool()
         MoveLine = pool.get('account.move.line')
@@ -675,46 +709,93 @@ class Line(ModelSQL, ModelView):
                 self.amount, self.statement.company.currency)
         if self.statement.journal.currency != self.statement.company.currency:
             second_currency = self.statement.journal.currency.id
-            amount_second_currency = abs(self.amount)
+            amount_second_currency = -self.amount
         else:
             amount_second_currency = None
             second_currency = None
 
-        move_lines = []
-        move_lines.append(MoveLine(
-                description=self.description,
-                debit=amount < zero and -amount or zero,
-                credit=amount >= zero and amount or zero,
-                account=self.account,
-                party=self.party if self.account.party_required else None,
-                second_currency=second_currency,
-                amount_second_currency=amount_second_currency,
-                ))
+        return MoveLine(
+            description=self.description,
+            debit=amount < zero and -amount or zero,
+            credit=amount >= zero and amount or zero,
+            account=self.account,
+            party=self.party if self.account.party_required else None,
+            second_currency=second_currency,
+            amount_second_currency=amount_second_currency,
+            )
 
-        journal = self.statement.journal.journal
-        if self.amount >= zero:
-            account = journal.debit_account
-        else:
-            account = journal.credit_account
-        if not account:
-            self.raise_user_error('debit_credit_account_statement_journal',
-                (journal.rec_name,))
-        if self.account == account:
-            self.raise_user_error('same_debit_credit_account', {
-                    'account': self.account.rec_name,
-                    'line': self.rec_name,
-                    'journal': journal,
-                    })
-        move_lines.append(MoveLine(
-                description=self.description,
-                debit=amount >= zero and amount or zero,
-                credit=amount < zero and -amount or zero,
-                account=account,
-                party=self.party if account.party_required else None,
-                second_currency=second_currency,
-                amount_second_currency=amount_second_currency,
-                ))
-        return move_lines
+
+class LineGroup(ModelSQL, ModelView):
+    'Account Statement Line Group'
+    __name__ = 'account.statement.line.group'
+    _rec_name = 'number'
+    statement = fields.Many2One('account.statement', 'Statement')
+    journal = fields.Function(fields.Many2One('account.statement.journal',
+            'Journal'), 'get_journal', searcher='search_journal')
+    number = fields.Char('Number')
+    date = fields.Date('Date')
+    amount = fields.Numeric('Amount',
+        digits=(16, Eval('currency_digits', 2)),
+        depends=['currency_digits'])
+    currency = fields.Function(fields.Many2One('currency.currency',
+            'Currency'), 'get_currency')
+    currency_digits = fields.Function(fields.Integer('Currency Digits'),
+        'get_currency_digits')
+    party = fields.Many2One('party.party', 'Party')
+    move = fields.Many2One('account.move', 'Move')
+
+    @classmethod
+    def __setup__(cls):
+        super(LineGroup, cls).__setup__()
+        cls._order.insert(0, ('date', 'DESC'))
+
+    @classmethod
+    def _grouped_columns(cls, line):
+        return [
+            Max(line.statement).as_('statement'),
+            Max(line.number).as_('number'),
+            Max(line.date).as_('date'),
+            Sum(line.amount).as_('amount'),
+            Max(line.party).as_('party'),
+            ]
+
+    @classmethod
+    def table_query(cls):
+        pool = Pool()
+        Move = pool.get('account.move')
+        Line = pool.get('account.statement.line')
+        move = Move.__table__()
+        line = Line.__table__()
+
+        std_columns = [
+            move.id,
+            move.create_uid,
+            move.create_date,
+            move.write_uid,
+            move.write_date,
+            ]
+
+        columns = (std_columns + [move.id.as_('move')]
+            + cls._grouped_columns(line))
+        return move.join(line,
+            condition=move.id == line.move
+            ).select(*columns,
+                where=move.origin.ilike(Statement.__name__ + ',%'),
+                group_by=std_columns + [move.id]
+                )
+
+    def get_journal(self, name):
+        return self.statement.journal.id
+
+    @classmethod
+    def search_journal(cls, name, clause):
+        return [('statement.journal',) + tuple(clause[1:])]
+
+    def get_currency(self, name):
+        return self.statement.journal.currency.id
+
+    def get_currency_digits(self, name):
+        return self.statement.journal.currency.digits
 
 
 class StatementReport(CompanyReport):
diff --git a/statement.xml b/statement.xml
index 1d2780f..a1ebd97 100644
--- a/statement.xml
+++ b/statement.xml
@@ -48,21 +48,21 @@ this repository contains the full copyright notices and license terms. -->
             id="act_statement_form_domain_draft">
             <field name="name">Draft</field>
             <field name="sequence" eval="10"/>
-            <field name="domain">[('state', '=', 'draft')]</field>
+            <field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
             <field name="act_window" ref="act_statement_form"/>
         </record>
         <record model="ir.action.act_window.domain"
             id="act_statement_form_domain_validated">
             <field name="name">Validated</field>
             <field name="sequence" eval="20"/>
-            <field name="domain">[('state', '=', 'validated')]</field>
+            <field name="domain" eval="[('state', '=', 'validated')]" pyson="1"/>
             <field name="act_window" ref="act_statement_form"/>
         </record>
         <record model="ir.action.act_window.domain"
             id="act_statement_form_domain_posted">
             <field name="name">Posted</field>
             <field name="sequence" eval="30"/>
-            <field name="domain">[('state', '=', 'posted')]</field>
+            <field name="domain" eval="[('state', '=', 'posted')]" pyson="1"/>
             <field name="act_window" ref="act_statement_form"/>
         </record>
         <record model="ir.action.act_window.domain"
@@ -80,7 +80,9 @@ this repository contains the full copyright notices and license terms. -->
             <field name="global_p" eval="True"/>
         </record>
         <record model="ir.rule" id="rule_statement1">
-            <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+            <field name="domain"
+                eval="[('company', '=', Eval('user', {}).get('company', None))]"
+                pyson="1"/>
             <field name="rule_group" ref="rule_group_statement"/>
         </record>
 
@@ -116,6 +118,48 @@ this repository contains the full copyright notices and license terms. -->
             <field name="name">statement_line_tree_editable</field>
         </record>
 
+        <record model="ir.action.act_window" id="act_statement_line_move">
+            <field name="name">Statement Lines</field>
+            <field name="res_model">account.statement.line</field>
+            <field name="domain"
+                eval="[('move', 'in', Eval('active_ids'))]" pyson="1"/>
+        </record>
+        <record model="ir.action.keyword" id="act_statement_line_move_keyword1">
+            <field name="keyword">form_relate</field>
+            <field name="model">account.move,-1</field>
+            <field name="action" ref="act_statement_line_move"/>
+        </record>
+
+        <record model="ir.action.act_window" id="act_statement_line_move_line">
+            <field name="name">Statement Lines</field>
+            <field name="res_model">account.statement.line</field>
+            <field name="domain"
+                eval="[('move.lines', 'in', Eval('active_ids'))]" pyson="1"/>
+        </record>
+        <record model="ir.action.keyword" id="act_statement_line_move_line_keyword1">
+            <field name="keyword">form_relate</field>
+            <field name="model">account.move.line,-1</field>
+            <field name="action" ref="act_statement_line_move_line"/>
+        </record>
+
+        <record model="ir.rule.group" id="rule_group_statement_line">
+            <field name="model" search="[('model', '=', 'account.statement.line')]"/>
+            <field name="global_p" eval="True"/>
+        </record>
+        <record model="ir.rule" id="rule_statement_line1">
+            <field name="domain"
+                eval="[('statement.company', '=', Eval('user', {}).get('company', None))]"
+                pyson="1"/>
+            <field name="rule_group" ref="rule_group_statement_line"/>
+        </record>
+
+        <record model="ir.model.access" id="access_statement">
+            <field name="model" search="[('model', '=', 'account.statement')]"/>
+            <field name="perm_read" eval="False"/>
+            <field name="perm_write" eval="False"/>
+            <field name="perm_create" eval="False"/>
+            <field name="perm_delete" eval="False"/>
+        </record>
         <record model="ir.model.access" id="access_statement_account_admin">
             <field name="model" search="[('model', '=', 'account.statement')]"/>
             <field name="group" ref="account.group_account_admin"/>
@@ -141,6 +185,13 @@ this repository contains the full copyright notices and license terms. -->
             <field name="perm_delete" eval="True"/>
         </record>
 
+        <record model="ir.model.access" id="access_statement_line">
+            <field name="model" search="[('model', '=', 'account.statement.line')]"/>
+            <field name="perm_read" eval="False"/>
+            <field name="perm_write" eval="False"/>
+            <field name="perm_create" eval="False"/>
+            <field name="perm_delete" eval="False"/>
+        </record>
         <record model="ir.model.access" id="access_statement_line_account_admin">
             <field name="model" search="[('model', '=', 'account.statement.line')]"/>
             <field name="group" ref="account.group_account_admin"/>
@@ -215,10 +266,83 @@ this repository contains the full copyright notices and license terms. -->
             <field name="group" ref="account.group_account_admin"/>
         </record>
 
+        <record model="ir.ui.view" id="line_group_view_form">
+            <field name="model">account.statement.line.group</field>
+            <field name="type">form</field>
+            <field name="name">line_group_form</field>
+        </record>
+        <record model="ir.ui.view" id="line_group_view_list">
+            <field name="model">account.statement.line.group</field>
+            <field name="type">tree</field>
+            <field name="name">line_group_list</field>
+        </record>
+
+        <record model="ir.action.act_window" id="act_line_group_form">
+            <field name="name">Statement Line Groups</field>
+            <field name="res_model">account.statement.line.group</field>
+        </record>
+        <record model="ir.action.act_window.view" id="act_line_group_form_view1">
+            <field name="sequence" eval="10"/>
+            <field name="view" ref="line_group_view_list"/>
+            <field name="act_window" ref="act_line_group_form"/>
+        </record>
+        <record model="ir.action.act_window.view" id="act_line_group_form_view2">
+            <field name="sequence" eval="20"/>
+            <field name="view" ref="line_group_view_form"/>
+            <field name="act_window" ref="act_line_group_form"/>
+        </record>
+        <menuitem parent="menu_statement_form" sequence="10"
+            action="act_line_group_form" id="menu_line_group_form"/>
+
+        <record model="ir.rule.group" id="rule_group_line_group">
+            <field name="model" search="[('model', '=', 'account.statement.line.group')]"/>
+            <field name="global_p" eval="True"/>
+        </record>
+        <record model="ir.rule" id="rule_line_group1">
+            <field name="domain"
+                eval="[('statement.company', '=', Eval('user', {}).get('company', None))]"
+                pyson="1"/>
+            <field name="rule_group" ref="rule_group_line_group"/>
+        </record>
+
+        <record model="ir.model.access" id="access_line_group">
+            <field name="model" search="[('model', '=', 'account.statement.line.group')]"/>
+            <field name="perm_read" eval="False"/>
+            <field name="perm_write" eval="False"/>
+            <field name="perm_create" eval="False"/>
+            <field name="perm_delete" eval="False"/>
+        </record>
+        <record model="ir.model.access" id="access_line_group_account_admin">
+            <field name="model" search="[('model', '=', 'account.statement.line.group')]"/>
+            <field name="group" ref="account.group_account_admin"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="True"/>
+            <field name="perm_create" eval="True"/>
+            <field name="perm_delete" eval="True"/>
+        </record>
+        <record model="ir.model.access" id="access_line_group_account">
+            <field name="model" search="[('model', '=', 'account.statement.line.group')]"/>
+            <field name="group" ref="account.group_account"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="True"/>
+            <field name="perm_create" eval="True"/>
+            <field name="perm_delete" eval="True"/>
+        </record>
+        <record model="ir.model.access" id="access_line_group_statement">
+            <field name="model" search="[('model', '=', 'account.statement.line.group')]"/>
+            <field name="group" ref="group_statement"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="True"/>
+            <field name="perm_create" eval="True"/>
+            <field name="perm_delete" eval="True"/>
+        </record>
+
         <record model="ir.action.act_window" id="act_move_lines_form">
             <field name="name">Move Lines</field>
             <field name="res_model">account.move.line</field>
-            <field name="domain">[('origin.statement.id', 'in', Eval('active_ids'), 'account.statement.line')]</field>
+            <field name="domain"
+                eval="[('origin.id', 'in', Eval('active_ids'), 'account.statement')]"
+                pyson="1"/>
         </record>
         <record model="ir.action.keyword" id="act_move_lines_form_keyword1">
             <field name="keyword">form_relate</field>
@@ -226,5 +350,55 @@ this repository contains the full copyright notices and license terms. -->
             <field name="action" ref="act_move_lines_form"/>
         </record>
 
+        <record model="ir.action.act_window" id="act_move_lines_form2">
+            <field name="name">Move Lines</field>
+            <field name="res_model">account.move.line</field>
+            <field name="domain"
+                eval="[('origin.id', 'in', Eval('active_ids'), 'account.statement.line')]"
+                pyson="1"/>
+        </record>
+        <record model="ir.action.keyword" id="act_move_lines_form2_keyword1">
+            <field name="keyword">form_relate</field>
+            <field name="model">account.statement.line,-1</field>
+            <field name="action" ref="act_move_lines_form2"/>
+        </record>
+
+        <record model="ir.action.act_window" id="act_moves_form">
+            <field name="name">Moves</field>
+            <field name="res_model">account.move</field>
+            <field name="domain"
+                eval="[('origin.statement.id', 'in', Eval('active_ids'), 'account.statement.line')]"
+                pyson="1"/>
+        </record>
+        <record model="ir.action.keyword" id="act_moves_form_keyword1">
+            <field name="keyword">form_relate</field>
+            <field name="model">account.statement,-1</field>
+            <field name="action" ref="act_moves_form"/>
+        </record>
+
+        <record model="ir.action.act_window" id="act_moves_form2">
+            <field name="name">Moves</field>
+            <field name="res_model">account.move</field>
+            <field name="domain"
+                eval="[('origin.id', 'in', Eval('active_ids'), 'account.statement.line')]"
+                pyson="1"/>
+        </record>
+        <record model="ir.action.keyword" id="act_moves_form2_keyword1">
+            <field name="keyword">form_relate</field>
+            <field name="model">account.statement.line,-1</field>
+            <field name="action" ref="act_moves_form2"/>
+        </record>
+
+        <record model="ir.action.act_window" id="act_line_groups_form">
+            <field name="name">Line Groups</field>
+            <field name="res_model">account.statement.line.group</field>
+            <field name="domain"
+                eval="[('journal', 'in', Eval('active_ids'))]" pyson="1"/>
+        </record>
+        <record model="ir.action.keyword" id="act_line_groups_form_keyword1">
+            <field name="keyword">form_relate</field>
+            <field name="model">account.statement.journal,-1</field>
+            <field name="action" ref="act_line_groups_form"/>
+        </record>
     </data>
 </tryton>
diff --git a/tests/__init__.py b/tests/__init__.py
index fec38bf..5f19aa6 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 .test_account_statement import suite
 
diff --git a/tests/scenario_account_statement.rst b/tests/scenario_account_statement.rst
index 2fcaf0c..742d027 100644
--- a/tests/scenario_account_statement.rst
+++ b/tests/scenario_account_statement.rst
@@ -2,16 +2,18 @@
 Account Statement Scenario
 ==========================
 
-=============
-General Setup
-=============
-
 Imports::
 
     >>> import datetime
     >>> from dateutil.relativedelta import relativedelta
     >>> from decimal import Decimal
     >>> from proteus import config, Model, Wizard, Report
+    >>> from trytond.modules.company.tests.tools import create_company, \
+    ...     get_company
+    >>> from trytond.modules.account.tests.tools import create_fiscalyear, \
+    ...     create_chart, get_accounts
+    >>> from.trytond.modules.account_invoice.tests.tools import \
+    ...     set_fiscalyear_invoice_sequences, create_payment_term
     >>> today = datetime.date.today()
 
 Create database::
@@ -25,34 +27,14 @@ Install account_statement and account_invoice::
     >>> modules = Module.find([
     ...     ('name', 'in', ('account_statement', 'account_invoice')),
     ... ])
-    >>> Module.install([x.id for x in modules], config.context)
+    >>> for module in modules:
+    ...     module.click('install')
     >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
 
 Create company::
 
-    >>> Currency = Model.get('currency.currency')
-    >>> CurrencyRate = Model.get('currency.currency.rate')
-    >>> Company = Model.get('company.company')
-    >>> Party = Model.get('party.party')
-    >>> company_config = Wizard('company.company.config')
-    >>> company_config.execute('company')
-    >>> company = company_config.form
-    >>> party = Party(name='Dunder Mifflin')
-    >>> party.save()
-    >>> company.party = party
-    >>> currencies = Currency.find([('code', '=', 'USD')])
-    >>> if not currencies:
-    ...     currency = Currency(name='U.S. Dollar', symbol='$', code='USD',
-    ...         rounding=Decimal('0.01'), mon_grouping='[3, 3, 0]',
-    ...         mon_decimal_point='.', mon_thousands_sep=',')
-    ...     currency.save()
-    ...     CurrencyRate(date=today + relativedelta(month=1, day=1),
-    ...         rate=Decimal('1.0'), currency=currency).save()
-    ... else:
-    ...     currency, = currencies
-    >>> company.currency = currency
-    >>> company_config.execute('add')
-    >>> company, = Company.find()
+    >>> _ = create_company()
+    >>> company = get_company()
 
 Reload the context::
 
@@ -61,63 +43,19 @@ Reload the context::
 
 Create fiscal year::
 
-    >>> FiscalYear = Model.get('account.fiscalyear')
-    >>> Sequence = Model.get('ir.sequence')
-    >>> SequenceStrict = Model.get('ir.sequence.strict')
-    >>> fiscalyear = FiscalYear(name='%s' % today.year)
-    >>> fiscalyear.start_date = today + relativedelta(month=1, day=1)
-    >>> fiscalyear.end_date = today + relativedelta(month=12, day=31)
-    >>> fiscalyear.company = company
-    >>> post_move_sequence = Sequence(name='%s' % today.year,
-    ...     code='account.move',
-    ...     company=company)
-    >>> post_move_sequence.save()
-    >>> fiscalyear.post_move_sequence = post_move_sequence
-    >>> invoice_sequence = SequenceStrict(name='%s' % today.year,
-    ...     code='account.invoice',
-    ...     company=company)
-    >>> invoice_sequence.save()
-    >>> fiscalyear.out_invoice_sequence = invoice_sequence
-    >>> fiscalyear.in_invoice_sequence = invoice_sequence
-    >>> fiscalyear.out_credit_note_sequence = invoice_sequence
-    >>> fiscalyear.in_credit_note_sequence = invoice_sequence
-    >>> fiscalyear.save()
-    >>> FiscalYear.create_period([fiscalyear.id], config.context)
+    >>> fiscalyear = set_fiscalyear_invoice_sequences(
+    ...     create_fiscalyear(company))
+    >>> fiscalyear.click('create_period')
 
 Create chart of accounts::
 
-    >>> AccountTemplate = Model.get('account.account.template')
-    >>> Account = Model.get('account.account')
-    >>> AccountJournal = Model.get('account.journal')
-    >>> account_template, = AccountTemplate.find([('parent', '=', None)])
-    >>> create_chart = Wizard('account.create_chart')
-    >>> create_chart.execute('account')
-    >>> create_chart.form.account_template = account_template
-    >>> create_chart.form.company = company
-    >>> create_chart.execute('create_account')
-    >>> receivable, = Account.find([
-    ...     ('kind', '=', 'receivable'),
-    ...     ('company', '=', company.id),
-    ... ])
-    >>> payable, = Account.find([
-    ...     ('kind', '=', 'payable'),
-    ...     ('company', '=', company.id),
-    ... ])
-    >>> revenue, = Account.find([
-    ...     ('kind', '=', 'revenue'),
-    ...     ('company', '=', company.id),
-    ... ])
-    >>> expense, = Account.find([
-    ...     ('kind', '=', 'expense'),
-    ...     ('company', '=', company.id),
-    ... ])
-    >>> cash, = Account.find([
-    ...     ('name', '=', 'Main Cash'),
-    ...     ('company', '=', company.id),
-    ... ])
-    >>> create_chart.form.account_receivable = receivable
-    >>> create_chart.form.account_payable = payable
-    >>> create_chart.execute('create_properties')
+    >>> _ = create_chart(company)
+    >>> accounts = get_accounts(company)
+    >>> receivable = accounts['receivable']
+    >>> payable = accounts['payable']
+    >>> revenue = accounts['revenue']
+    >>> expense = accounts['expense']
+    >>> cash = accounts['cash']
 
 Create parties::
 
@@ -129,42 +67,33 @@ Create parties::
 
 Create payment term::
 
-    >>> PaymentTerm = Model.get('account.invoice.payment_term')
-    >>> PaymentTermLine = Model.get('account.invoice.payment_term.line')
-    >>> payment_term = PaymentTerm(name='Direct')
-    >>> payment_term_line = PaymentTermLine(type='remainder', days=0)
-    >>> payment_term.lines.append(payment_term_line)
+    >>> payment_term = create_payment_term()
     >>> payment_term.save()
 
 Create 2 customer invoices::
 
     >>> Invoice = Model.get('account.invoice')
-    >>> InvoiceLine = Model.get('account.invoice.line')
     >>> customer_invoice1 = Invoice(type='out_invoice')
     >>> customer_invoice1.party = customer
     >>> customer_invoice1.payment_term = payment_term
-    >>> invoice_line = InvoiceLine()
-    >>> customer_invoice1.lines.append(invoice_line)
+    >>> invoice_line = customer_invoice1.lines.new()
     >>> invoice_line.quantity = 1
     >>> invoice_line.unit_price = Decimal('100')
     >>> invoice_line.account = revenue
     >>> invoice_line.description = 'Test'
-    >>> customer_invoice1.save()
-    >>> Invoice.post([customer_invoice1.id], config.context)
+    >>> customer_invoice1.click('post')
     >>> customer_invoice1.state
     u'posted'
 
     >>> customer_invoice2 = Invoice(type='out_invoice')
     >>> customer_invoice2.party = customer
     >>> customer_invoice2.payment_term = payment_term
-    >>> invoice_line = InvoiceLine()
-    >>> customer_invoice2.lines.append(invoice_line)
+    >>> invoice_line = customer_invoice2.lines.new()
     >>> invoice_line.quantity = 1
     >>> invoice_line.unit_price = Decimal('150')
     >>> invoice_line.account = revenue
     >>> invoice_line.description = 'Test'
-    >>> customer_invoice2.save()
-    >>> Invoice.post([customer_invoice2.id], config.context)
+    >>> customer_invoice2.click('post')
     >>> customer_invoice2.state
     u'posted'
 
@@ -173,14 +102,12 @@ Create 1 customer credit note::
     >>> customer_credit_note = Invoice(type='out_credit_note')
     >>> customer_credit_note.party = customer
     >>> customer_credit_note.payment_term = payment_term
-    >>> invoice_line = InvoiceLine()
-    >>> customer_credit_note.lines.append(invoice_line)
+    >>> invoice_line = customer_credit_note.lines.new()
     >>> invoice_line.quantity = 1
     >>> invoice_line.unit_price = Decimal('50')
     >>> invoice_line.account = revenue
     >>> invoice_line.description = 'Test'
-    >>> customer_credit_note.save()
-    >>> Invoice.post([customer_credit_note.id], config.context)
+    >>> customer_credit_note.click('post')
     >>> customer_credit_note.state
     u'posted'
 
@@ -189,15 +116,13 @@ Create 1 supplier invoices::
     >>> supplier_invoice = Invoice(type='in_invoice')
     >>> supplier_invoice.party = supplier
     >>> supplier_invoice.payment_term = payment_term
-    >>> invoice_line = InvoiceLine()
-    >>> supplier_invoice.lines.append(invoice_line)
+    >>> invoice_line = supplier_invoice.lines.new()
     >>> invoice_line.quantity = 1
     >>> invoice_line.unit_price = Decimal('50')
     >>> invoice_line.account = expense
     >>> invoice_line.description = 'Test'
     >>> supplier_invoice.invoice_date = today
-    >>> supplier_invoice.save()
-    >>> Invoice.post([supplier_invoice.id], config.context)
+    >>> supplier_invoice.click('post')
     >>> supplier_invoice.state
     u'posted'
 
@@ -206,6 +131,8 @@ Create statement::
     >>> StatementJournal = Model.get('account.statement.journal')
     >>> Statement = Model.get('account.statement')
     >>> StatementLine = Model.get('account.statement.line')
+    >>> Sequence = Model.get('ir.sequence')
+    >>> AccountJournal = Model.get('account.journal')
 
     >>> sequence = Sequence(name='Satement',
     ...     code='account.journal',
@@ -285,7 +212,7 @@ Paid 50 to supplier::
 
 Validate statement::
 
-    >>> Statement.validate_statement([statement.id], config.context)
+    >>> statement.click('validate_statement')
     >>> statement.state
     u'validated'
 
@@ -316,29 +243,25 @@ Let's test the negative amount version of the supplier/customer invoices::
     >>> customer_invoice3 = Invoice(type='out_invoice')
     >>> customer_invoice3.party = customer
     >>> customer_invoice3.payment_term = payment_term
-    >>> invoice_line = InvoiceLine()
-    >>> customer_invoice3.lines.append(invoice_line)
+    >>> invoice_line = customer_invoice3.lines.new()
     >>> invoice_line.quantity = 1
     >>> invoice_line.unit_price = Decimal('-120')
     >>> invoice_line.account = revenue
     >>> invoice_line.description = 'Test'
-    >>> customer_invoice3.save()
-    >>> Invoice.post([customer_invoice3.id], config.context)
+    >>> customer_invoice3.click('post')
     >>> customer_invoice3.state
     u'posted'
 
     >>> supplier_invoice2 = Invoice(type='in_invoice')
     >>> supplier_invoice2.party = supplier
     >>> supplier_invoice2.payment_term = payment_term
-    >>> invoice_line = InvoiceLine()
-    >>> supplier_invoice2.lines.append(invoice_line)
+    >>> invoice_line = supplier_invoice2.lines.new()
     >>> invoice_line.quantity = 1
     >>> invoice_line.unit_price = Decimal('-40')
     >>> invoice_line.account = expense
     >>> invoice_line.description = 'Test'
     >>> supplier_invoice2.invoice_date = today
-    >>> supplier_invoice2.save()
-    >>> Invoice.post([supplier_invoice2.id], config.context)
+    >>> supplier_invoice2.click('post')
     >>> supplier_invoice2.state
     u'posted'
 
@@ -376,13 +299,11 @@ Testing the use of an invoice in multiple statements::
     >>> customer_invoice4 = Invoice(type='out_invoice')
     >>> customer_invoice4.party = customer
     >>> customer_invoice4.payment_term = payment_term
-    >>> invoice_line = InvoiceLine()
-    >>> customer_invoice4.lines.append(invoice_line)
+    >>> invoice_line = customer_invoice4.lines.new()
     >>> invoice_line.quantity = 1
     >>> invoice_line.unit_price = Decimal('300')
     >>> invoice_line.account = revenue
     >>> invoice_line.description = 'Test'
-    >>> customer_invoice4.save()
     >>> customer_invoice4.click('post')
     >>> customer_invoice4.state
     u'posted'
diff --git a/tests/test_account_statement.py b/tests/test_account_statement.py
index 0384bf6..551a3f3 100644
--- a/tests/test_account_statement.py
+++ b/tests/test_account_statement.py
@@ -1,25 +1,15 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
 import unittest
 import doctest
 import trytond.tests.test_tryton
-from trytond.tests.test_tryton import test_view, test_depends
+from trytond.tests.test_tryton import ModuleTestCase
 from trytond.tests.test_tryton import doctest_setup, doctest_teardown
 
 
-class AccountStatementTestCase(unittest.TestCase):
+class AccountStatementTestCase(ModuleTestCase):
     'Test AccountStatement module'
-
-    def setUp(self):
-        trytond.tests.test_tryton.install_module('account_statement')
-
-    def test0005views(self):
-        'Test views'
-        test_view('account_statement')
-
-    def test0006depends(self):
-        'Test depends'
-        test_depends()
+    module = 'account_statement'
 
 
 def suite():
diff --git a/tryton.cfg b/tryton.cfg
index b426c98..f9b29d8 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
 [tryton]
-version=3.4.1
+version=3.6.0
 depends:
     account
     account_invoice
diff --git a/trytond_account_statement.egg-info/PKG-INFO b/trytond_account_statement.egg-info/PKG-INFO
index 55b11bc..57add82 100644
--- a/trytond_account_statement.egg-info/PKG-INFO
+++ b/trytond_account_statement.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond-account-statement
-Version: 3.4.1
+Version: 3.6.0
 Summary: Tryton module with account statements
 Home-page: http://www.tryton.org/
 Author: Tryton
 Author-email: issue_tracker at tryton.org
 License: GPL-3
-Download-URL: http://downloads.tryton.org/3.4/
+Download-URL: http://downloads.tryton.org/3.6/
 Description: trytond_account_statement
         =========================
         
@@ -64,5 +64,7 @@ Classifier: Natural Language :: Slovenian
 Classifier: Natural Language :: Spanish
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Office/Business
 Classifier: Topic :: Office/Business :: Financial :: Accounting
diff --git a/trytond_account_statement.egg-info/SOURCES.txt b/trytond_account_statement.egg-info/SOURCES.txt
index 12837aa..622fb2f 100644
--- a/trytond_account_statement.egg-info/SOURCES.txt
+++ b/trytond_account_statement.egg-info/SOURCES.txt
@@ -32,6 +32,8 @@ tryton.cfg
 ./tests/__init__.py
 ./tests/scenario_account_statement.rst
 ./tests/test_account_statement.py
+./view/line_group_form.xml
+./view/line_group_list.xml
 ./view/statement_form.xml
 ./view/statement_journal_form.xml
 ./view/statement_journal_tree.xml
@@ -60,6 +62,8 @@ trytond_account_statement.egg-info/entry_points.txt
 trytond_account_statement.egg-info/not-zip-safe
 trytond_account_statement.egg-info/requires.txt
 trytond_account_statement.egg-info/top_level.txt
+view/line_group_form.xml
+view/line_group_list.xml
 view/statement_form.xml
 view/statement_journal_form.xml
 view/statement_journal_tree.xml
diff --git a/trytond_account_statement.egg-info/requires.txt b/trytond_account_statement.egg-info/requires.txt
index 08bc460..7d062c6 100644
--- a/trytond_account_statement.egg-info/requires.txt
+++ b/trytond_account_statement.egg-info/requires.txt
@@ -1,7 +1,7 @@
-trytond_account >= 3.4, < 3.5
-trytond_account_invoice >= 3.4, < 3.5
-trytond_company >= 3.4, < 3.5
-trytond_currency >= 3.4, < 3.5
-trytond_party >= 3.4, < 3.5
-trytond >= 3.4, < 3.5
-python-sql
\ No newline at end of file
+python-sql >= 0.4
+trytond_account >= 3.6, < 3.7
+trytond_account_invoice >= 3.6, < 3.7
+trytond_company >= 3.6, < 3.7
+trytond_currency >= 3.6, < 3.7
+trytond_party >= 3.6, < 3.7
+trytond >= 3.6, < 3.7
\ No newline at end of file
diff --git a/view/line_group_form.xml b/view/line_group_form.xml
new file mode 100644
index 0000000..bfdf3c6
--- /dev/null
+++ b/view/line_group_form.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<form string="Statement Line Group">
+    <label name="statement"/>
+    <field name="statement"/>
+    <label name="journal"/>
+    <field name="journal"/>
+    <label name="number"/>
+    <field name="number"/>
+    <label name="date"/>
+    <field name="date"/>
+    <label name="amount"/>
+    <field name="amount"/>
+    <label name="currency"/>
+    <field name="currency"/>
+    <label name="party"/>
+    <field name="party"/>
+    <label name="move"/>
+    <field name="move"/>
+</form>
diff --git a/view/line_group_list.xml b/view/line_group_list.xml
new file mode 100644
index 0000000..cab2b40
--- /dev/null
+++ b/view/line_group_list.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Statement Line Groups">
+    <field name="journal"/>
+    <field name="statement"/>
+    <field name="number"/>
+    <field name="date"/>
+    <field name="amount"/>
+    <field name="currency"/>
+    <field name="party"/>
+    <field name="move"/>
+</tree>
-- 
tryton-modules-account-statement



More information about the tryton-debian-vcs mailing list