mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-24 15:39:20 +00:00
fix(regional): header row in DATEV report (#21113)
* fix(regional): encoding of DATEV report * feat(regional): filter datev report by voucher type * fix: creation time, coa used, is frozen * add voucher types: Payroll Entry, Bank Reconciliation, Asset, Stock Entry * fix indentation * fix indentation * fix indentation
This commit is contained in:
@@ -21,6 +21,12 @@ frappe.query_reports["DATEV"] = {
|
|||||||
"default": frappe.datetime.now_date(),
|
"default": frappe.datetime.now_date(),
|
||||||
"fieldtype": "Date",
|
"fieldtype": "Date",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "voucher_type",
|
||||||
|
"label": __("Voucher Type"),
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"options": "\nSales Invoice\nPurchase Invoice\nPayment Entry\nExpense Claim\nPayroll Entry\nBank Reconciliation\nAsset\nStock Entry"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
onload: function(query_report) {
|
onload: function(query_report) {
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ def get_transactions(filters, as_dict=1):
|
|||||||
filters -- dict of filters to be passed to the sql query
|
filters -- dict of filters to be passed to the sql query
|
||||||
as_dict -- return as list of dicts [0,1]
|
as_dict -- return as list of dicts [0,1]
|
||||||
"""
|
"""
|
||||||
|
filter_by_voucher = 'AND gl.voucher_type = %(voucher_type)s' if filters.get('voucher_type') else ''
|
||||||
gl_entries = frappe.db.sql("""
|
gl_entries = frappe.db.sql("""
|
||||||
SELECT
|
SELECT
|
||||||
|
|
||||||
@@ -80,8 +81,10 @@ def get_transactions(filters, as_dict=1):
|
|||||||
gl.posting_date as 'Belegdatum',
|
gl.posting_date as 'Belegdatum',
|
||||||
gl.voucher_no as 'Belegfeld 1',
|
gl.voucher_no as 'Belegfeld 1',
|
||||||
gl.remarks as 'Buchungstext',
|
gl.remarks as 'Buchungstext',
|
||||||
gl.against_voucher_type as 'Beleginfo - Art 1',
|
gl.voucher_type as 'Beleginfo - Art 1',
|
||||||
gl.against_voucher as 'Beleginfo - Inhalt 1'
|
gl.voucher_no as 'Beleginfo - Inhalt 1',
|
||||||
|
gl.against_voucher_type as 'Beleginfo - Art 2',
|
||||||
|
gl.against_voucher as 'Beleginfo - Inhalt 2'
|
||||||
|
|
||||||
FROM `tabGL Entry` gl
|
FROM `tabGL Entry` gl
|
||||||
|
|
||||||
@@ -109,7 +112,8 @@ def get_transactions(filters, as_dict=1):
|
|||||||
WHERE gl.company = %(company)s
|
WHERE gl.company = %(company)s
|
||||||
AND DATE(gl.posting_date) >= %(from_date)s
|
AND DATE(gl.posting_date) >= %(from_date)s
|
||||||
AND DATE(gl.posting_date) <= %(to_date)s
|
AND DATE(gl.posting_date) <= %(to_date)s
|
||||||
ORDER BY 'Belegdatum', gl.voucher_no""", filters, as_dict=as_dict)
|
{}
|
||||||
|
ORDER BY 'Belegdatum', gl.voucher_no""".format(filter_by_voucher), filters, as_dict=as_dict)
|
||||||
|
|
||||||
return gl_entries
|
return gl_entries
|
||||||
|
|
||||||
@@ -281,24 +285,24 @@ 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")
|
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 "")
|
coa_used = "04" if "SKR04" in coa else ("03" if "SKR03" in coa else "")
|
||||||
|
|
||||||
header = [
|
header = [
|
||||||
# DATEV format
|
# DATEV format
|
||||||
# "DTVF" = created by DATEV software,
|
# "DTVF" = created by DATEV software,
|
||||||
# "EXTF" = created by other software
|
# "EXTF" = created by other software
|
||||||
'"EXTF"',
|
'"EXTF"',
|
||||||
# version of the DATEV format
|
# version of the DATEV format
|
||||||
# 141 = 1.41,
|
# 141 = 1.41,
|
||||||
# 510 = 5.10,
|
# 510 = 5.10,
|
||||||
# 720 = 7.20
|
# 720 = 7.20
|
||||||
'700',
|
'700',
|
||||||
csv_class.DATA_CATEGORY,
|
csv_class.DATA_CATEGORY,
|
||||||
'"%s"' % csv_class.FORMAT_NAME,
|
'"%s"' % csv_class.FORMAT_NAME,
|
||||||
# Format version (regarding format name)
|
# Format version (regarding format name)
|
||||||
csv_class.FORMAT_VERSION,
|
csv_class.FORMAT_VERSION,
|
||||||
# Generated on
|
# Generated on
|
||||||
datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
|
datetime.datetime.now().strftime("%Y%m%d%H%M%S") + '000',
|
||||||
# Imported on -- stays empty
|
# Imported on -- stays empty
|
||||||
'',
|
'',
|
||||||
# Origin. Any two symbols, will be replaced by "SV" on import.
|
# Origin. Any two symbols, will be replaced by "SV" on import.
|
||||||
@@ -328,13 +332,21 @@ def get_header(filters, csv_class):
|
|||||||
# R = Diktatkürzel
|
# R = Diktatkürzel
|
||||||
'',
|
'',
|
||||||
# S = Buchungstyp
|
# S = Buchungstyp
|
||||||
# 1 = Transaction batch (Finanzbuchführung),
|
# 1 = Transaction batch (Finanzbuchführung),
|
||||||
# 2 = Annual financial statement (Jahresabschluss)
|
# 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
|
# T = Rechnungslegungszweck
|
||||||
'',
|
# 0 oder leer = vom Rechnungslegungszweck unabhängig
|
||||||
|
# 50 = Handelsrecht
|
||||||
|
# 30 = Steuerrecht
|
||||||
|
# 64 = IFRS
|
||||||
|
# 40 = Kalkulatorik
|
||||||
|
# 11 = Reserviert
|
||||||
|
# 12 = Reserviert
|
||||||
|
'0',
|
||||||
# U = Festschreibung
|
# U = Festschreibung
|
||||||
'',
|
# TODO: Filter by Accounting Period. In export for closed Accounting Period, this will be "1"
|
||||||
|
'0',
|
||||||
# V = Default currency, for example, "EUR"
|
# V = Default currency, for example, "EUR"
|
||||||
'"%s"' % frappe.get_value("Company", filters.get("company"), "default_currency"),
|
'"%s"' % frappe.get_value("Company", filters.get("company"), "default_currency"),
|
||||||
# reserviert
|
# reserviert
|
||||||
|
|||||||
@@ -498,13 +498,27 @@ QUERY_REPORT_COLUMNS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Beleginfo - Art 1",
|
"label": "Beleginfo - Art 1",
|
||||||
"fieldname": "Beleginfo - Art 2",
|
"fieldname": "Beleginfo - Art 1",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Link",
|
||||||
|
"options": "DocType"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Beleginfo - Inhalt 1",
|
"label": "Beleginfo - Inhalt 1",
|
||||||
|
"fieldname": "Beleginfo - Inhalt 1",
|
||||||
|
"fieldtype": "Dynamic Link",
|
||||||
|
"options": "Beleginfo - Art 1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Beleginfo - Art 2",
|
||||||
|
"fieldname": "Beleginfo - Art 2",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"options": "DocType"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Beleginfo - Inhalt 2",
|
||||||
"fieldname": "Beleginfo - Inhalt 2",
|
"fieldname": "Beleginfo - Inhalt 2",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Dynamic Link",
|
||||||
|
"options": "Beleginfo - Art 2"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user