refactor: query meta data only once

This commit is contained in:
barredterra 2020-05-11 18:50:02 +02:00
parent 7a7add5001
commit 55c048f56c

View File

@ -8,17 +8,18 @@ Provide a report and downloadable CSV according to the German DATEV format.
all required columns. Used to import the data into the DATEV Software. all required columns. Used to import the data into the DATEV Software.
""" """
from __future__ import unicode_literals from __future__ import unicode_literals
import datetime import datetime
import json import json
import zlib
import zipfile import zipfile
import six import six
import frappe
import pandas as pd
from frappe import _
from csv import QUOTE_NONNUMERIC from csv import QUOTE_NONNUMERIC
from six import BytesIO from six import BytesIO
from six import string_types from six import string_types
import frappe
from frappe import _
import pandas as pd
from .datev_constants import DataCategory from .datev_constants import DataCategory
from .datev_constants import Transactions from .datev_constants import Transactions
from .datev_constants import DebtorsCreditors from .datev_constants import DebtorsCreditors
@ -287,9 +288,7 @@ def get_datev_csv(data, filters, csv_class):
def get_header(filters, csv_class): 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)
description = filters.get("voucher_type", csv_class.FORMAT_NAME)
coa_used = "04" if "SKR04" in coa else ("03" if "SKR03" in coa else "")
header = [ header = [
# DATEV format # DATEV format
@ -316,13 +315,13 @@ def get_header(filters, csv_class):
# J = Imported by -- stays empty # J = Imported by -- stays empty
'', '',
# K = Tax consultant number (Beraternummer) # 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) # 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) # M = Start of the fiscal year (Wirtschaftsjahresbeginn)
frappe.utils.formatdate(frappe.defaults.get_user_default("year_start_date"), "yyyyMMdd"), frappe.utils.formatdate(frappe.defaults.get_user_default("year_start_date"), "yyyyMMdd"),
# N = Length of account numbers (Sachkontenlänge) # N = Length of account numbers (Sachkontenlänge)
'4', '%d' % filters.get('acc_len', 4),
# O = Transaction batch start date (YYYYMMDD) # O = Transaction batch start date (YYYYMMDD)
frappe.utils.formatdate(filters.get('from_date'), "yyyyMMdd"), frappe.utils.formatdate(filters.get('from_date'), "yyyyMMdd"),
# P = Transaction batch end date (YYYYMMDD) # P = Transaction batch end date (YYYYMMDD)
@ -348,7 +347,7 @@ def get_header(filters, csv_class):
# TODO: Filter by Accounting Period. In export for closed Accounting Period, this will be "1" # TODO: Filter by Accounting Period. In export for closed Accounting Period, this will be "1"
'0', '0',
# V = Default currency, for example, "EUR" # V = Default currency, for example, "EUR"
'"%s"' % frappe.get_value("Company", filters.get("company"), "default_currency"), '"%s"' % filters.get('default_currency', 'EUR'),
# reserviert # reserviert
'', '',
# Derivatskennzeichen # Derivatskennzeichen
@ -358,7 +357,7 @@ def get_header(filters, csv_class):
# reserviert # reserviert
'', '',
# SKR # SKR
'"%s"' % coa_used, '"%s"' % filters.get('skr', '04'),
# Branchen-Lösungs-ID # Branchen-Lösungs-ID
'', '',
# reserviert # reserviert
@ -389,6 +388,18 @@ def download_datev_csv(filters=None):
validate(filters) 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 # This is where my zip will be written
zip_buffer = BytesIO() zip_buffer = BytesIO()
# This is my zip file # This is my zip file