refactor: query meta data only once
diff --git a/erpnext/regional/report/datev/datev.py b/erpnext/regional/report/datev/datev.py
index a8e40cc..02296a9 100644
--- a/erpnext/regional/report/datev/datev.py
+++ b/erpnext/regional/report/datev/datev.py
@@ -8,17 +8,18 @@
all required columns. Used to import the data into the DATEV Software.
"""
from __future__ import unicode_literals
+
import datetime
import json
-import zlib
import zipfile
import six
+import frappe
+import pandas as pd
+
+from frappe import _
from csv import QUOTE_NONNUMERIC
from six import BytesIO
from six import string_types
-import frappe
-from frappe import _
-import pandas as pd
from .datev_constants import DataCategory
from .datev_constants import Transactions
from .datev_constants import DebtorsCreditors
@@ -287,9 +288,7 @@
def get_header(filters, csv_class):
- coa = frappe.get_value("Company", filters.get("company"), "chart_of_accounts")
- description = filters.get("voucher_type", csv_class.FORMAT_NAME)
- coa_used = "04" if "SKR04" in coa else ("03" if "SKR03" in coa else "")
+ description = filters.get('voucher_type', csv_class.FORMAT_NAME)
header = [
# DATEV format
@@ -316,13 +315,13 @@
# J = Imported by -- stays empty
'',
# K = Tax consultant number (Beraternummer)
- frappe.get_value("DATEV Settings", filters.get("company"), "consultant_number"),
+ filters.get('consultant_number', '0000000'),
# L = Tax client number (Mandantennummer)
- frappe.get_value("DATEV Settings", filters.get("company"), "client_number"),
+ filters.get('client_number', '00000'),
# M = Start of the fiscal year (Wirtschaftsjahresbeginn)
frappe.utils.formatdate(frappe.defaults.get_user_default("year_start_date"), "yyyyMMdd"),
# N = Length of account numbers (Sachkontenlänge)
- '4',
+ '%d' % filters.get('acc_len', 4),
# O = Transaction batch start date (YYYYMMDD)
frappe.utils.formatdate(filters.get('from_date'), "yyyyMMdd"),
# P = Transaction batch end date (YYYYMMDD)
@@ -348,7 +347,7 @@
# TODO: Filter by Accounting Period. In export for closed Accounting Period, this will be "1"
'0',
# V = Default currency, for example, "EUR"
- '"%s"' % frappe.get_value("Company", filters.get("company"), "default_currency"),
+ '"%s"' % filters.get('default_currency', 'EUR'),
# reserviert
'',
# Derivatskennzeichen
@@ -358,7 +357,7 @@
# reserviert
'',
# SKR
- '"%s"' % coa_used,
+ '"%s"' % filters.get('skr', '04'),
# Branchen-Lösungs-ID
'',
# reserviert
@@ -389,6 +388,18 @@
validate(filters)
+ # set chart of accounts used
+ coa = frappe.get_value('Company', filters.get('company'), 'chart_of_accounts')
+ filters['skr'] = '04' if 'SKR04' in coa else ('03' if 'SKR03' in coa else '')
+
+ # set account number length
+ account_numbers = frappe.get_list('Account', fields=['account_number'], filters={'is_group': 0, 'account_number': ('!=', '')})
+ filters['acc_len'] = max([len(a.account_number) for a in account_numbers])
+
+ filters['consultant_number'] = frappe.get_value('DATEV Settings', filters.get('company'), 'consultant_number')
+ filters['client_number'] = frappe.get_value('DATEV Settings', filters.get('company'), 'client_number')
+ filters['default_currency'] = frappe.get_value('Company', filters.get('company'), 'default_currency')
+
# This is where my zip will be written
zip_buffer = BytesIO()
# This is my zip file