[tryton-debian-vcs] tryton-modules-account-statement branch upstream updated. upstream/3.2.0-1-g330ac50

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Thu Oct 23 12:14:13 UTC 2014


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

commit 330ac509d861e0de4f2d2c86d6104f96d39d56a3
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Tue Oct 21 11:29:07 2014 +0200

    Adding upstream version 3.4.0.
    
    Signed-off-by: Mathias Behrle <mathiasb at m9s.biz>

diff --git a/CHANGELOG b/CHANGELOG
index 7c13179..2448d8f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,11 @@
+Version 3.4.0 - 2014-10-20
+* Bug fixes (see mercurial logs for details)
+* Add different validation type on journal
+* Add explicit name on statement
+* Add report to statement
+* Add number and sequence on statement line
+* Switch journal debit/credit account usage
+
 Version 3.2.0 - 2014-04-21
 * Bug fixes (see mercurial logs for details)
 * Append new line under the original one
diff --git a/MANIFEST.in b/MANIFEST.in
index 5abcf8d..b3463bd 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -6,5 +6,7 @@ include LICENSE
 include tryton.cfg
 include *.xml
 include view/*.xml
+include *.odt
 include locale/*.po
 include tests/*.rst
+include doc/*.rst
diff --git a/PKG-INFO b/PKG-INFO
index 10e9944..4fb4dc4 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond_account_statement
-Version: 3.2.0
+Version: 3.4.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.2/
+Download-URL: http://downloads.tryton.org/3.4/
 Description: trytond_account_statement
         =========================
         
diff --git a/__init__.py b/__init__.py
index ec6972d..246d390 100644
--- a/__init__.py
+++ b/__init__.py
@@ -14,3 +14,6 @@ def register():
         Line,
         Move,
         module='account_statement', type_='model')
+    Pool.register(
+        StatementReport,
+        module='account_statement', type_='report')
diff --git a/doc/index.rst b/doc/index.rst
new file mode 100644
index 0000000..00fa451
--- /dev/null
+++ b/doc/index.rst
@@ -0,0 +1,69 @@
+Account Statement Module
+########################
+
+The account_statement module allows to book statements. Statement can be used
+for bank statement, cash daybook etc.
+
+Statement
+*********
+
+A statement groups many lines under a journal for a date. It is mainly defined
+by:
+
+- Name.
+- Journal.
+- Date.
+
+The statement can be in one of this states:
+
+* Draft
+
+  The statement is waiting for validation
+
+* Validated
+
+  The statement is validated and is waiting to be posted. The moves for each
+  line are already created in draft state.
+
+* Posted
+
+  The statement is posted which means all the moves have been posted.
+
+* Canceled
+
+  The statement is canceled which means all the moves previously created have
+  been deleted.
+
+Line
+****
+
+A Statement Line is mainly defined by:
+
+- Date.
+- Amount.
+- Party.
+- Account.
+- Invoice.
+- Description.
+
+Journal
+*******
+
+A Statement Journal is mainly defined by:
+
+- Name.
+- Journal (from account).
+- Currency.
+- Validation Type:
+  - Balance
+  - Amount
+  - Number of Lines
+
+The statements are validated following the validation type of the journal.
+The Balance validation requests to set the start and end balance (the start is
+automaticaly filled with the end balance of the last statement on the same
+journal) and the difference is checked against the total amount of the lines.
+The Amount validation requests to set the total amount to check against the
+total amount of the lines.
+The Number of Lines requests to set the number of unique lines on the
+statement.
diff --git a/journal.py b/journal.py
index 15a4c2b..10cd2af 100644
--- a/journal.py
+++ b/journal.py
@@ -16,6 +16,11 @@ class Journal(ModelSQL, ModelView):
     currency = fields.Many2One('currency.currency', 'Currency', required=True)
     company = fields.Many2One('company.company', 'Company', required=True,
             select=True)
+    validation = fields.Selection([
+            ('balance', 'Balance'),
+            ('amount', 'Amount'),
+            ('number_of_lines', 'Number of Lines'),
+            ], 'Validation Type', required=True)
 
     @staticmethod
     def default_currency():
@@ -27,3 +32,7 @@ class Journal(ModelSQL, ModelView):
     @staticmethod
     def default_company():
         return Transaction().context.get('company')
+
+    @staticmethod
+    def default_validation():
+        return 'balance'
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index 1f60a0b..1e03722 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -25,11 +25,19 @@ msgid "End Balance must be \"%s\"."
 msgstr ""
 
 msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr ""
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr ""
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
+msgid "There are paid invoices on draft statements."
+msgstr ""
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
 msgstr ""
 
 msgctxt "field:account.statement,balance:"
@@ -68,10 +76,20 @@ msgctxt "field:account.statement,journal:"
 msgid "Journal"
 msgstr "Дневник"
 
+#, fuzzy
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
+msgid "Lines"
 msgstr "Транзакции"
 
+#, fuzzy
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Условие за плащане"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr ""
+
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
 msgstr "Име"
@@ -84,6 +102,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Състояние"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr ""
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr ""
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Променено на"
@@ -124,6 +150,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Име"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr ""
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Променено на"
@@ -168,6 +198,11 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Движение по сметка"
 
+#, fuzzy
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Номер"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Партньор"
@@ -176,6 +211,11 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Име"
 
+#, fuzzy
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Последователност"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Отчет"
@@ -217,6 +257,11 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Дневник за отчети"
 
+#, fuzzy
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Отчет"
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr ""
@@ -260,6 +305,79 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Отчет"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Сума"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Отказан"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Дата"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Дата:"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Описание"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Проект"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Номер"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Управление на партньор"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Телефон:"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Отчет"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Общо"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "ДДС номер:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Отказан"
@@ -276,6 +394,20 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Проверен"
 
+#, fuzzy
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Сума"
+
+#, fuzzy
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Баланс"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr ""
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Дневник за отчети"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index abbbfb1..b9e7def 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -27,12 +27,20 @@ msgid "End Balance must be \"%s\"."
 msgstr "El saldo final ha de ser \"%s\"."
 
 msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr "El nombre de línies ha de ser \"%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."
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
-msgstr "Hi ha factures pagades a extractes esborrany, voleu continuar? "
+msgid "There are paid invoices on draft statements."
+msgstr "Hi ha factures pagades en extractes en esborrany."
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
+msgstr "L'import total ha de ser \"%s\"."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
@@ -71,8 +79,16 @@ msgid "Journal"
 msgstr "Diari"
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
-msgstr "Transaccions"
+msgid "Lines"
+msgstr "Línies"
+
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr "Nombre de línies"
 
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
@@ -86,6 +102,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Estat"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr "Import"
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr "Validació"
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Data modificació"
@@ -126,6 +150,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Nom"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr "Tipus de validació"
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Data modificació"
@@ -170,6 +198,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Assentament comptable"
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Número"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Tercer"
@@ -178,6 +210,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Nom"
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Seqüència"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Extracte"
@@ -218,6 +254,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Diaris d'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"
@@ -257,6 +297,66 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Extracte"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr "#"
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Import"
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Cancel·lat"
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Data"
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Data:"
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Descripció"
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Esborrany"
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "Correu electrònic:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr "Diari:"
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Tercer"
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Telèfon:"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Extracte"
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Total"
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "CIF/NIF:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Cancel·lat"
@@ -273,6 +373,18 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Validat"
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Import"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Saldo"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr "Nombre de línies"
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Diari d'extracte"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index c7f1745..0e36f08 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -25,11 +25,19 @@ msgid "End Balance must be \"%s\"."
 msgstr ""
 
 msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr ""
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr ""
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
+msgid "There are paid invoices on draft statements."
+msgstr ""
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
 msgstr ""
 
 msgctxt "field:account.statement,balance:"
@@ -69,7 +77,15 @@ msgid "Journal"
 msgstr ""
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
+msgid "Lines"
+msgstr ""
+
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
 msgstr ""
 
 msgctxt "field:account.statement,rec_name:"
@@ -84,6 +100,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr ""
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr ""
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr ""
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr ""
@@ -124,6 +148,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr ""
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr ""
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr ""
@@ -168,6 +196,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr ""
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr ""
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr ""
@@ -176,6 +208,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr ""
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr ""
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr ""
@@ -216,6 +252,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr ""
 
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr ""
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr ""
@@ -255,6 +295,66 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr ""
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr ""
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr ""
@@ -271,6 +371,18 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr ""
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr ""
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr ""
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr ""
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 02e92bd..c188f4d 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -28,14 +28,20 @@ msgid "End Balance must be \"%s\"."
 msgstr "Endsaldo muss \"%s\" sein."
 
 msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr "Anzahl der Zeilen muss \"%s\" sein."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Bankauszug \"%s\" muss annulliert werden, bevor er gelöscht werden kann."
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
-msgstr ""
-"Es existieren bezahlte Rechnungen in Entwürfen von Bankauszügen.\n"
-"Trotzdem fortfahren?"
+msgid "There are paid invoices on draft statements."
+msgstr "Es existieren bezahlte Rechnungen in Zahlungen im Status 'Entwurf'."
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
+msgstr "Gesamtbetrag muss \"%s\" sein."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
@@ -74,8 +80,16 @@ msgid "Journal"
 msgstr "Journal"
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
-msgstr "Transaktionen"
+msgid "Lines"
+msgstr "Zeilen"
+
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr "Anzahl Zeilen"
 
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
@@ -89,6 +103,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Status"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr "Gesamtbetrag"
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr "Validierung"
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Zuletzt geändert"
@@ -129,6 +151,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Name"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr "Validierungstyp"
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Zuletzt geändert"
@@ -173,6 +199,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Buchungssatz"
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Nummer"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Partei"
@@ -181,6 +211,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Name"
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Reihenfolge"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Bankauszug"
@@ -221,6 +255,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Bankauszugsjournale"
 
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Zahlung"
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr "Alle"
@@ -260,6 +298,66 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Bankauszug"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr "Nr."
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Betrag"
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Annulliert"
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Datum"
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Datum:"
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Beschreibung"
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Entwurf"
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr "Journal:"
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Nummer"
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Partei"
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Telefon:"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Zahlung"
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Gesamt"
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "USt-ID-Nr.:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Annulliert"
@@ -276,6 +374,18 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Geprüft"
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Betrag"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Saldo"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr "Anzahl Zeilen"
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Bankauszugsjournal"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index 0cca9b9..2bd398e 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -28,12 +28,20 @@ msgid "End Balance must be \"%s\"."
 msgstr "El saldo final debe ser «%s»."
 
 msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr "Número de Líneas debe ser «%s»."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Debe cancelar el extracto «%s» antes de eliminar."
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
-msgstr "Hay facturas pagadas en extractos en borrador, ¿desea continuar?"
+msgid "There are paid invoices on draft statements."
+msgstr "Hay facturas pagadas sobre los extractos en borrador."
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
+msgstr "Importe Total debe ser «%s»."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
@@ -72,9 +80,17 @@ msgid "Journal"
 msgstr "Diario"
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
+msgid "Lines"
 msgstr "Transacciones"
 
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr "Número de Líneas"
+
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
 msgstr "Nombre"
@@ -87,6 +103,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Estado"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr "Importe Total"
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr "Validación"
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Fecha modificación"
@@ -127,6 +151,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr "Tipo de validación"
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Fecha modificación"
@@ -171,6 +199,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Asiento contable"
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Número"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Entidad"
@@ -179,6 +211,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Secuencia"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Extracto"
@@ -219,6 +255,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Diarios de extracto"
 
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Extracto"
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr "Todo"
@@ -258,6 +298,66 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Extracto"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr "#"
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Importe"
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Fecha:"
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Descripción"
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr "Diario:"
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Entidad"
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Extracto"
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Total"
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "CUIT:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Cancelado"
@@ -274,6 +374,18 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Validado"
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Importe"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Saldo"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr "Número de Líneas"
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Diario de extracto"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 0d23d38..60026ad 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -29,13 +29,20 @@ msgid "End Balance must be \"%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\"."
+
+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."
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
-msgstr ""
-"Hay facturas pagadas en estados de cuenta en borrador, desea continuar?"
+msgid "There are paid invoices on draft statements."
+msgstr "Hay facturas pagadas en estados en borrador."
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
+msgstr "El valor total debe ser \"%s\"."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
@@ -74,9 +81,17 @@ msgid "Journal"
 msgstr "Libro Contable"
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
+msgid "Lines"
 msgstr "Transacciones"
 
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr "Número de Lineas"
+
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
 msgstr "Nombre"
@@ -89,6 +104,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Estado"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr "Valor Total"
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr "Validación"
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Fecha de Modificación"
@@ -129,6 +152,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr "Tipo de Validación"
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Fecha de Modificación"
@@ -173,6 +200,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Asiento Contable"
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Número"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Tercero"
@@ -181,6 +212,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Secuencia"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Estado de Cuenta"
@@ -221,6 +256,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Libros de Estados de Cuenta"
 
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Estado de Cuenta"
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr "Todo"
@@ -260,6 +299,66 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Estado de Cuenta"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr "#"
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Valor"
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Anulado"
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Fecha:"
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Descripción"
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr "Libro Contable:"
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Terceros"
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Estado de Cuenta"
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Total"
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "Número Identificación:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Anulado"
@@ -276,6 +375,18 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Validado"
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Valor"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Saldo"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr "Número de Líneas"
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Libro de Estados de Cuenta"
diff --git a/locale/es_CO.po b/locale/es_EC.po
similarity index 68%
copy from locale/es_CO.po
copy to locale/es_EC.po
index 0d23d38..55e075f 100644
--- a/locale/es_CO.po
+++ b/locale/es_EC.po
@@ -7,43 +7,51 @@ 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\"."
+"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 en la factura."
+msgstr "El valor \"%s\" es mayor que el valor 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!"
+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\"."
+"Por favor proporcione una cuenta de débito y de crédito en el libro diario "
+"de estado de cuenta \"%s\"."
 
 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\"."
 
 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."
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
-msgstr ""
-"Hay facturas pagadas en estados de cuenta en borrador, desea continuar?"
+msgid "There are paid invoices on draft statements."
+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\"."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
-msgstr "Balance"
+msgstr "Saldo"
 
 msgctxt "field:account.statement,company:"
 msgid "Company"
-msgstr "Compañía"
+msgstr "Empresa"
 
 msgctxt "field:account.statement,create_date:"
 msgid "Create Date"
@@ -71,24 +79,40 @@ msgstr "ID"
 
 msgctxt "field:account.statement,journal:"
 msgid "Journal"
-msgstr "Libro Contable"
+msgstr "Libro Diario"
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
+msgid "Lines"
 msgstr "Transacciones"
 
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr "Número de Líneas"
+
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
 msgctxt "field:account.statement,start_balance:"
 msgid "Start Balance"
-msgstr "Balance Inicial"
+msgstr "Saldo Inicial"
 
 msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Estado"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr "Valor Total"
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr "Validación"
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Fecha de Modificación"
@@ -99,7 +123,7 @@ msgstr "Modificado por Usuario"
 
 msgctxt "field:account.statement.journal,company:"
 msgid "Company"
-msgstr "Compañía"
+msgstr "Empresa"
 
 msgctxt "field:account.statement.journal,create_date:"
 msgid "Create Date"
@@ -119,7 +143,7 @@ msgstr "ID"
 
 msgctxt "field:account.statement.journal,journal:"
 msgid "Journal"
-msgstr "Libro Contable"
+msgstr "Libro Diario"
 
 msgctxt "field:account.statement.journal,name:"
 msgid "Name"
@@ -129,6 +153,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr "Tipo de Validación"
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Fecha de Modificación"
@@ -173,6 +201,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Asiento Contable"
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Número"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Tercero"
@@ -181,6 +213,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Secuencia"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Estado de Cuenta"
@@ -195,15 +231,15 @@ msgstr "Modificado por Usuario"
 
 msgctxt "model:account.journal.type,name:journal_type_statement"
 msgid "Statement"
-msgstr "Estado de Cuenta"
+msgstr "Extracto"
 
 msgctxt "model:account.statement,name:"
 msgid "Account Statement"
-msgstr "Estado de Cuentas"
+msgstr "Estado de Cuenta"
 
 msgctxt "model:account.statement.journal,name:"
 msgid "Statement Journal"
-msgstr "Diario de Estados de Cuenta"
+msgstr "Libro Diario de Estados de Cuenta"
 
 msgctxt "model:account.statement.line,name:"
 msgid "Account Statement Line"
@@ -219,7 +255,11 @@ msgstr "Estados de Cuenta"
 
 msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
-msgstr "Libros de Estados de Cuenta"
+msgstr "Libros Diarios de Estados de Cuenta"
+
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Estado de Cuenta"
 
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
@@ -250,7 +290,7 @@ msgstr "Estados de Cuenta"
 
 msgctxt "model:ir.ui.menu,name:menu_statement_journal_form"
 msgid "Statement Journals"
-msgstr "Libros de Estados de Cuenta"
+msgstr "Libros Diarios de Estados de Cuenta"
 
 msgctxt "model:ir.ui.menu,name:menu_statements"
 msgid "Statements"
@@ -260,9 +300,69 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Estado de Cuenta"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr "#"
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Valor"
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Fecha:"
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Descripción"
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr "Libro Diario:"
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Tercero"
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Estado de Cuenta"
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Total"
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "Número de RUC:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
-msgstr "Anulado"
+msgstr "Cancelado"
 
 msgctxt "selection:account.statement,state:"
 msgid "Draft"
@@ -276,13 +376,25 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Validado"
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Valor"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Saldo"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr "Número de Líneas"
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
-msgstr "Libro de Estados de Cuenta"
+msgstr "Libro Diario de Estados de Cuenta"
 
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journals"
-msgstr "Libros de Estados de Cuenta"
+msgstr "Libros Diarios de Estados de Cuenta"
 
 msgctxt "view:account.statement.line:"
 msgid "Amount"
@@ -290,7 +402,7 @@ msgstr "Valor"
 
 msgctxt "view:account.statement.line:"
 msgid "Statement Line"
-msgstr "Libros de Estados de Cuenta"
+msgstr "Línea de Estado de Cuenta"
 
 msgctxt "view:account.statement.line:"
 msgid "Statement Lines"
@@ -306,7 +418,7 @@ msgstr "Borrador"
 
 msgctxt "view:account.statement:"
 msgid "Other Info"
-msgstr "Info Adicional"
+msgstr "Información Adicional"
 
 msgctxt "view:account.statement:"
 msgid "Post"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index a6e20a0..9176758 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -28,12 +28,20 @@ msgid "End Balance must be \"%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\"."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Debe cancelar el extracto \"%s\" antes de borrarlo."
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
-msgstr "Existen facturas pagadas en extractos borrador, quiere continuar?"
+msgid "There are paid invoices on draft statements."
+msgstr "Hay facturas pagadas en extractos en borrador."
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
+msgstr "El importe total debe ser \"%s\"."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
@@ -72,8 +80,16 @@ msgid "Journal"
 msgstr "Diario"
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
-msgstr "Transacciones"
+msgid "Lines"
+msgstr "Líneas"
+
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr "Número de líneas"
 
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
@@ -87,6 +103,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Estado"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr "Importe"
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr "Validación"
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Fecha modificación"
@@ -127,6 +151,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr "Tipo de validación"
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Fecha modificación"
@@ -171,6 +199,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Asiento contable"
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Número"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Tercero"
@@ -179,6 +211,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Nombre"
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Secuencia"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Extracto"
@@ -219,6 +255,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Diarios de extracto"
 
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Extracto"
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr "Todo"
@@ -258,6 +298,66 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Extracto"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr "#"
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Importe"
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Cancelado"
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Fecha"
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Fecha:"
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Descripción"
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Borrador"
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr "Diario:"
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Número"
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Tercero"
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Teléfono:"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Extracto"
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Total"
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "CIF/NIF:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Cancelado"
@@ -274,6 +374,18 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Validado"
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Importe"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Saldo"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr "Número de líneas"
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Diario de extracto"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index 0829d7e..e1216ab 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -7,13 +7,13 @@ 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\"."
+"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 "
+"Le montant « %s » est plus grand que le montant restant à payer de la "
 "facture."
 
 msgctxt "error:account.statement.line:"
@@ -23,22 +23,28 @@ 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\"."
+"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\""
+msgstr "La balance de fin doit valoir « %s »."
+
+msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr "Le nombre de lignes doit être « %s »."
 
 msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
-msgstr "Le relevé \"%s\" doit être annulé avant suppression."
+msgstr "Le relevé « %s » doit être annulé avant suppression."
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
-msgstr ""
-"Il y a des factures payées sur des relevés en brouillon, souhaitez-vous "
-"continuer ?"
+msgid "There are paid invoices on draft statements."
+msgstr "Il y a des factures payées sur des relevés brouillons."
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
+msgstr "Le montant total doit être de « %s »."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
@@ -77,8 +83,16 @@ msgid "Journal"
 msgstr "Journal"
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
-msgstr "Transactions"
+msgid "Lines"
+msgstr "Lignes"
+
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr "Nombre de lignes"
 
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
@@ -92,6 +106,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "État"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr "Montant total"
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr "Validation"
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Date de mise à jour"
@@ -132,6 +154,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Nom"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr "Type de validation"
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Date de mise à jour"
@@ -176,6 +202,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Mouvement comptable"
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Numéro"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Tiers"
@@ -184,6 +214,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Nom"
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Séquence"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Relevé"
@@ -224,6 +258,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Journaux de relevés"
 
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Relevé"
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr "Tous"
@@ -263,6 +301,66 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Relevé"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr ""
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Montant"
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Annulé"
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Date"
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Date :"
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Description"
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Brouillon"
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr "Journal :"
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Numéro"
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Tiers"
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Téléphone :"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Relevé"
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Total"
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "Numéro TVA :"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Annulé"
@@ -279,6 +377,18 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Validé"
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Montant"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Balance"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr "Nombre de lignes"
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Journal de relevés"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index d873fdd..2834ecd 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -25,11 +25,19 @@ msgid "End Balance must be \"%s\"."
 msgstr ""
 
 msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr ""
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr ""
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
+msgid "There are paid invoices on draft statements."
+msgstr ""
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
 msgstr ""
 
 #, fuzzy
@@ -70,10 +78,20 @@ msgctxt "field:account.statement,journal:"
 msgid "Journal"
 msgstr "Dagboek"
 
+#, fuzzy
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
+msgid "Lines"
 msgstr "Transacties"
 
+#, fuzzy
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Naam bijlage"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr ""
+
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
 msgstr "Naam"
@@ -86,6 +104,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Status"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr ""
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr ""
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr ""
@@ -126,6 +152,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Naam"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr ""
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr ""
@@ -170,6 +200,11 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Boeking"
 
+#, fuzzy
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Nummer"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Relatie"
@@ -178,6 +213,11 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Naam"
 
+#, fuzzy
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Reeks"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Bankafschrift"
@@ -219,6 +259,11 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Dagboeken bankafschriften"
 
+#, fuzzy
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Bankafschrift"
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr ""
@@ -262,6 +307,79 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Bankafschrift"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Bedrag"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Geannuleerd"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Vervaldatum"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Datum:"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Specificatie"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Concept"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "E-mail:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Nummer"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Relaties"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Telefoon:"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Bankafschrift"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Totaal"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "BTW-nummer:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Geannuleerd"
@@ -278,6 +396,20 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Goedgekeurd"
 
+#, fuzzy
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Bedrag"
+
+#, fuzzy
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Balans"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr ""
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Dagboek bankafschriften"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index 4def06c..d5396fd 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -25,11 +25,19 @@ msgid "End Balance must be \"%s\"."
 msgstr ""
 
 msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr ""
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr ""
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
+msgid "There are paid invoices on draft statements."
+msgstr ""
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
 msgstr ""
 
 #, fuzzy
@@ -77,8 +85,18 @@ msgctxt "field:account.statement,journal:"
 msgid "Journal"
 msgstr "Журнал"
 
+#, fuzzy
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
+msgid "Lines"
+msgstr "Строки"
+
+#, fuzzy
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Правило оплаты"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
 msgstr ""
 
 #, fuzzy
@@ -96,6 +114,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Статус"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr ""
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr ""
+
 #, fuzzy
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
@@ -146,6 +172,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Наименование"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr ""
+
 #, fuzzy
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
@@ -202,6 +232,11 @@ msgid "Account Move"
 msgstr "Проводка"
 
 #, fuzzy
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Номер"
+
+#, fuzzy
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Организации"
@@ -211,6 +246,11 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Наименование"
 
+#, fuzzy
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Последовательность"
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr ""
@@ -253,6 +293,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr ""
 
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr ""
+
 #, fuzzy
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
@@ -296,6 +340,78 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr ""
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Сумма"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Отменено"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Дата"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Дата:"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Описание"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "Черновик"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "Эл.почта:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Номер"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Организации"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Телефон:"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr ""
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Итого"
+
+#, fuzzy
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "ИНН:"
+
 #, fuzzy
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
@@ -316,6 +432,20 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Утвержденный"
 
+#, fuzzy
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Сумма"
+
+#, fuzzy
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Баланс"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr ""
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr ""
diff --git a/locale/sl_SI.po b/locale/sl_SI.po
index 7b85bfd..0038784 100644
--- a/locale/sl_SI.po
+++ b/locale/sl_SI.po
@@ -28,12 +28,20 @@ msgid "End Balance must be \"%s\"."
 msgstr "Končni saldo mora biti \"%s\"."
 
 msgctxt "error:account.statement:"
+msgid "Number of Lines must be \"%s\"."
+msgstr "Število postavk mora biti \"%s\"."
+
+msgctxt "error:account.statement:"
 msgid "Statement \"%s\" must be cancelled before deletion."
 msgstr "Izpisek \"%s\" mora biti pred izbrisom preklican."
 
 msgctxt "error:account.statement:"
-msgid "There are paid invoices on draft statements, do you want to proceed?"
-msgstr "Na pripravljenih izpiskih so plačani računi. Ali želite nadaljevati?"
+msgid "There are paid invoices on draft statements."
+msgstr "Na pripravljenih izpiskih obstajajo plačani računi."
+
+msgctxt "error:account.statement:"
+msgid "Total Amount must be \"%s\"."
+msgstr "Skupni znesek mora biti \"%s\"."
 
 msgctxt "field:account.statement,balance:"
 msgid "Balance"
@@ -45,11 +53,11 @@ msgstr "Družba"
 
 msgctxt "field:account.statement,create_date:"
 msgid "Create Date"
-msgstr "Ustvarjeno"
+msgstr "Izdelano"
 
 msgctxt "field:account.statement,create_uid:"
 msgid "Create User"
-msgstr "Ustvaril"
+msgstr "Izdelal"
 
 msgctxt "field:account.statement,currency_digits:"
 msgid "Currency Digits"
@@ -72,8 +80,16 @@ msgid "Journal"
 msgstr "Dnevnik"
 
 msgctxt "field:account.statement,lines:"
-msgid "Transactions"
-msgstr "Transakcije"
+msgid "Lines"
+msgstr "Postavke"
+
+msgctxt "field:account.statement,name:"
+msgid "Name"
+msgstr "Plačilni rok"
+
+msgctxt "field:account.statement,number_of_lines:"
+msgid "Number of Lines"
+msgstr "Število postavk"
 
 msgctxt "field:account.statement,rec_name:"
 msgid "Name"
@@ -87,6 +103,14 @@ msgctxt "field:account.statement,state:"
 msgid "State"
 msgstr "Stanje"
 
+msgctxt "field:account.statement,total_amount:"
+msgid "Total Amount"
+msgstr "Skupni znesek"
+
+msgctxt "field:account.statement,validation:"
+msgid "Validation"
+msgstr "Odobritev"
+
 msgctxt "field:account.statement,write_date:"
 msgid "Write Date"
 msgstr "Zapisano"
@@ -101,11 +125,11 @@ msgstr "Družba"
 
 msgctxt "field:account.statement.journal,create_date:"
 msgid "Create Date"
-msgstr "Ustvarjeno"
+msgstr "Izdelano"
 
 msgctxt "field:account.statement.journal,create_uid:"
 msgid "Create User"
-msgstr "Ustvaril"
+msgstr "Izdelal"
 
 msgctxt "field:account.statement.journal,currency:"
 msgid "Currency"
@@ -127,6 +151,10 @@ msgctxt "field:account.statement.journal,rec_name:"
 msgid "Name"
 msgstr "Ime"
 
+msgctxt "field:account.statement.journal,validation:"
+msgid "Validation Type"
+msgstr "Vrsta odobritve"
+
 msgctxt "field:account.statement.journal,write_date:"
 msgid "Write Date"
 msgstr "Zapisano"
@@ -145,11 +173,11 @@ msgstr "Znesek"
 
 msgctxt "field:account.statement.line,create_date:"
 msgid "Create Date"
-msgstr "Ustvarjeno"
+msgstr "Izdelano"
 
 msgctxt "field:account.statement.line,create_uid:"
 msgid "Create User"
-msgstr "Ustvaril"
+msgstr "Izdelal"
 
 msgctxt "field:account.statement.line,date:"
 msgid "Date"
@@ -171,6 +199,10 @@ msgctxt "field:account.statement.line,move:"
 msgid "Account Move"
 msgstr "Knjižba"
 
+msgctxt "field:account.statement.line,number:"
+msgid "Number"
+msgstr "Številka"
+
 msgctxt "field:account.statement.line,party:"
 msgid "Party"
 msgstr "Partner"
@@ -179,6 +211,10 @@ msgctxt "field:account.statement.line,rec_name:"
 msgid "Name"
 msgstr "Ime"
 
+msgctxt "field:account.statement.line,sequence:"
+msgid "Sequence"
+msgstr "Zap.št."
+
 msgctxt "field:account.statement.line,statement:"
 msgid "Statement"
 msgstr "Izpisek"
@@ -219,6 +255,10 @@ msgctxt "model:ir.action,name:act_statement_journal_form"
 msgid "Statement Journals"
 msgstr "Dnevniki izpiskov"
 
+msgctxt "model:ir.action,name:report_statement"
+msgid "Statement"
+msgstr "Izpisek"
+
 msgctxt "model:ir.action.act_window.domain,name:act_statement_form_domain_all"
 msgid "All"
 msgstr "Vse"
@@ -258,6 +298,66 @@ msgctxt "model:res.group,name:group_statement"
 msgid "Statement"
 msgstr "Izpisek"
 
+msgctxt "odt:account.statement:"
+msgid "#"
+msgstr "#"
+
+msgctxt "odt:account.statement:"
+msgid "Amount"
+msgstr "Znesek"
+
+msgctxt "odt:account.statement:"
+msgid "Canceled"
+msgstr "Preklicano"
+
+msgctxt "odt:account.statement:"
+msgid "Date"
+msgstr "Datum"
+
+msgctxt "odt:account.statement:"
+msgid "Date:"
+msgstr "Datum:"
+
+msgctxt "odt:account.statement:"
+msgid "Description"
+msgstr "Opis"
+
+msgctxt "odt:account.statement:"
+msgid "Draft"
+msgstr "V pripravi"
+
+msgctxt "odt:account.statement:"
+msgid "E-Mail:"
+msgstr "E-pošta:"
+
+msgctxt "odt:account.statement:"
+msgid "Journal:"
+msgstr "Dnevnik:"
+
+msgctxt "odt:account.statement:"
+msgid "Number"
+msgstr "Številka"
+
+msgctxt "odt:account.statement:"
+msgid "Party"
+msgstr "Partner"
+
+msgctxt "odt:account.statement:"
+msgid "Phone:"
+msgstr "Telefon:"
+
+msgctxt "odt:account.statement:"
+msgid "Statement"
+msgstr "Izpisek"
+
+msgctxt "odt:account.statement:"
+msgid "Total"
+msgstr "Skupaj"
+
+msgctxt "odt:account.statement:"
+msgid "VAT Number:"
+msgstr "DDV številka:"
+
 msgctxt "selection:account.statement,state:"
 msgid "Canceled"
 msgstr "Preklicano"
@@ -274,6 +374,18 @@ msgctxt "selection:account.statement,state:"
 msgid "Validated"
 msgstr "Odobreno"
 
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Amount"
+msgstr "Znesek"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Balance"
+msgstr "Bilanca"
+
+msgctxt "selection:account.statement.journal,validation:"
+msgid "Number of Lines"
+msgstr "Število postavk"
+
 msgctxt "view:account.statement.journal:"
 msgid "Statement Journal"
 msgstr "Dnevnik izpiskov"
diff --git a/setup.py b/setup.py
index fa87e64..75b9d76 100644
--- a/setup.py
+++ b/setup.py
@@ -46,6 +46,7 @@ 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')]
 
@@ -65,7 +66,8 @@ setup(name=name,
         ],
     package_data={
         'trytond.modules.account_statement': (info.get('xml', [])
-            + ['tryton.cfg', 'view/*.xml', 'locale/*.po', 'tests/*.rst']),
+            + ['tryton.cfg', 'view/*.xml', 'locale/*.po', 'tests/*.rst',
+                'statement.odt']),
         },
     classifiers=[
         'Development Status :: 5 - Production/Stable',
diff --git a/statement.odt b/statement.odt
new file mode 100644
index 0000000..c85d075
Binary files /dev/null and b/statement.odt differ
diff --git a/statement.py b/statement.py
index 6692b3c..39bd11a 100644
--- a/statement.py
+++ b/statement.py
@@ -1,21 +1,63 @@
 #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 trytond.model import Workflow, ModelView, ModelSQL, fields
 from trytond.pyson import Eval, If, Bool
 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']
+__all__ = ['Statement', 'Line', 'StatementReport']
 
 _STATES = {'readonly': Eval('state') != 'draft'}
 _DEPENDS = ['state']
 
+_BALANCE_STATES = _STATES.copy()
+_BALANCE_STATES.update({
+        'invisible': ~Eval('validation', '').in_(['balance']),
+        'required': Eval('validation', '').in_(['balance']),
+        })
+_BALANCE_DEPENDS = _DEPENDS + ['validation']
+
+_AMOUNT_STATES = _STATES.copy()
+_AMOUNT_STATES.update({
+        'invisible': ~Eval('validation', '').in_(['amount']),
+        'required': Eval('validation', '').in_(['amount']),
+        })
+_AMOUNT_DEPENDS = _DEPENDS + ['validation']
+
+_NUMBER_STATES = _STATES.copy()
+_NUMBER_STATES.update({
+        'invisible': ~Eval('validation', '').in_(['number_of_lines']),
+        'required': Eval('validation', '').in_(['number_of_lines']),
+        })
+_NUMBER_DEPENDS = _DEPENDS + ['validation']
+
+
+class Null(object):
+    "Always different"
+
+    def __eq__(self, other):
+        return False
+
+    def __ne__(self, other):
+        return True
+
+    def __str__(self):
+        return ''
+
 
 class Statement(Workflow, ModelSQL, ModelView):
     'Account Statement'
     __name__ = 'account.statement'
+    name = fields.Char('Name', required=True)
     company = fields.Many2One('company.company', 'Company', required=True,
         select=True, states=_STATES, domain=[
             ('id', If(Eval('context', {}).contains('company'), '=', '!='),
@@ -35,19 +77,25 @@ class Statement(Workflow, ModelSQL, ModelView):
         'on_change_with_currency_digits')
     date = fields.Date('Date', required=True, states=_STATES, depends=_DEPENDS,
         select=True)
-    start_balance = fields.Numeric('Start Balance', required=True,
+    start_balance = fields.Numeric('Start Balance',
         digits=(16, Eval('currency_digits', 2)),
-        states=_STATES, depends=['state', 'currency_digits'])
-    end_balance = fields.Numeric('End Balance', required=True,
+        states=_BALANCE_STATES, depends=_BALANCE_DEPENDS + ['currency_digits'])
+    end_balance = fields.Numeric('End Balance',
         digits=(16, Eval('currency_digits', 2)),
-        states=_STATES, depends=['state', 'currency_digits'])
+        states=_BALANCE_STATES, depends=_BALANCE_DEPENDS + ['currency_digits'])
     balance = fields.Function(
         fields.Numeric('Balance',
             digits=(16, Eval('currency_digits', 2)),
-            depends=['currency_digits']),
+            states=_BALANCE_STATES,
+            depends=_BALANCE_DEPENDS + ['currency_digits']),
         'on_change_with_balance')
+    total_amount = fields.Numeric('Total Amount',
+        digits=(16, Eval('currency_digits', 2)),
+        states=_AMOUNT_STATES, depends=_AMOUNT_DEPENDS + ['currency_digits'])
+    number_of_lines = fields.Integer('Number of Lines',
+        states=_NUMBER_STATES, depends=_NUMBER_DEPENDS)
     lines = fields.One2Many('account.statement.line', 'statement',
-        'Transactions', states={
+        'Lines', states={
             'readonly': (Eval('state') != 'draft') | ~Eval('journal'),
             },
         depends=['state', 'journal'])
@@ -57,6 +105,8 @@ class Statement(Workflow, ModelSQL, ModelView):
         ('cancel', 'Canceled'),
         ('posted', 'Posted'),
         ], 'State', readonly=True, select=True)
+    validation = fields.Function(fields.Char('Validation'),
+        'on_change_with_validation')
 
     @classmethod
     def __setup__(cls):
@@ -64,10 +114,12 @@ class Statement(Workflow, ModelSQL, ModelView):
         cls._order[0] = ('id', 'DESC')
         cls._error_messages.update({
                 'wrong_end_balance': 'End Balance must be "%s".',
+                'wrong_total_amount': 'Total Amount must be "%s".',
+                'wrong_number_of_lines': 'Number of Lines must be "%s".',
                 'delete_cancel': ('Statement "%s" must be cancelled before '
                     'deletion.'),
                 'paid_invoice_draft_statement': ('There are paid invoices on '
-                    'draft statements, do you want to proceed?'),
+                    'draft statements.'),
                 })
         cls._transitions |= set((
                 ('draft', 'validated'),
@@ -95,6 +147,7 @@ class Statement(Workflow, ModelSQL, ModelView):
     def __register__(cls, module_name):
         TableHandler = backend.get('TableHandler')
         cursor = Transaction().cursor
+        sql_table = cls.__table__()
 
         # Migration from 1.8: new field company
         table = TableHandler(cursor, cls, module_name)
@@ -117,6 +170,15 @@ class Statement(Workflow, ModelSQL, ModelView):
             table = TableHandler(cursor, cls, module_name)
             table.not_null_action('company', action='add')
 
+        # Migration from 3.2: remove required on start/end balance
+        table.not_null_action('start_balance', action='remove')
+        table.not_null_action('end_balance', action='remove')
+
+        # 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))
+
     @staticmethod
     def default_company():
         return Transaction().context.get('company')
@@ -162,28 +224,6 @@ class Statement(Workflow, ModelSQL, ModelView):
             return self.journal.currency.digits
         return 2
 
-    @classmethod
-    def get_rec_name(cls, statements, name):
-        Lang = Pool().get('ir.lang')
-
-        lang, = Lang.search([
-                ('code', '=', Transaction().language),
-                ])
-
-        res = {}
-        for statement in statements:
-            res[statement.id] = (statement.journal.name + ' '
-                + Lang.currency(lang, statement.start_balance,
-                    statement.journal.currency, symbol=False, grouping=True)
-                + ' - '
-                + Lang.currency(lang, statement.end_balance,
-                    statement.journal.currency, symbol=False, grouping=True))
-        return res
-
-    @classmethod
-    def search_rec_name(cls, name, clause):
-        return [('journal',) + tuple(clause[1:])]
-
     def get_end_balance(self, name):
         end_balance = self.start_balance
         for line in self.lines:
@@ -266,6 +306,47 @@ class Statement(Workflow, ModelSQL, ModelView):
                                 })
         return res
 
+    @fields.depends('journal')
+    def on_change_with_validation(self, name=None):
+        if self.journal:
+            return self.journal.validation
+
+    def _group_key(self, line):
+        key = (
+            ('number', line.number or Null()),
+            ('date', line.date),
+            ('party', line.party),
+            )
+        return key
+
+    def _get_grouped_line(self):
+        "Return Line class for grouped lines"
+        assert self.lines
+
+        keys = [k[0] for k in self._group_key(self.lines[0])]
+
+        class Line(namedtuple('Line', keys + ['lines'])):
+
+            @property
+            def amount(self):
+                return sum((l.amount for l in self.lines))
+
+            @property
+            def descriptions(self):
+                done = set()
+                for line in self.lines:
+                    if line.description and line.description not in done:
+                        done.add(line.description)
+                        yield line.description
+        return Line
+
+    @property
+    def grouped_lines(self):
+        if self.lines:
+            Line = self._get_grouped_line()
+            for key, lines in groupby(self.lines, key=self._group_key):
+                yield Line(**dict(key + (('lines', list(lines)),)))
+
     @classmethod
     def delete(cls, statements):
         # Cancel before delete
@@ -281,32 +362,51 @@ class Statement(Workflow, ModelSQL, ModelView):
     def draft(cls, statements):
         pass
 
+    def validate_balance(self):
+        pool = Pool()
+        Lang = pool.get('ir.lang')
+
+        end_balance = (self.start_balance
+            + sum(l.amount for l in self.lines))
+        if end_balance != self.end_balance:
+            lang, = Lang.search([
+                    ('code', '=', Transaction().language),
+                    ])
+            amount = Lang.format(lang,
+                '%.' + str(self.journal.currency.digits) + 'f',
+                end_balance, True)
+            self.raise_user_error('wrong_end_balance', amount)
+
+    def validate_amount(self):
+        pool = Pool()
+        Lang = pool.get('ir.lang')
+
+        amount = sum(l.amount for l in self.lines)
+        if amount != self.total_amount:
+            lang, = Lang.search([
+                    ('code', '=', Transaction().language),
+                    ])
+            amount = Lang.format(lang,
+                '%.' + str(self.journal.currency.digits) + 'f',
+                amount, True)
+            self.raise_user_error('wrong_total_amount', amount)
+
+    def validate_number_of_lines(self):
+        number = len(list(self.grouped_lines))
+        if number != self.number_of_lines:
+            self.raise_user_error('wrong_number_of_lines', number)
+
     @classmethod
     @ModelView.button
     @Workflow.transition('validated')
     def validate_statement(cls, statements):
         pool = Pool()
-        Lang = pool.get('ir.lang')
         Line = pool.get('account.statement.line')
 
-        statement_lines = []
         for statement in statements:
-            computed_end_balance = statement.start_balance
-            for line in statement.lines:
-                computed_end_balance += line.amount
-            if computed_end_balance != statement.end_balance:
-                lang, = Lang.search([
-                        ('code', '=', Transaction().language),
-                        ])
-
-                amount = Lang.format(lang,
-                        '%.' + str(statement.journal.currency.digits) + 'f',
-                        computed_end_balance, True)
-                cls.raise_user_error('wrong_end_balance',
-                    error_args=(amount,))
+            getattr(statement, 'validate_%s' % statement.validation)()
             for line in statement.lines:
                 line.create_move()
-                statement_lines.append(line.id)
         cls.write(statements, {
                 'state': 'validated',
                 })
@@ -345,6 +445,8 @@ class Line(ModelSQL, ModelView):
     __name__ = 'account.statement.line'
     statement = fields.Many2One('account.statement', 'Statement',
             required=True, ondelete='CASCADE')
+    sequence = fields.Integer('Sequence')
+    number = fields.Char('Number')
     date = fields.Date('Date', required=True)
     amount = fields.Numeric('Amount', required=True,
         digits=(16, Eval('_parent_statement', {}).get('currency_digits', 2)))
@@ -369,6 +471,7 @@ class Line(ModelSQL, ModelView):
     @classmethod
     def __setup__(cls):
         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".'),
@@ -384,6 +487,11 @@ class Line(ModelSQL, ModelView):
             ]
 
     @staticmethod
+    def order_sequence(tables):
+        table, _ = tables[None]
+        return [table.sequence == None, table.sequence]
+
+    @staticmethod
     def default_amount():
         return Decimal(0)
 
@@ -578,16 +686,16 @@ class Line(ModelSQL, ModelView):
                 debit=amount < zero and -amount or zero,
                 credit=amount >= zero and amount or zero,
                 account=self.account,
-                party=self.party,
+                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.credit_account
-        else:
             account = journal.debit_account
+        else:
+            account = journal.credit_account
         if not account:
             self.raise_user_error('debit_credit_account_statement_journal',
                 (journal.rec_name,))
@@ -602,8 +710,12 @@ class Line(ModelSQL, ModelView):
                 debit=amount >= zero and amount or zero,
                 credit=amount < zero and -amount or zero,
                 account=account,
-                party=self.party,
+                party=self.party if account.party_required else None,
                 second_currency=second_currency,
                 amount_second_currency=amount_second_currency,
                 ))
         return move_lines
+
+
+class StatementReport(CompanyReport):
+    __name__ = 'account.statement'
diff --git a/statement.xml b/statement.xml
index ffaa854..1d2780f 100644
--- a/statement.xml
+++ b/statement.xml
@@ -84,6 +84,19 @@ this repository contains the full copyright notices and license terms. -->
             <field name="rule_group" ref="rule_group_statement"/>
         </record>
 
+        <record model="ir.action.report" id="report_statement">
+            <field name="name">Statement</field>
+            <field name="model">account.statement</field>
+            <field name="report_name">account.statement</field>
+            <field name="report">account_statement/statement.odt</field>
+            <field name="style">company/header_A4.odt</field>
+        </record>
+        <record model="ir.action.keyword" id="report_statement_keyword">
+            <field name="keyword">form_print</field>
+            <field name="model">account.statement,-1</field>
+            <field name="action" ref="report_statement"/>
+        </record>
+
         <record model="ir.ui.view" id="statement_line_view_form">
             <field name="model">account.statement.line</field>
             <field name="type">form</field>
diff --git a/tests/scenario_account_statement.rst b/tests/scenario_account_statement.rst
index 45943f9..2fcaf0c 100644
--- a/tests/scenario_account_statement.rst
+++ b/tests/scenario_account_statement.rst
@@ -11,7 +11,7 @@ Imports::
     >>> import datetime
     >>> from dateutil.relativedelta import relativedelta
     >>> from decimal import Decimal
-    >>> from proteus import config, Model, Wizard
+    >>> from proteus import config, Model, Wizard, Report
     >>> today = datetime.date.today()
 
 Create database::
@@ -222,10 +222,12 @@ Create statement::
 
     >>> statement_journal = StatementJournal(name='Test',
     ...     journal=account_journal,
+    ...     validation='balance',
     ... )
     >>> statement_journal.save()
 
-    >>> statement = Statement(journal=statement_journal,
+    >>> statement = Statement(name='test',
+    ...     journal=statement_journal,
     ...     start_balance=Decimal('0'),
     ...     end_balance=Decimal('80'),
     ... )
@@ -304,6 +306,11 @@ Test invoice state::
     >>> supplier_invoice.state
     u'paid'
 
+Test statement report::
+
+    >>> report = Report('account.statement')
+    >>> _ = report.execute([statement], {})
+
 Let's test the negative amount version of the supplier/customer invoices::
 
     >>> customer_invoice3 = Invoice(type='out_invoice')
@@ -335,7 +342,8 @@ Let's test the negative amount version of the supplier/customer invoices::
     >>> supplier_invoice2.state
     u'posted'
 
-    >>> statement = Statement(journal=statement_journal,
+    >>> statement = Statement(name='test negative',
+    ...     journal=statement_journal,
     ...     end_balance=Decimal('0'),
     ... )
 
@@ -379,7 +387,7 @@ Testing the use of an invoice in multiple statements::
     >>> customer_invoice4.state
     u'posted'
 
-    >>> statement1 = Statement(journal=statement_journal)
+    >>> statement1 = Statement(name='1', journal=statement_journal)
     >>> statement1.end_balance = Decimal(380)
     >>> statement_line = statement1.lines.new()
     >>> statement_line.date = today
@@ -389,7 +397,7 @@ Testing the use of an invoice in multiple statements::
     >>> statement_line.invoice = customer_invoice4
     >>> statement1.save()
 
-    >>> statement2 = Statement(journal=statement_journal)
+    >>> statement2 = Statement(name='2', journal=statement_journal)
     >>> statement2.end_balance = Decimal(680)
     >>> statement_line = statement2.lines.new()
     >>> statement_line.date = today
@@ -416,3 +424,88 @@ Testing the use of an invoice in multiple statements::
     >>> statement2.reload()
     >>> bool(statement2.lines[0].invoice)
     False
+
+Testing balance validation::
+
+    >>> journal_balance = StatementJournal(name='Balance',
+    ...     journal=account_journal,
+    ...     validation='balance',
+    ...     )
+    >>> journal_balance.save()
+
+    >>> statement = Statement(name='balance')
+    >>> statement.journal = journal_balance
+    >>> statement.start_balance = Decimal('50.00')
+    >>> statement.end_balance = Decimal('150.00')
+    >>> line = statement.lines.new()
+    >>> line.date = today
+    >>> line.amount = Decimal('60.00')
+    >>> line.account = receivable
+    >>> line.party = customer
+    >>> statement.click('validate_statement')  # doctest: +IGNORE_EXCEPTION_DETAIL
+    Traceback (most recent call last):
+        ...
+    UserError: ...
+
+    >>> second_line = statement.lines.new()
+    >>> second_line.date = today
+    >>> second_line.amount = Decimal('40.00')
+    >>> second_line.account = receivable
+    >>> second_line.party = customer
+    >>> statement.click('validate_statement')
+
+Testing amount validation::
+
+    >>> journal_amount = StatementJournal(name='Amount',
+    ...     journal=account_journal,
+    ...     validation='amount',
+    ...     )
+    >>> journal_amount.save()
+
+    >>> statement = Statement(name='amount')
+    >>> statement.journal = journal_amount
+    >>> statement.total_amount = Decimal('80.00')
+    >>> line = statement.lines.new()
+    >>> line.date = today
+    >>> line.amount = Decimal('50.00')
+    >>> line.account = receivable
+    >>> line.party = customer
+    >>> statement.click('validate_statement')  # doctest: +IGNORE_EXCEPTION_DETAIL
+    Traceback (most recent call last):
+        ...
+    UserError: ...
+
+    >>> second_line = statement.lines.new()
+    >>> second_line.date = today
+    >>> second_line.amount = Decimal('30.00')
+    >>> second_line.account = receivable
+    >>> second_line.party = customer
+    >>> statement.click('validate_statement')
+
+Test number of lines validation::
+
+    >>> journal_number = StatementJournal(name='Number',
+    ...     journal=account_journal,
+    ...     validation='number_of_lines',
+    ...     )
+    >>> journal_number.save()
+
+    >>> statement = Statement(name='number')
+    >>> statement.journal = journal_number
+    >>> statement.number_of_lines = 2
+    >>> line = statement.lines.new()
+    >>> line.date = today
+    >>> line.amount = Decimal('50.00')
+    >>> line.account = receivable
+    >>> line.party = customer
+    >>> statement.click('validate_statement')  # doctest: +IGNORE_EXCEPTION_DETAIL
+    Traceback (most recent call last):
+        ...
+    UserError: ...
+
+    >>> second_line = statement.lines.new()
+    >>> second_line.date = today
+    >>> second_line.amount = Decimal('10.00')
+    >>> second_line.account = receivable
+    >>> second_line.party = customer
+    >>> statement.click('validate_statement')
diff --git a/tests/test_account_statement.py b/tests/test_account_statement.py
index 674ba1a..0384bf6 100644
--- a/tests/test_account_statement.py
+++ b/tests/test_account_statement.py
@@ -3,7 +3,8 @@
 import unittest
 import doctest
 import trytond.tests.test_tryton
-from trytond.tests.test_tryton import test_view, test_depends, doctest_dropdb
+from trytond.tests.test_tryton import test_view, test_depends
+from trytond.tests.test_tryton import doctest_setup, doctest_teardown
 
 
 class AccountStatementTestCase(unittest.TestCase):
@@ -26,6 +27,6 @@ def suite():
     suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
         AccountStatementTestCase))
     suite.addTests(doctest.DocFileSuite('scenario_account_statement.rst',
-        setUp=doctest_dropdb, tearDown=doctest_dropdb, encoding='utf-8',
+        setUp=doctest_setup, tearDown=doctest_teardown, encoding='utf-8',
             optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
     return suite
diff --git a/tryton.cfg b/tryton.cfg
index 815cef9..49acb9d 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
 [tryton]
-version=3.2.0
+version=3.4.0
 depends:
     account
     account_invoice
diff --git a/trytond_account_statement.egg-info/PKG-INFO b/trytond_account_statement.egg-info/PKG-INFO
index 75cc4d5..7daf031 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.2.0
+Version: 3.4.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.2/
+Download-URL: http://downloads.tryton.org/3.4/
 Description: trytond_account_statement
         =========================
         
diff --git a/trytond_account_statement.egg-info/SOURCES.txt b/trytond_account_statement.egg-info/SOURCES.txt
index c415379..12837aa 100644
--- a/trytond_account_statement.egg-info/SOURCES.txt
+++ b/trytond_account_statement.egg-info/SOURCES.txt
@@ -6,20 +6,47 @@ MANIFEST.in
 README
 journal.xml
 setup.py
+statement.odt
 statement.xml
 tryton.cfg
 ./__init__.py
 ./account.py
 ./journal.py
+./journal.xml
+./statement.odt
 ./statement.py
+./statement.xml
+./tryton.cfg
+./locale/bg_BG.po
+./locale/ca_ES.po
+./locale/cs_CZ.po
+./locale/de_DE.po
+./locale/es_AR.po
+./locale/es_CO.po
+./locale/es_EC.po
+./locale/es_ES.po
+./locale/fr_FR.po
+./locale/nl_NL.po
+./locale/ru_RU.po
+./locale/sl_SI.po
 ./tests/__init__.py
+./tests/scenario_account_statement.rst
 ./tests/test_account_statement.py
+./view/statement_form.xml
+./view/statement_journal_form.xml
+./view/statement_journal_tree.xml
+./view/statement_line_form.xml
+./view/statement_line_tree.xml
+./view/statement_line_tree_editable.xml
+./view/statement_tree.xml
+doc/index.rst
 locale/bg_BG.po
 locale/ca_ES.po
 locale/cs_CZ.po
 locale/de_DE.po
 locale/es_AR.po
 locale/es_CO.po
+locale/es_EC.po
 locale/es_ES.po
 locale/fr_FR.po
 locale/nl_NL.po
diff --git a/trytond_account_statement.egg-info/requires.txt b/trytond_account_statement.egg-info/requires.txt
index f01eb95..08bc460 100644
--- a/trytond_account_statement.egg-info/requires.txt
+++ b/trytond_account_statement.egg-info/requires.txt
@@ -1,6 +1,7 @@
-trytond_account >= 3.2, < 3.3
-trytond_account_invoice >= 3.2, < 3.3
-trytond_company >= 3.2, < 3.3
-trytond_currency >= 3.2, < 3.3
-trytond_party >= 3.2, < 3.3
-trytond >= 3.2, < 3.3
\ No newline at end of file
+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
diff --git a/view/statement_form.xml b/view/statement_form.xml
index 9f2aadb..4d8a901 100644
--- a/view/statement_form.xml
+++ b/view/statement_form.xml
@@ -2,6 +2,8 @@
 <!-- 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">
+    <label name="name"/>
+    <field name="name" colspan="3"/>
     <label name="journal"/>
     <field name="journal"/>
     <label name="date"/>
@@ -10,6 +12,12 @@ this repository contains the full copyright notices and license terms. -->
     <field name="start_balance"/>
     <label name="end_balance"/>
     <field name="end_balance"/>
+    <label name="total_amount"/>
+    <field name="total_amount"/>
+    <newline/>
+    <label name="number_of_lines"/>
+    <field name="number_of_lines"/>
+    <newline/>
     <notebook colspan="4">
         <page string="Statement Lines" col="4" id="statement_lines">
             <field name="lines" colspan="4"
@@ -33,5 +41,4 @@ this repository contains the full copyright notices and license terms. -->
             <field name="company"/>
         </page>
     </notebook>
-    <field name="currency_digits" colspan="4" invisible="1"/>
 </form>
diff --git a/view/statement_journal_form.xml b/view/statement_journal_form.xml
index 87c89a9..dbc226a 100644
--- a/view/statement_journal_form.xml
+++ b/view/statement_journal_form.xml
@@ -10,4 +10,6 @@ this repository contains the full copyright notices and license terms. -->
     <field name="currency"/>
     <label name="company"/>
     <field name="company"/>
+    <label name="validation"/>
+    <field name="validation"/>
 </form>
diff --git a/view/statement_line_form.xml b/view/statement_line_form.xml
index 8b65af0..9d2932e 100644
--- a/view/statement_line_form.xml
+++ b/view/statement_line_form.xml
@@ -4,6 +4,10 @@ this repository contains the full copyright notices and license terms. -->
 <form string="Statement Line">
     <label name="statement"/>
     <field name="statement" colspan="3"/>
+    <label name="number"/>
+    <field name="number"/>
+    <label name="sequence"/>
+    <field name="sequence"/>
     <label name="date"/>
     <field name="date"/>
     <label name="amount"/>
diff --git a/view/statement_line_tree.xml b/view/statement_line_tree.xml
index 78f984f..caa227f 100644
--- a/view/statement_line_tree.xml
+++ b/view/statement_line_tree.xml
@@ -3,6 +3,7 @@
 this repository contains the full copyright notices and license terms. -->
 <tree string="Statement Lines">
     <field name="statement"/>
+    <field name="number"/>
     <field name="date"/>
     <field name="amount"/>
     <field name="party"/>
diff --git a/view/statement_line_tree_editable.xml b/view/statement_line_tree_editable.xml
index 5aac57e..46a9856 100644
--- a/view/statement_line_tree_editable.xml
+++ b/view/statement_line_tree_editable.xml
@@ -1,7 +1,8 @@
 <?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 Lines" editable="bottom">
+<tree string="Statement Lines" editable="bottom" sequence="sequence">
+    <field name="number"/>
     <field name="date"/>
     <field name="amount" sum="Amount"/>
     <field name="party"/>
diff --git a/view/statement_tree.xml b/view/statement_tree.xml
index d2dd5c0..3c3ef9a 100644
--- a/view/statement_tree.xml
+++ b/view/statement_tree.xml
@@ -3,8 +3,7 @@
 this repository contains the full copyright notices and license terms. -->
 <tree string="Statements">
     <field name="journal"/>
+    <field name="name"/>
     <field name="date"/>
-    <field name="start_balance"/>
-    <field name="end_balance"/>
     <field name="state"/>
 </tree>
-- 
tryton-modules-account-statement



More information about the tryton-debian-vcs mailing list