From b555ed0cba85b10d3713d0e5d2044510133b9d73 Mon Sep 17 00:00:00 2001 From: Raffael Meyer Date: Thu, 13 Feb 2020 20:05:27 +0100 Subject: [PATCH] update header accoding to "DATEV Format v7.0" --- erpnext/regional/report/datev/datev.py | 73 +++++++++++++++++--------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/erpnext/regional/report/datev/datev.py b/erpnext/regional/report/datev/datev.py index bf6ac20e7e..05d817718b 100644 --- a/erpnext/regional/report/datev/datev.py +++ b/erpnext/regional/report/datev/datev.py @@ -274,66 +274,89 @@ def get_datev_csv(data, filters, csv_class): if not six.PY2: data = data.encode('latin_1') - return header + b'\r\n' + data + # 1st Row: Header with meta data + # 2nd Row: Data heading (Überschrift der Nutzdaten) + # 3rd Row: – n: Data (Nutzdaten) + return header + b'\r\n\r\n' + data def get_header(filters, csv_class): + coa = frappe.get_value("Company", filters.get("company"), "chart_of_accounts") + coa_used = "SKR04" if "SKR04" in coa else ("SKR03" if "SKR03" in coa else "") + header = [ - # A = DATEV format - # DTVF = created by DATEV software, - # EXTF = created by other software + # DATEV format + # "DTVF" = created by DATEV software, + # "EXTF" = created by other software '"EXTF"', - # B = version of the DATEV format + # version of the DATEV format # 141 = 1.41, # 510 = 5.10, # 720 = 7.20 - "700", + '700', csv_class.DATA_CATEGORY, csv_class.FORMAT_NAME, - # E = Format version (regarding format name) + # Format version (regarding format name) csv_class.FORMAT_VERSION, - # F = Generated on + # Generated on datetime.datetime.now().strftime("%Y%m%d%H%M%S"), - # G = Imported on -- stays empty - "", - # H = Origin (SV = other (?), RE = KARE) - "SV", + # Imported on -- stays empty + '', + # Origin. Any two symbols, will be replaced by "SV" on import. + '"EN"', # I = Exported by - frappe.session.user, + '"%s"' % frappe.session.user, # J = Imported by -- stays empty - "", + '', # K = Tax consultant number (Beraternummer) frappe.get_value("DATEV Settings", filters.get("company"), "consultant_number"), - "", # L = Tax client number (Mandantennummer) frappe.get_value("DATEV Settings", filters.get("company"), "client_number"), - "", # 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", + # minimum of 4, 5 if debtors/creditors are included + '5', # O = Transaction batch start date (YYYYMMDD) frappe.utils.formatdate(filters.get('from_date'), "yyyyMMdd"), # P = Transaction batch end date (YYYYMMDD) frappe.utils.formatdate(filters.get('to_date'), "yyyyMMdd"), # Q = Description (for example, "January - February 2019 Transactions") - "{} - {} {}".format( + '"{} - {} {}"'.format( frappe.utils.formatdate(filters.get('from_date'), "MMMM yyyy"), frappe.utils.formatdate(filters.get('to_date'), "MMMM yyyy"), csv_class.FORMAT_NAME ), # R = Diktatkürzel - "", + '', # S = Buchungstyp - # 1 = Transaction batch (Buchungsstapel), + # 1 = Transaction batch (Finanzbuchführung), # 2 = Annual financial statement (Jahresabschluss) - "1" if csv_class.DATA_CATEGORY == DataCategory.TRANSACTIONS else "", + '1' if csv_class.DATA_CATEGORY == DataCategory.TRANSACTIONS else '', # T = Rechnungslegungszweck - "", + '', # U = Festschreibung - "", - # V = Kontoführungs-Währungskennzeichen des Geldkontos - frappe.get_value("Company", filters.get("company"), "default_currency") + '', + # V = Default currency, for example, "EUR" + '"%s"' % frappe.get_value("Company", filters.get("company"), "default_currency"), + # reserviert + '', + # Derivatskennzeichen + '', + # reserviert + '', + # reserviert + '', + # SKR + '"%s"' % coa_used, + # Branchen-Lösungs-ID + '', + # reserviert + '', + # reserviert + '', + # Anwendungsinformation (Verarbeitungskennzeichen der abgebenden Anwendung) + '' ] return header