From f817663f11b1cb1a0da0f00845f4c0b5355966e4 Mon Sep 17 00:00:00 2001 From: Aulia Bismar Date: Mon, 1 Apr 2019 10:37:28 +0700 Subject: [PATCH 01/56] Renumber Aktiva, remove excess 0 --- .../verified/id_chart_of_accounts.json | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/id_chart_of_accounts.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/id_chart_of_accounts.json index 37f57ec1ad9..d1a0defba94 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/id_chart_of_accounts.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/id_chart_of_accounts.json @@ -38,24 +38,24 @@ "Kas": { "Kas Mata Uang Lain": { "Kas USD": { - "account_number": "1112.0010", + "account_number": "1112.001", "account_type": "Cash" }, "account_number": "1112.000" }, "Kas Rupiah": { "Kas Besar": { - "account_number": "1111.0020", + "account_number": "1111.002", "account_type": "Cash" }, "Kas Kecil": { - "account_number": "1111.0010", + "account_number": "1111.001", "account_type": "Cash" }, "account_number": "1111.000", "account_type": "Cash" }, - "account_number": "1110.0000" + "account_number": "1110.000" }, "Pendapatan Yang Akan di Terima": { "Pendapatan Yang di Terima": { @@ -98,7 +98,7 @@ }, "account_number": "1130.000" }, - "account_number": "1100.0000" + "account_number": "1100.000" }, "Aktiva Tetap": { "Aktiva": { @@ -121,20 +121,20 @@ "Investasi": { "Investasi": { "Deposito": { - "account_number": "1231.003", + "account_number": "1231.300", "is_group": 1 }, - "Investai Saham": { + "Investasi Saham": { "Investasi Saham": { - "account_number": "1231.0011" + "account_number": "1231.101" }, - "account_number": "1231.001" + "account_number": "1231.100" }, "Investasi Perumahan": { "Investasi Perumahan": { - "account_number": "1231.0021" + "account_number": "1231.201" }, - "account_number": "1231.002" + "account_number": "1231.200" }, "account_number": "1231.000" }, @@ -142,7 +142,7 @@ }, "account_number": "1200.000" }, - "account_number": "1000.0000", + "account_number": "1000.000", "root_type": "Asset" }, "Beban": { @@ -684,4 +684,4 @@ "root_type": "Income" } } -} \ No newline at end of file +} From 5ba438af809d8a843b856fc2a6a077b736a4d688 Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Wed, 3 Apr 2019 16:53:19 +0530 Subject: [PATCH 02/56] fix: fetch payment terms --- erpnext/buying/doctype/purchase_order/purchase_order.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 720160676f2..a669238689b 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -416,6 +416,10 @@ def make_purchase_invoice(source_name, target_doc=None): "Purchase Taxes and Charges": { "doctype": "Purchase Taxes and Charges", "add_if_empty": True + }, + "Payment Schedule": { + "doctype": "Payment Schedule", + "add_if_empty": True } }, target_doc, postprocess) From 44d8224a3b29955c7e4a8a5d71769fe708220a27 Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Thu, 4 Apr 2019 15:40:36 +0530 Subject: [PATCH 03/56] fix: test case fix --- .../buying/doctype/purchase_order/test_purchase_order.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index f1507364dfb..2962f0ce3ad 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -6,7 +6,7 @@ import unittest import frappe import frappe.defaults from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry -from frappe.utils import flt, add_days, nowdate +from frappe.utils import flt, add_days, nowdate, getdate from erpnext.stock.doctype.item.test_item import make_item from erpnext.buying.doctype.purchase_order.purchase_order import (make_purchase_receipt, make_purchase_invoice, make_rm_stock_entry as make_subcontract_transfer_entry) from erpnext.stock.doctype.material_request.test_material_request import make_material_request @@ -133,7 +133,7 @@ class TestPurchaseOrder(unittest.TestCase): po.submit() self.assertEqual(po.payment_schedule[0].payment_amount, 2500.0) - self.assertEqual(po.payment_schedule[0].due_date, po.transaction_date) + self.assertEqual(po.payment_schedule[0].due_date, getdate(po.transaction_date)) self.assertEqual(po.payment_schedule[1].payment_amount, 2500.0) self.assertEqual(po.payment_schedule[1].due_date, add_days(po.transaction_date, 30)) pi = make_purchase_invoice(po.name) @@ -143,7 +143,7 @@ class TestPurchaseOrder(unittest.TestCase): self.assertEqual(len(pi.get("items", [])), 1) self.assertEqual(pi.payment_schedule[0].payment_amount, 2500.0) - self.assertEqual(pi.payment_schedule[0].due_date, po.transaction_date) + self.assertEqual(pi.payment_schedule[0].due_date, getdate(po.transaction_date)) self.assertEqual(pi.payment_schedule[1].payment_amount, 2500.0) self.assertEqual(pi.payment_schedule[1].due_date, add_days(po.transaction_date, 30)) From 9f2847e86c9ff8d8e2d2c3ace114545624cb9d75 Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Fri, 5 Apr 2019 11:40:37 +0530 Subject: [PATCH 04/56] fix: test case fixes for travis --- .../doctype/purchase_order/test_purchase_order.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index 2962f0ce3ad..8a472700f58 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -133,9 +133,9 @@ class TestPurchaseOrder(unittest.TestCase): po.submit() self.assertEqual(po.payment_schedule[0].payment_amount, 2500.0) - self.assertEqual(po.payment_schedule[0].due_date, getdate(po.transaction_date)) + self.assertEqual(getdate(po.payment_schedule[0].due_date), getdate(po.transaction_date)) self.assertEqual(po.payment_schedule[1].payment_amount, 2500.0) - self.assertEqual(po.payment_schedule[1].due_date, add_days(po.transaction_date, 30)) + self.assertEqual(getdate(po.payment_schedule[1].due_date), add_days(getdate(po.transaction_date), 30)) pi = make_purchase_invoice(po.name) pi.save() @@ -143,9 +143,9 @@ class TestPurchaseOrder(unittest.TestCase): self.assertEqual(len(pi.get("items", [])), 1) self.assertEqual(pi.payment_schedule[0].payment_amount, 2500.0) - self.assertEqual(pi.payment_schedule[0].due_date, getdate(po.transaction_date)) + self.assertEqual(getdate(pi.payment_schedule[0].due_date), getdate(po.transaction_date)) self.assertEqual(pi.payment_schedule[1].payment_amount, 2500.0) - self.assertEqual(pi.payment_schedule[1].due_date, add_days(po.transaction_date, 30)) + self.assertEqual(getdate(pi.payment_schedule[1].due_date), add_days(getdate(po.transaction_date), 30)) def test_subcontracting(self): po = create_purchase_order(item_code="_Test FG Item", is_subcontracted="Yes") @@ -276,7 +276,7 @@ class TestPurchaseOrder(unittest.TestCase): pi = make_purchase_invoice(po.name) - self.assertFalse(pi.get('payment_schedule')) + self.assertTrue(pi.get('payment_schedule')) def test_terms_copied(self): po = create_purchase_order(do_not_save=1) From 7df8c0ef82d72920aba342623dc10c5c14b1d8f8 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 16 Apr 2019 15:57:21 +0530 Subject: [PATCH 05/56] fix: woocommerce settings patch --- .../patches/v11_1/woocommerce_set_creation_user.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/erpnext/patches/v11_1/woocommerce_set_creation_user.py b/erpnext/patches/v11_1/woocommerce_set_creation_user.py index e50d5ae711b..5ccdec6d262 100644 --- a/erpnext/patches/v11_1/woocommerce_set_creation_user.py +++ b/erpnext/patches/v11_1/woocommerce_set_creation_user.py @@ -1,10 +1,11 @@ from __future__ import unicode_literals import frappe +from frappe.utils import cint def execute(): - woocommerce_setting_enable_sync = frappe.db.sql("SELECT t.value FROM tabSingles t WHERE doctype = 'Woocommerce Settings' AND field = 'enable_sync'", as_dict=True) - if len(woocommerce_setting_enable_sync) and woocommerce_setting_enable_sync[0].value == '1': - frappe.db.sql("""UPDATE tabSingles - SET value = (SELECT t.value FROM tabSingles t WHERE doctype = 'Woocommerce Settings' AND field = 'modified_by') - WHERE doctype = 'Woocommerce Settings' - AND field = 'creation_user';""") \ No newline at end of file + frappe.reload_doc("erpnext_integrations", "doctype","woocommerce_settings") + doc = frappe.get_doc("Woocommerce Settings") + + if cint(doc.enable_sync): + doc.creation_user = doc.modified_by + doc.save(ignore_permissions=True) \ No newline at end of file From 64980fed5971d7af28c0714b6ec6529d91279039 Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Tue, 16 Apr 2019 16:29:13 +0530 Subject: [PATCH 06/56] fix: validate percentage total --- erpnext/selling/doctype/customer/customer.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js index 3b0e75ff6ca..89811656eed 100644 --- a/erpnext/selling/doctype/customer/customer.js +++ b/erpnext/selling/doctype/customer/customer.js @@ -123,5 +123,11 @@ frappe.ui.form.on("Customer", { }, validate: function(frm) { if(frm.doc.lead_name) frappe.model.clear_doc("Lead", frm.doc.lead_name); + + var total = 0; + for (var idx in frm.doc.sales_team) { + total += frm.doc.sales_team[idx].allocated_percentage; + if (total > 100) frappe.throw(__("Total contribution percentage can't exceed 100")); + } }, }); \ No newline at end of file From b380a02d09412ff617bc9f9d6f9ee932eca07d9e Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Tue, 16 Apr 2019 16:52:55 +0530 Subject: [PATCH 07/56] fix: make salary details submitable if salary structure is submitted --- erpnext/patches.txt | 3 ++- .../patches/v11_1/set_salary_details_submitable.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 erpnext/patches/v11_1/set_salary_details_submitable.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index e64aa378e2e..2df10899800 100755 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -590,4 +590,5 @@ erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019 erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019 erpnext.patches.v11_1.make_job_card_time_logs erpnext.patches.v11_1.set_variant_based_on -erpnext.patches.v11_1.woocommerce_set_creation_user \ No newline at end of file +erpnext.patches.v11_1.woocommerce_set_creation_user +erpnext.patches.v11_1.set_salary_details_submitable \ No newline at end of file diff --git a/erpnext/patches/v11_1/set_salary_details_submitable.py b/erpnext/patches/v11_1/set_salary_details_submitable.py new file mode 100644 index 00000000000..36e78792ecb --- /dev/null +++ b/erpnext/patches/v11_1/set_salary_details_submitable.py @@ -0,0 +1,12 @@ +from __future__ import unicode_literals +import frappe +import itertools + +def execute(): + salary_structure = frappe.get_all("Salary Structure", filters={"docstatus": 1}, as_list=1) + salary_structure = list(itertools.chain(*salary_structure)) + salary_structure = "', '".join(map(str, salary_structure)) + + query = ''' update `tabSalary Detail` set docstatus=1 where parent in ('{0}')'''.format(salary_structure) + frappe.db.sql(query) + From d6757b7af6bcfd64406d8d11ba5e0eb2ec9ad088 Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Tue, 16 Apr 2019 17:32:45 +0530 Subject: [PATCH 08/56] fix: total error arissing due to blank link field --- erpnext/projects/report/billing_summary.py | 16 ---------------- .../employee_billing_summary.json | 4 ++-- .../project_billing_summary.json | 4 ++-- 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/erpnext/projects/report/billing_summary.py b/erpnext/projects/report/billing_summary.py index 4906ba9d997..d2a229315fd 100644 --- a/erpnext/projects/report/billing_summary.py +++ b/erpnext/projects/report/billing_summary.py @@ -54,9 +54,6 @@ def get_data(filters): data = [] record = get_records(filters) - billable_hours_worked = 0 - hours_worked = 0 - working_cost = 0 for entries in record: total_hours = 0 total_billable_hours = 0 @@ -81,11 +78,6 @@ def get_data(filters): total_hours, total_billable_hours, total_amount = get_billable_and_total_hours(activity, time_end, time_start, total_hours, total_billable_hours, total_amount) - - hours_worked += total_hours - billable_hours_worked += total_billable_hours - working_cost += total_amount - row = { "employee": entries.employee, "employee_name": entries.employee_name, @@ -97,14 +89,6 @@ def get_data(filters): if entries_exists: data.append(row) entries_exists = False - - total = { - "total_billable_hours": billable_hours_worked, - "total_hours": hours_worked, - "amount": working_cost - } - if billable_hours_worked !=0 or hours_worked !=0 or working_cost !=0: - data.append(total) return data def get_records(filters): diff --git a/erpnext/projects/report/employee_billing_summary/employee_billing_summary.json b/erpnext/projects/report/employee_billing_summary/employee_billing_summary.json index 433ebac5ddf..cab8db251c8 100644 --- a/erpnext/projects/report/employee_billing_summary/employee_billing_summary.json +++ b/erpnext/projects/report/employee_billing_summary/employee_billing_summary.json @@ -1,5 +1,5 @@ { - "add_total_row": 0, + "add_total_row": 1, "creation": "2019-03-08 15:08:19.929728", "disable_prepared_report": 0, "disabled": 0, @@ -7,7 +7,7 @@ "doctype": "Report", "idx": 0, "is_standard": "Yes", - "modified": "2019-03-08 15:08:19.929728", + "modified": "2019-04-16 17:29:18.376932", "modified_by": "Administrator", "module": "Projects", "name": "Employee Billing Summary", diff --git a/erpnext/projects/report/project_billing_summary/project_billing_summary.json b/erpnext/projects/report/project_billing_summary/project_billing_summary.json index a3f91c802d5..c65053e85be 100644 --- a/erpnext/projects/report/project_billing_summary/project_billing_summary.json +++ b/erpnext/projects/report/project_billing_summary/project_billing_summary.json @@ -1,5 +1,5 @@ { - "add_total_row": 0, + "add_total_row": 1, "creation": "2019-03-11 16:22:39.460524", "disable_prepared_report": 0, "disabled": 0, @@ -7,7 +7,7 @@ "doctype": "Report", "idx": 0, "is_standard": "Yes", - "modified": "2019-03-11 16:22:39.460524", + "modified": "2019-04-16 17:28:32.749633", "modified_by": "Administrator", "module": "Projects", "name": "Project Billing Summary", From 82e76b2c0c7c223ca01287e34e269acc0342c435 Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira <33246109+kennethsequeira@users.noreply.github.com> Date: Tue, 16 Apr 2019 18:00:21 +0530 Subject: [PATCH 09/56] Improve Validation Message in BOM Update following validation message: "Price not found for item {0} and price list {1}" to "Price not found for item {0} in price list {1}" --- erpnext/manufacturing/doctype/bom/bom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index c65693bddf6..b04ba7c4fb0 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -201,7 +201,7 @@ class BOM(WebsiteGenerator): if not rate: if self.rm_cost_as_per == "Price List": - frappe.msgprint(_("Price not found for item {0} and price list {1}") + frappe.msgprint(_("Price not found for item {0} in price list {1}") .format(arg["item_code"], self.buying_price_list), alert=True) else: frappe.msgprint(_("{0} not found for item {1}") From 15c7a058799cd7e18dd85dd4061af6d39e16ecb6 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 16 Apr 2019 19:16:14 +0530 Subject: [PATCH 10/56] fix: If finance book filter is not set then show all the entries --- .../accounts_receivable.py | 7 +------ .../asset_depreciation_ledger.py | 5 +---- .../consolidated_financial_statement.py | 19 +++++++------------ .../customer_ledger_summary.py | 8 ++------ .../accounts/report/financial_statements.py | 10 ++-------- .../report/general_ledger/general_ledger.py | 6 +----- 6 files changed, 14 insertions(+), 41 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index d49a33bd016..b7154550297 100755 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -487,13 +487,8 @@ class ReceivablePayableReport(object): conditions.append("company=%s") values.append(self.filters.company) - company_finance_book = erpnext.get_default_finance_book(self.filters.company) - - if not self.filters.finance_book or (self.filters.finance_book == company_finance_book): + if self.filters.finance_book: conditions.append("ifnull(finance_book,'') in (%s, '')") - values.append(company_finance_book) - elif self.filters.finance_book: - conditions.append("ifnull(finance_book,'') = %s") values.append(self.filters.finance_book) if self.filters.get(party_type_field): diff --git a/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.py b/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.py index 36131319101..16bef565252 100644 --- a/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.py +++ b/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.py @@ -31,11 +31,8 @@ def get_data(filters): filters_data.append(["against_voucher", "in", assets]) - company_finance_book = erpnext.get_default_finance_book(filters.get("company")) - if (not filters.get('finance_book') or (filters.get('finance_book') == company_finance_book)): + if filters.get("finance_book"): filters_data.append(["finance_book", "in", ['', filters.get('finance_book')]]) - elif filters.get("finance_book"): - filters_data.append(["finance_book", "=", filters.get('finance_book')]) gl_entries = frappe.get_all('GL Entry', filters= filters_data, diff --git a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py index b9aebd83f93..1bb8580f644 100644 --- a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py +++ b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py @@ -101,7 +101,7 @@ def get_income_expense_data(companies, fiscal_year, filters): net_profit_loss = get_net_profit_loss(income, expense, companies, filters.company, company_currency, True) return income, expense, net_profit_loss - + def get_cash_flow_data(fiscal_year, companies, filters): cash_flow_accounts = get_cash_flow_accounts() @@ -123,7 +123,7 @@ def get_cash_flow_data(fiscal_year, companies, filters): # add first net income in operations section if net_profit_loss: net_profit_loss.update({ - "indent": 1, + "indent": 1, "parent_account": cash_flow_accounts[0]['section_header'] }) data.append(net_profit_loss) @@ -327,7 +327,7 @@ def set_gl_entries_by_account(from_date, to_date, root_lft, root_rgt, filters, g accounts_by_name, ignore_closing_entries=False): """Returns a dict like { "account": [gl entries], ... }""" - company_lft, company_rgt = frappe.get_cached_value('Company', + company_lft, company_rgt = frappe.get_cached_value('Company', filters.get('company'), ["lft", "rgt"]) additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters) @@ -354,7 +354,8 @@ def set_gl_entries_by_account(from_date, to_date, root_lft, root_rgt, filters, g "to_date": to_date, "lft": root_lft, "rgt": root_rgt, - "company": d.name + "company": d.name, + "finance_book": filters.get("finance_book") }, as_dict=True) @@ -384,14 +385,8 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters): if from_date: additional_conditions.append("gl.posting_date >= %(from_date)s") - company_finance_book = erpnext.get_default_finance_book(filters.get("company")) - - if not filters.get('finance_book') or (filters.get('finance_book') == company_finance_book): - additional_conditions.append("ifnull(finance_book, '') in ('%s', '')" % - frappe.db.escape(company_finance_book)) - elif filters.get("finance_book"): - additional_conditions.append("ifnull(finance_book, '') = '%s' " % - frappe.db.escape(filters.get("finance_book"))) + if filters.get("finance_book"): + additional_conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')") return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else "" diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 23b963b759e..7872dbe7b16 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -184,12 +184,8 @@ class PartyLedgerSummaryReport(object): if self.filters.company: conditions.append("gle.company=%(company)s") - self.filters.company_finance_book = erpnext.get_default_finance_book(self.filters.company) - - if not self.filters.finance_book or (self.filters.finance_book == self.filters.company_finance_book): - conditions.append("ifnull(finance_book,'') in (%(company_finance_book)s, '')") - elif self.filters.finance_book: - conditions.append("ifnull(finance_book,'') = %(finance_book)s") + if self.filters.finance_book: + conditions.append("ifnull(finance_book,'') in (%(finance_book)s, '')") if self.filters.get("party"): conditions.append("party=%(party)s") diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index e9aecfb394e..52056ef2193 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -392,14 +392,8 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters): filters.cost_center = get_cost_centers_with_children(filters.cost_center) additional_conditions.append("cost_center in %(cost_center)s") - company_finance_book = erpnext.get_default_finance_book(filters.get("company")) - - if not filters.get('finance_book') or (filters.get('finance_book') == company_finance_book): - additional_conditions.append("ifnull(finance_book, '') in ('%s', '')" % - frappe.db.escape(company_finance_book)) - elif filters.get("finance_book"): - additional_conditions.append("ifnull(finance_book, '') = '%s' " % - frappe.db.escape(filters.get("finance_book"))) + if filters.get("finance_book"): + additional_conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')") return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else "" diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index ecb18f78b18..44ca8d3549a 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -186,12 +186,8 @@ def get_conditions(filters): if filters.get("project"): conditions.append("project in %(project)s") - company_finance_book = erpnext.get_default_finance_book(filters.get("company")) - if not filters.get("finance_book") or (filters.get("finance_book") == company_finance_book): - filters['finance_book'] = company_finance_book + if filters.get("finance_book"): conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')") - elif filters.get("finance_book"): - conditions.append("ifnull(finance_book, '') = %(finance_book)s") from frappe.desk.reportview import build_match_conditions match_conditions = build_match_conditions("GL Entry") From 07f8e6bbfc7bf92fbd8eb3e98abe76292a83a723 Mon Sep 17 00:00:00 2001 From: NahuelOperto Date: Tue, 16 Apr 2019 11:35:16 -0300 Subject: [PATCH 11/56] fix get_item_warehouse_quantity_map method --- .../available_stock_for_packing_items.py | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py index 1e45a736735..48494247595 100644 --- a/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py +++ b/erpnext/selling/report/available_stock_for_packing_items/available_stock_for_packing_items.py @@ -12,7 +12,7 @@ def execute(filters=None): iwq_map = get_item_warehouse_quantity_map() item_map = get_item_details() - data = [] + data = [] for sbom, warehouse in iwq_map.items(): total = 0 total_qty = 0 @@ -21,7 +21,7 @@ def execute(filters=None): total += 1 row = [sbom, item_map.get(sbom).item_name, item_map.get(sbom).description, item_map.get(sbom).stock_uom, wh] - available_qty = min(item_qty.values()) + available_qty = item_qty total_qty += flt(available_qty) row += [available_qty] @@ -66,15 +66,30 @@ def get_item_warehouse_quantity(): return iwq_map def get_item_warehouse_quantity_map(): + query = """SELECT parent, warehouse, MIN(qty) AS qty + FROM (SELECT b.parent, bi.item_code, bi.warehouse, + sum(bi.projected_qty) / b.qty AS qty + FROM tabBin AS bi, (SELECT b.parent, b.item_code, b.qty, w.name + FROM `tabProduct Bundle Item` b, `tabWarehouse` w) AS b + WHERE bi.item_code = b.item_code + AND bi.warehouse = b.name + GROUP BY b.parent, b.item_code, bi.warehouse + UNION ALL + SELECT b.parent, b.item_code, b.name, 0 AS qty + FROM (SELECT b.parent, b.item_code, b.qty, w.name + FROM `tabProduct Bundle Item` b, `tabWarehouse` w) AS b + WHERE NOT EXISTS(SELECT * + FROM `tabBin` AS bi + WHERE bi.item_code = b.item_code + AND bi.warehouse = b.name)) AS r + GROUP BY parent, warehouse + HAVING MIN(qty) != 0""" + result = frappe.db.sql(query, as_dict=1) + last_sbom = "" sbom_map = {} - iwq_map = get_item_warehouse_quantity() - sbom_item_map = get_product_bundle_items() - - for sbom, sbom_items in sbom_item_map.items(): - for item, child_qty in sbom_items.items(): - for wh, qty in iwq_map.get(item, {}).items(): - avail_qty = flt(qty) / flt(child_qty) - sbom_map.setdefault(sbom, {}).setdefault(wh, {}) \ - .setdefault(item, avail_qty) - - return sbom_map \ No newline at end of file + for line in result: + if line.get("parent") != last_sbom: + last_sbom = line.get("parent") + actual_dict = sbom_map.setdefault(last_sbom, {}) + actual_dict.setdefault(line.get("warehouse"), line.get("qty")) + return sbom_map From 4bccd692e5afb1c167ed273e1b5cd46a7937ad5d Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Tue, 16 Apr 2019 20:50:46 +0530 Subject: [PATCH 12/56] fix: GSTR1 B2C report fix --- erpnext/regional/report/gstr_1/gstr_1.py | 49 +++++++++++++++++++----- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/erpnext/regional/report/gstr_1/gstr_1.py b/erpnext/regional/report/gstr_1/gstr_1.py index 0c7d066216a..aba12dc09ee 100644 --- a/erpnext/regional/report/gstr_1/gstr_1.py +++ b/erpnext/regional/report/gstr_1/gstr_1.py @@ -38,7 +38,6 @@ class Gstr1Report(object): shipping_bill_date, reason_for_issuing_document """ - self.customer_type = "Company" if self.filters.get("type_of_business") == "B2B" else "Individual" def run(self): self.get_columns() @@ -54,18 +53,50 @@ class Gstr1Report(object): return self.columns, self.data def get_data(self): + + if self.filters.get("type_of_business") == "B2C Small": + self.get_b2cs_data() + else: + for inv, items_based_on_rate in self.items_based_on_tax_rate.items(): + invoice_details = self.invoices.get(inv) + for rate, items in items_based_on_rate.items(): + row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) + + if self.filters.get("type_of_business") == "CDNR": + row.append("Y" if invoice_details.posting_date <= date(2017, 7, 1) else "N") + row.append("C" if invoice_details.return_against else "R") + + self.data.append(row) + + def get_b2cs_data(self): + b2cs_output = {} + for inv, items_based_on_rate in self.items_based_on_tax_rate.items(): invoice_details = self.invoices.get(inv) + for rate, items in items_based_on_rate.items(): - row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) - if self.filters.get("type_of_business") == "B2C Small": - row.append("E" if invoice_details.ecommerce_gstin else "OE") + place_of_supply = invoice_details.get("place_of_supply") + ecommerce_gstin = invoice_details.get("ecommerce_gstin") - if self.filters.get("type_of_business") == "CDNR": - row.append("Y" if invoice_details.posting_date <= date(2017, 7, 1) else "N") - row.append("C" if invoice_details.return_against else "R") + b2cs_output.setdefault((rate, place_of_supply, ecommerce_gstin),{ + "place_of_supply": "", + "ecommerce_gstin": "", + "rate": "", + "taxable_value": 0, + "cess_amount": 0, + "type": 0 + }) - self.data.append(row) + row = b2cs_output.get((rate, place_of_supply, ecommerce_gstin)) + row["place_of_supply"] = place_of_supply + row["ecommerce_gstin"] = ecommerce_gstin + row["rate"] = rate + row["taxable_value"] += sum([abs(net_amount) + for item_code, net_amount in self.invoice_items.get(inv).items() if item_code in items]) + row["type"] = "E" if ecommerce_gstin else "OE" + + for key, value in iteritems(b2cs_output): + self.data.append(value) def get_row_data_for_invoice(self, invoice, invoice_details, tax_rate, items): row = [] @@ -113,7 +144,7 @@ class Gstr1Report(object): if self.filters.get(opts[0]): conditions += opts[1] - customers = frappe.get_all("Customer", filters={"customer_type": self.customer_type}) + customers = frappe.get_all("Customer", filters={"disabled": 0}) if self.filters.get("type_of_business") == "B2B": conditions += """ and ifnull(invoice_type, '') != 'Export' and is_return != 1 From 97bf12734a9126fba9e1de7552810c2e28faa12e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 16 Apr 2019 22:11:22 +0530 Subject: [PATCH 13/56] fix: Pull items from PR to PI --- erpnext/controllers/accounts_controller.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index bb088cfe118..ca24cd670bd 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -30,9 +30,8 @@ class AccountsController(TransactionBase): return self.__company_currency def onload(self): - if self.get("__onload"): - self.get("__onload").make_payment_via_journal_entry \ - = frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry') + self.set_onload("make_payment_via_journal_entry", + frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry')) if self.is_new(): relevant_docs = ("Quotation", "Purchase Order", "Sales Order", From 7be07361547b8ff05b3642d9350db08f7031d148 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 16 Apr 2019 23:05:39 +0530 Subject: [PATCH 14/56] fix: removed debug --- erpnext/projects/doctype/project/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index f52d8fde35c..ebb15997962 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -241,7 +241,7 @@ class Project(Document): from_expense_claim = frappe.db.sql("""select sum(total_sanctioned_amount) as total_sanctioned_amount from `tabExpense Claim` where project = %s - and docstatus = 1""", self.name, as_dict=1, debug=1)[0] + and docstatus = 1""", self.name, as_dict=1)[0] self.actual_start_date = from_time_sheet.start_date self.actual_end_date = from_time_sheet.end_date From ba47f897026a11d5c4d1c845213d8228c81724a1 Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Wed, 17 Apr 2019 11:24:04 +0530 Subject: [PATCH 15/56] fix: added a single value to fetch payment terms --- .../doctype/fetch_payment_terms/__init__.py | 0 .../fetch_payment_terms.js | 8 ++ .../fetch_payment_terms.json | 96 +++++++++++++++++++ .../fetch_payment_terms.py | 10 ++ .../test_fetch_payment_terms.js | 23 +++++ .../test_fetch_payment_terms.py | 10 ++ .../doctype/purchase_order/purchase_order.py | 16 ++-- erpnext/config/accounts.py | 8 +- 8 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 erpnext/accounts/doctype/fetch_payment_terms/__init__.py create mode 100644 erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js create mode 100644 erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.json create mode 100644 erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py create mode 100644 erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.js create mode 100644 erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py diff --git a/erpnext/accounts/doctype/fetch_payment_terms/__init__.py b/erpnext/accounts/doctype/fetch_payment_terms/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js new file mode 100644 index 00000000000..faa011c9fe3 --- /dev/null +++ b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js @@ -0,0 +1,8 @@ +// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Fetch Payment Terms', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.json b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.json new file mode 100644 index 00000000000..c1f83459f81 --- /dev/null +++ b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.json @@ -0,0 +1,96 @@ +{ + "allow_copy": 0, + "allow_events_in_timeline": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2019-04-17 11:00:32.823034", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 0, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "fetch_payment_terms", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Always Fetch Payment Terms", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 1, + "istable": 0, + "max_attachments": 0, + "modified": "2019-04-17 11:06:02.216048", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Fetch Payment Terms", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "ASC", + "track_changes": 1, + "track_seen": 0, + "track_views": 0 +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py new file mode 100644 index 00000000000..c7bdd177e7e --- /dev/null +++ b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class FetchPaymentTerms(Document): + pass diff --git a/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.js b/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.js new file mode 100644 index 00000000000..80fd8e34f02 --- /dev/null +++ b/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Fetch Payment Terms", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Fetch Payment Terms + () => frappe.tests.make('Fetch Payment Terms', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py b/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py new file mode 100644 index 00000000000..771a44c208e --- /dev/null +++ b/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +class TestFetchPaymentTerms(unittest.TestCase): + pass diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index a669238689b..27bce5b828a 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -393,7 +393,7 @@ def make_purchase_invoice(source_name, target_doc=None): or item.get("buying_cost_center") or item_group.get("buying_cost_center")) - doc = get_mapped_doc("Purchase Order", source_name, { + fields = { "Purchase Order": { "doctype": "Purchase Invoice", "field_map": { @@ -416,12 +416,16 @@ def make_purchase_invoice(source_name, target_doc=None): "Purchase Taxes and Charges": { "doctype": "Purchase Taxes and Charges", "add_if_empty": True - }, - "Payment Schedule": { - "doctype": "Payment Schedule", - "add_if_empty": True } - }, target_doc, postprocess) + } + + if frappe.get_single("Fetch Payment Terms").fetch_payment_terms == 1: + fields["Payment Schedule"] = { + "doctype": "Payment Schedule", + "add_if_empty": True + } + + doc = get_mapped_doc("Purchase Order", source_name, fields, target_doc, postprocess) return doc diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py index 42d0df0a06f..f3cf8a28880 100644 --- a/erpnext/config/accounts.py +++ b/erpnext/config/accounts.py @@ -297,7 +297,13 @@ def get_data(): "name": "C-Form", "description": _("C-Form records"), "country": "India" - } + }, + { + "type": "doctype", + "name": "Fetch Payment Terms", + "label": _("Fetch Payment Terms"), + "description": _("Fetch Payment Terms") + }, ] }, { From 2b54cee4aaf7ec95032b90c1e4357937e7ec2d07 Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Wed, 17 Apr 2019 12:09:19 +0530 Subject: [PATCH 16/56] fix: test case --- .../buying/doctype/purchase_order/test_purchase_order.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index 8a472700f58..c7401faeb2d 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -276,7 +276,7 @@ class TestPurchaseOrder(unittest.TestCase): pi = make_purchase_invoice(po.name) - self.assertTrue(pi.get('payment_schedule')) + self.assertFalse(pi.get('payment_schedule')) def test_terms_copied(self): po = create_purchase_order(do_not_save=1) @@ -294,6 +294,10 @@ class TestPurchaseOrder(unittest.TestCase): make_stock_entry(target="_Test Warehouse - _TC", qty=10, basic_rate=100) make_stock_entry(target="_Test Warehouse - _TC", item_code="_Test Item Home Desktop 100", qty=20, basic_rate=100) + make_stock_entry(target="_Test Warehouse 1 - _TC", item_code="_Test Item", + qty=30, basic_rate=100) + make_stock_entry(target="_Test Warehouse 1 - _TC", item_code="_Test Item Home Desktop 100", + qty=30, basic_rate=100) bin1 = frappe.db.get_value("Bin", filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, From 308ae1f15584bb62f0e097f1a4afae3851f42a0f Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Wed, 17 Apr 2019 12:42:00 +0530 Subject: [PATCH 17/56] fix: codacy fixes --- .../doctype/fetch_payment_terms/fetch_payment_terms.js | 3 --- .../doctype/fetch_payment_terms/fetch_payment_terms.py | 1 - .../doctype/fetch_payment_terms/test_fetch_payment_terms.py | 1 - erpnext/buying/doctype/purchase_order/purchase_order.py | 6 +++--- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js index faa011c9fe3..d16535a2d8c 100644 --- a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js +++ b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js @@ -2,7 +2,4 @@ // For license information, please see license.txt frappe.ui.form.on('Fetch Payment Terms', { - refresh: function(frm) { - - } }); diff --git a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py index c7bdd177e7e..fb2b1467c9b 100644 --- a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py +++ b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py @@ -3,7 +3,6 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe from frappe.model.document import Document class FetchPaymentTerms(Document): diff --git a/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py b/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py index 771a44c208e..86d500466f1 100644 --- a/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py +++ b/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py @@ -3,7 +3,6 @@ # See license.txt from __future__ import unicode_literals -import frappe import unittest class TestFetchPaymentTerms(unittest.TestCase): diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 27bce5b828a..78113d7dad3 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -421,9 +421,9 @@ def make_purchase_invoice(source_name, target_doc=None): if frappe.get_single("Fetch Payment Terms").fetch_payment_terms == 1: fields["Payment Schedule"] = { - "doctype": "Payment Schedule", - "add_if_empty": True - } + "doctype": "Payment Schedule", + "add_if_empty": True + } doc = get_mapped_doc("Purchase Order", source_name, fields, target_doc, postprocess) From 1865e0df7c0f2f7af7009d0901554e81ecbecf28 Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Wed, 17 Apr 2019 15:35:43 +0530 Subject: [PATCH 18/56] refactor: fetch payment terms in account settings --- .../accounts_settings/accounts_settings.json | 1384 +++++++++-------- .../doctype/fetch_payment_terms/__init__.py | 0 .../fetch_payment_terms.js | 5 - .../fetch_payment_terms.json | 96 -- .../fetch_payment_terms.py | 9 - .../test_fetch_payment_terms.js | 23 - .../test_fetch_payment_terms.py | 9 - .../doctype/purchase_order/purchase_order.py | 2 +- erpnext/config/accounts.py | 8 +- 9 files changed, 720 insertions(+), 816 deletions(-) delete mode 100644 erpnext/accounts/doctype/fetch_payment_terms/__init__.py delete mode 100644 erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js delete mode 100644 erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.json delete mode 100644 erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py delete mode 100644 erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.js delete mode 100644 erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 1fc226575f3..5ace0dc6fe6 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -1,717 +1,769 @@ { - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-06-24 15:49:57", - "custom": 0, - "description": "Settings for Accounts", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Other", - "editable_grid": 1, - "engine": "InnoDB", + "allow_copy": 0, + "allow_events_in_timeline": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2013-06-24 15:49:57", + "custom": 0, + "description": "Settings for Accounts", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Other", + "editable_grid": 1, + "engine": "InnoDB", "fields": [ { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "description": "If enabled, the system will post accounting entries for inventory automatically.", - "fieldname": "auto_accounting_for_stock", - "fieldtype": "Check", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Make Accounting Entry For Every Stock Movement", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "description": "If enabled, the system will post accounting entries for inventory automatically.", + "fetch_if_empty": 0, + "fieldname": "auto_accounting_for_stock", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Make Accounting Entry For Every Stock Movement", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.", - "fieldname": "acc_frozen_upto", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Accounts Frozen Upto", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.", + "fetch_if_empty": 0, + "fieldname": "acc_frozen_upto", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Accounts Frozen Upto", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts", - "fieldname": "frozen_accounts_modifier", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Role Allowed to Set Frozen Accounts & Edit Frozen Entries", - "length": 0, - "no_copy": 0, - "options": "Role", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts", + "fetch_if_empty": 0, + "fieldname": "frozen_accounts_modifier", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Role Allowed to Set Frozen Accounts & Edit Frozen Entries", + "length": 0, + "no_copy": 0, + "options": "Role", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_4", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Role that is allowed to submit transactions that exceed credit limits set.", - "fieldname": "credit_controller", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Credit Controller", - "length": 0, - "no_copy": 0, - "options": "Role", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Role that is allowed to submit transactions that exceed credit limits set.", + "fetch_if_empty": 0, + "fieldname": "credit_controller", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Credit Controller", + "length": 0, + "no_copy": 0, + "options": "Role", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "check_supplier_invoice_uniqueness", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Check Supplier Invoice Number Uniqueness", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "check_supplier_invoice_uniqueness", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Check Supplier Invoice Number Uniqueness", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "make_payment_via_journal_entry", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Make Payment via Journal Entry", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "make_payment_via_journal_entry", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Make Payment via Journal Entry", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "fieldname": "unlink_payment_on_cancellation_of_invoice", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Unlink Payment on Cancellation of Invoice", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fetch_if_empty": 0, + "fieldname": "unlink_payment_on_cancellation_of_invoice", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Unlink Payment on Cancellation of Invoice", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "fieldname": "book_asset_depreciation_entry_automatically", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Book Asset Depreciation Entry Automatically", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fetch_if_empty": 0, + "fieldname": "book_asset_depreciation_entry_automatically", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Book Asset Depreciation Entry Automatically", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "allow_cost_center_in_entry_of_bs_account", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Allow Cost Center In Entry of Balance Sheet Account", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "allow_cost_center_in_entry_of_bs_account", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allow Cost Center In Entry of Balance Sheet Account", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "print_settings", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Print Settings", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "automatically_fetch_payment_terms", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Automatically Fetch Payment Terms", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "show_inclusive_tax_in_print", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Show Inclusive Tax In Print", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "print_settings", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Print Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_12", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "show_inclusive_tax_in_print", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Show Inclusive Tax In Print", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "show_payment_schedule_in_print", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Show Payment Schedule in Print", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "column_break_12", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "currency_exchange_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Currency Exchange Settings", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "show_payment_schedule_in_print", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Show Payment Schedule in Print", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "fieldname": "allow_stale", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Allow Stale Exchange Rates", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "currency_exchange_section", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Currency Exchange Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "depends_on": "eval:doc.allow_stale==0", - "fieldname": "stale_days", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Stale Days", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fetch_if_empty": 0, + "fieldname": "allow_stale", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Allow Stale Exchange Rates", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "report_settings_sb", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Report Settings", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "depends_on": "eval:doc.allow_stale==0", + "fetch_if_empty": 0, + "fieldname": "stale_days", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Stale Days", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0", - "description": "Only select if you have setup Cash Flow Mapper documents", - "fieldname": "use_custom_cash_flow", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Use Custom Cash Flow Format", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fetch_if_empty": 0, + "fieldname": "report_settings_sb", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Report Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "description": "Only select if you have setup Cash Flow Mapper documents", + "fetch_if_empty": 0, + "fieldname": "use_custom_cash_flow", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Use Custom Cash Flow Format", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "icon-cog", - "idx": 1, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "max_attachments": 0, - "modified": "2019-01-07 16:52:03.869199", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Accounts Settings", - "owner": "Administrator", + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "icon-cog", + "idx": 1, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 1, + "istable": 0, + "max_attachments": 0, + "modified": "2019-04-17 05:58:23.012494", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Accounts Settings", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "Accounts Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Accounts Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Sales User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Purchase User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_order": "ASC", - "track_changes": 1, - "track_seen": 0, + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_order": "ASC", + "track_changes": 1, + "track_seen": 0, "track_views": 0 } \ No newline at end of file diff --git a/erpnext/accounts/doctype/fetch_payment_terms/__init__.py b/erpnext/accounts/doctype/fetch_payment_terms/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js deleted file mode 100644 index d16535a2d8c..00000000000 --- a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.js +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Fetch Payment Terms', { -}); diff --git a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.json b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.json deleted file mode 100644 index c1f83459f81..00000000000 --- a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2019-04-17 11:00:32.823034", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 0, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "fetch_payment_terms", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Always Fetch Payment Terms", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "max_attachments": 0, - "modified": "2019-04-17 11:06:02.216048", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Fetch Payment Terms", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "ASC", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py b/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py deleted file mode 100644 index fb2b1467c9b..00000000000 --- a/erpnext/accounts/doctype/fetch_payment_terms/fetch_payment_terms.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -from frappe.model.document import Document - -class FetchPaymentTerms(Document): - pass diff --git a/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.js b/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.js deleted file mode 100644 index 80fd8e34f02..00000000000 --- a/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Fetch Payment Terms", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially([ - // insert a new Fetch Payment Terms - () => frappe.tests.make('Fetch Payment Terms', [ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py b/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py deleted file mode 100644 index 86d500466f1..00000000000 --- a/erpnext/accounts/doctype/fetch_payment_terms/test_fetch_payment_terms.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -import unittest - -class TestFetchPaymentTerms(unittest.TestCase): - pass diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 78113d7dad3..6e452350de6 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -419,7 +419,7 @@ def make_purchase_invoice(source_name, target_doc=None): } } - if frappe.get_single("Fetch Payment Terms").fetch_payment_terms == 1: + if frappe.get_single("Accounts Settings").automatically_fetch_payment_terms == 1: fields["Payment Schedule"] = { "doctype": "Payment Schedule", "add_if_empty": True diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py index f3cf8a28880..42d0df0a06f 100644 --- a/erpnext/config/accounts.py +++ b/erpnext/config/accounts.py @@ -297,13 +297,7 @@ def get_data(): "name": "C-Form", "description": _("C-Form records"), "country": "India" - }, - { - "type": "doctype", - "name": "Fetch Payment Terms", - "label": _("Fetch Payment Terms"), - "description": _("Fetch Payment Terms") - }, + } ] }, { From 22ad81fb5758067b658a9faed9e8ee7a44518d5c Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Thu, 18 Apr 2019 15:45:47 +0530 Subject: [PATCH 19/56] fix: Remove unwanted parent & parenttype field (#17274) --- .../print_format/credit_note/credit_note.json | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/erpnext/accounts/print_format/credit_note/credit_note.json b/erpnext/accounts/print_format/credit_note/credit_note.json index 863d4aa6073..c5a11cf3958 100644 --- a/erpnext/accounts/print_format/credit_note/credit_note.json +++ b/erpnext/accounts/print_format/credit_note/credit_note.json @@ -1,19 +1,23 @@ { - "creation": "2014-08-28 11:11:39.796473", - "custom_format": 0, - "disabled": 0, - "doc_type": "Journal Entry", - "docstatus": 0, - "doctype": "Print Format", - "html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n\n
\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Credit Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Credit To\"), doc.pay_to_recd_from),\n (_(\"Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Amount\"), \"\" + doc.get_formatted(\"total_amount\") + \"
\" + (doc.total_amount_in_words or \"\") + \"
\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n\n
\n
\n
{{ value }}
\n
\n\n {%- endfor -%}\n\n
\n
\n

\n {{ _(\"For\") }} {{ doc.company }},
\n
\n
\n
\n {{ _(\"Authorized Signatory\") }}\n

\n
\n\n\n", - "idx": 2, - "modified": "2015-07-22 17:42:01.560817", - "modified_by": "Administrator", - "name": "Credit Note", - "owner": "Administrator", - "parent": "Journal Entry", - "parentfield": "__print_formats", - "parenttype": "DocType", - "print_format_type": "Server", + "align_labels_right": 0, + "creation": "2014-08-28 11:11:39.796473", + "custom_format": 0, + "disabled": 0, + "doc_type": "Journal Entry", + "docstatus": 0, + "doctype": "Print Format", + "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"
\\t\\t\\t\\t

Journal Entry
{{ doc.name }}\\t\\t\\t\\t

\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"voucher_type\", \"print_hide\": 0, \"label\": \"Entry Type\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"posting_date\", \"print_hide\": 0, \"label\": \"Posting Date\"}, {\"fieldname\": \"finance_book\", \"print_hide\": 0, \"label\": \"Finance Book\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"accounts\", \"print_hide\": 0, \"label\": \"Accounting Entries\", \"visible_columns\": [{\"fieldname\": \"account\", \"print_width\": \"250px\", \"print_hide\": 0}, {\"fieldname\": \"bank_account_no\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"party_type\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"party\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"debit_in_account_currency\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"credit_in_account_currency\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"reference_type\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"reference_name\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"reference_due_date\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"project\", \"print_width\": \"\", \"print_hide\": 0}]}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"cheque_no\", \"print_hide\": 0, \"label\": \"Reference Number\"}, {\"fieldname\": \"cheque_date\", \"print_hide\": 0, \"label\": \"Reference Date\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"get_balance\", \"print_hide\": 0, \"label\": \"Make Difference Entry\"}, {\"fieldname\": \"total_amount\", \"print_hide\": 0, \"label\": \"Total Amount\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Reference\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"clearance_date\", \"print_hide\": 0, \"label\": \"Clearance Date\"}, {\"fieldname\": \"remark\", \"print_hide\": 0, \"label\": \"Remark\"}, {\"fieldname\": \"inter_company_journal_entry_reference\", \"print_hide\": 0, \"label\": \"Inter Company Journal Entry Reference\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"due_date\", \"print_hide\": 0, \"label\": \"Due Date\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Printing Settings\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"pay_to_recd_from\", \"print_hide\": 0, \"label\": \"Pay To / Recd From\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"letter_head\", \"print_hide\": 0, \"label\": \"Letter Head\"}, {\"fieldtype\": \"Section Break\", \"label\": \"More Information\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"mode_of_payment\", \"print_hide\": 0, \"label\": \"Mode of Payment\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"stock_entry\", \"print_hide\": 0, \"label\": \"Stock Entry\"}]", + "html": "{%- from \"templates/print_formats/standard_macros.html\" import add_header -%}\n\n
\n {%- if not doc.get(\"print_heading\") and not doc.get(\"select_print_heading\") \n and doc.set(\"select_print_heading\", _(\"Credit Note\")) -%}{%- endif -%}\n {{ add_header(0, 1, doc, letter_head, no_letterhead) }}\n\n {%- for label, value in (\n (_(\"Credit To\"), doc.pay_to_recd_from),\n (_(\"Date\"), frappe.utils.formatdate(doc.voucher_date)),\n (_(\"Amount\"), \"\" + doc.get_formatted(\"total_amount\") + \"
\" + (doc.total_amount_in_words or \"\") + \"
\"),\n (_(\"Remarks\"), doc.remark)\n ) -%}\n\n
\n
\n
{{ value }}
\n
\n\n {%- endfor -%}\n\n
\n
\n

\n {{ _(\"For\") }} {{ doc.company }},
\n
\n
\n
\n {{ _(\"Authorized Signatory\") }}\n

\n
\n\n\n", + "idx": 2, + "line_breaks": 0, + "modified": "2019-04-18 12:10:14.732269", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Credit Note", + "owner": "Administrator", + "parentfield": "__print_formats", + "print_format_builder": 0, + "print_format_type": "Server", + "show_section_headings": 0, "standard": "Yes" } \ No newline at end of file From abf9ef02449c3a108a8f7ec9abbf986e26852212 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 18 Apr 2019 22:01:33 +0530 Subject: [PATCH 20/56] fix: credit amount in account's currency not be consider if debit amount is present in the general ledger --- erpnext/accounts/report/utils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/report/utils.py b/erpnext/accounts/report/utils.py index 8a397447383..8500aea4159 100644 --- a/erpnext/accounts/report/utils.py +++ b/erpnext/accounts/report/utils.py @@ -112,13 +112,15 @@ def convert_to_presentation_currency(gl_entries, currency_info): if entry.get('debit'): entry['debit'] = converted_value - else: + + if entry.get('credit'): entry['credit'] = converted_value elif account_currency == presentation_currency: if entry.get('debit'): entry['debit'] = debit_in_account_currency - else: + + if entry.get('credit'): entry['credit'] = credit_in_account_currency converted_gl_list.append(entry) From 4db4f21d167b80a98d6581a40fb8f9a6e8369c85 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 18 Apr 2019 22:34:19 +0530 Subject: [PATCH 21/56] fix: task name was not able to search by name in global search --- erpnext/projects/doctype/task/task.json | 45 +++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json index c22a2962c87..5fc72c43042 100644 --- a/erpnext/projects/doctype/task/task.json +++ b/erpnext/projects/doctype/task/task.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, @@ -19,6 +20,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "subject", "fieldtype": "Data", "hidden": 0, @@ -51,6 +53,7 @@ "bold": 1, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "project", "fieldtype": "Link", "hidden": 0, @@ -86,6 +89,7 @@ "collapsible": 0, "columns": 0, "default": "0", + "fetch_if_empty": 0, "fieldname": "is_group", "fieldtype": "Check", "hidden": 0, @@ -118,6 +122,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break0", "fieldtype": "Column Break", "hidden": 0, @@ -151,6 +156,7 @@ "bold": 1, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "status", "fieldtype": "Select", "hidden": 0, @@ -185,6 +191,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "priority", "fieldtype": "Select", "hidden": 0, @@ -219,6 +226,7 @@ "bold": 1, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "parent_task", "fieldtype": "Link", "hidden": 0, @@ -254,6 +262,7 @@ "collapsible_depends_on": "", "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "section_break_10", "fieldtype": "Section Break", "hidden": 0, @@ -286,6 +295,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "exp_start_date", "fieldtype": "Date", "hidden": 0, @@ -322,6 +332,7 @@ "default": "0", "depends_on": "", "description": "", + "fetch_if_empty": 0, "fieldname": "expected_time", "fieldtype": "Float", "hidden": 0, @@ -356,6 +367,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "task_weight", "fieldtype": "Float", "hidden": 0, @@ -388,6 +400,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_11", "fieldtype": "Column Break", "hidden": 0, @@ -420,6 +433,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "exp_end_date", "fieldtype": "Date", "hidden": 0, @@ -454,6 +468,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "progress", "fieldtype": "Percent", "hidden": 0, @@ -487,6 +502,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "is_milestone", "fieldtype": "Check", "hidden": 0, @@ -519,6 +535,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "color", "fieldtype": "Color", "hidden": 0, @@ -553,6 +570,7 @@ "collapsible_depends_on": "", "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "section_break0", "fieldtype": "Section Break", "hidden": 0, @@ -586,6 +604,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "description", "fieldtype": "Text Editor", "hidden": 0, @@ -623,6 +642,7 @@ "collapsible_depends_on": "", "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "section_break", "fieldtype": "Section Break", "hidden": 0, @@ -656,6 +676,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "depends_on", "fieldtype": "Table", "hidden": 0, @@ -690,6 +711,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "depends_on_tasks", "fieldtype": "Data", "hidden": 1, @@ -725,6 +747,7 @@ "columns": 0, "depends_on": "", "description": "", + "fetch_if_empty": 0, "fieldname": "actual", "fieldtype": "Section Break", "hidden": 0, @@ -760,6 +783,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "act_start_date", "fieldtype": "Date", "hidden": 0, @@ -796,6 +820,7 @@ "default": "", "depends_on": "", "description": "", + "fetch_if_empty": 0, "fieldname": "actual_time", "fieldtype": "Float", "hidden": 0, @@ -829,6 +854,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_15", "fieldtype": "Column Break", "hidden": 0, @@ -861,6 +887,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "act_end_date", "fieldtype": "Date", "hidden": 0, @@ -895,6 +922,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "section_break_17", "fieldtype": "Section Break", "hidden": 0, @@ -927,6 +955,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "total_costing_amount", "fieldtype": "Currency", "hidden": 0, @@ -962,6 +991,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "total_expense_claim", "fieldtype": "Currency", "hidden": 0, @@ -995,6 +1025,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_20", "fieldtype": "Column Break", "hidden": 0, @@ -1027,6 +1058,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", + "fetch_if_empty": 0, "fieldname": "total_billing_amount", "fieldtype": "Currency", "hidden": 0, @@ -1059,6 +1091,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "more_details", "fieldtype": "Section Break", "hidden": 0, @@ -1091,6 +1124,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.status == \"Closed\" || doc.status == \"Pending Review\"", + "fetch_if_empty": 0, "fieldname": "review_date", "fieldtype": "Date", "hidden": 0, @@ -1125,6 +1159,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.status == \"Closed\"", + "fetch_if_empty": 0, "fieldname": "closing_date", "fieldtype": "Date", "hidden": 0, @@ -1158,6 +1193,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_22", "fieldtype": "Column Break", "hidden": 0, @@ -1188,6 +1224,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "department", "fieldtype": "Link", "hidden": 0, @@ -1221,6 +1258,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -1253,6 +1291,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "lft", "fieldtype": "Int", "hidden": 1, @@ -1285,6 +1324,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "rgt", "fieldtype": "Int", "hidden": 1, @@ -1317,6 +1357,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "old_parent", "fieldtype": "Data", "hidden": 1, @@ -1355,7 +1396,7 @@ "istable": 0, "max_attachments": 5, "menu_index": 0, - "modified": "2018-08-21 16:15:56.299895", + "modified": "2019-04-18 22:33:03.798331", "modified_by": "Administrator", "module": "Projects", "name": "Task", @@ -1385,7 +1426,7 @@ "read_only": 0, "read_only_onload": 0, "search_fields": "subject", - "show_name_in_global_search": 0, + "show_name_in_global_search": 1, "sort_order": "DESC", "timeline_field": "project", "title_field": "subject", From fba8bfc0d0422c87193a38614bc5b331d266b3ef Mon Sep 17 00:00:00 2001 From: Raffael Meyer Date: Thu, 18 Apr 2019 21:27:22 +0200 Subject: [PATCH 22/56] feat(accounts): add German CoA with numbers --- .../verified/de_kontenplan_SKR04.json | 7 +- ..._kontenplan_SKR04_with_account_number.json | 3615 +++++++++++++++++ 2 files changed, 3618 insertions(+), 4 deletions(-) create mode 100644 erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04.json index e29ad827bf5..7fa67081341 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04.json @@ -1,6 +1,6 @@ { "country_code": "de", - "name": "Germany - Kontenplan SKR04", + "name": "SKR04 ohne Kontonummern", "tree": { "Bilanz - Aktiva": { "Anlageverm\u00f6gen": { @@ -1383,8 +1383,7 @@ "Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge 1": { "Diskontertr\u00e4ge": {}, "Diskontertr\u00e4ge aus verbundenen Unternehmen": {}, - "Laufende Ertr\u00e4ge aus Anteilen an Kapitalgesellschaften 100% / 50% steuerfrei": {}, - "Laufende Ertr\u00e4ge aus Anteilen an Kapitalgesellschaften 100% / 50% steuerfrei": {}, + "Laufende Ertr\u00e4ge aus Anteilen an Kapitalgesellschaften 100% / 50% steuerfrei": {}, "Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge 2": {}, "Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge aus verbundenen Unternehmen": {}, "Sonstige Zinsertr\u00e4ge": {}, @@ -1703,4 +1702,4 @@ "root_type": "Asset" } } -} \ No newline at end of file +} diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json new file mode 100644 index 00000000000..b0f06911cd3 --- /dev/null +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json @@ -0,0 +1,3615 @@ +{ + "country_code": "de", + "name": "SKR04 mit Kontonummern", + "tree": { + "Aktiva": { + "root_type": "Asset", + "A - Anlageverm\u00f6gen": { + "account_type": "Fixed Asset", + "is_group": 1, + "I - Immaterielle VG": { + "is_group": 1, + "1 - Selbst geschaffene gewerbliche Schutzrechte und \u00e4hnliche Rechte und Werte": { + "is_group": 1 + }, + "2 - entgeltlich erworbene Konzessionen, gewerbl. Schutzrechte und \u00e4hnl. Rechte und Werte sowie Lizenzen an solchen": { + "is_group": 1, + "Entgeltlich erworbene Konzessionen, gewerbl. Schutzrechte und \u00e4hnl. Rechte und Werte sowie Lizenzen an solchen": { + "account_number": "0100" + }, + "Konzessionen ": { + "account_number": "0110" + }, + "Gewerbliche Schutzrechte ": { + "account_number": "0120" + }, + "\u00c4hnliche Rechte und Werte": { + "account_number": "0130" + }, + "EDV-Software": { + "account_number": "0135" + }, + "Lizenzen an gewerblichen Schutzrechten und \u00e4hnl. Rechten und Werten": { + "account_number": "0140" + }, + "Selbst geschaffene immaterielle VG": { + "account_number": "0143", + "account_type": "Fixed Asset" + }, + "Lizenzen und Franchisevertr\u00e4ge": { + "account_number": "0145" + }, + "Konzessionen und gewerbliche Schutzrechte": { + "account_number": "0146" + }, + "Rezepte, Verfahren, Prototypen": { + "account_number": "0147" + }, + "Immaterielle VG in Entwicklung": { + "account_number": "0148" + }, + "Geleistete Anz. auf immaterielle VG": { + "account_number": "0170" + } + }, + "3 - Gesch\u00e4fts- oder Firmenwert": { + "is_group": 1, + "Gesch\u00e4fts- oder Firmenwert ": { + "account_number": "0150" + }, + "Anz. auf Gesch\u00e4fts- oder Firmenwert": { + "account_number": "0179" + } + }, + "4 - geleistete Anz.": { + "is_group": 1, + "Geleistete Anz. auf Vorr\u00e4te": { + "account_number": "1180" + }, + "Geleistete Anz., 7 % Vorsteuer": { + "account_number": "1181" + }, + "Geleistete Anz., 16 % Vorsteuer": { + "account_number": "1184" + }, + "Geleistete Anz., 15 % Vorsteuer": { + "account_number": "1185" + }, + "Geleistete Anz., 19 % Vorsteuer": { + "account_number": "1186" + } + } + }, + "II - Sachanlagen": { + "1 - Grundst\u00fccke, grundst\u00fccksgleiche Rechte und Bauten einschl. der Bauten auf fremden Grundst\u00fccken": { + "is_group": 1, + "Grundst\u00fccke, grundst\u00fccksgleiche Rechte und Bauten einschl. der Bauten auf fremden Grundst\u00fccken": { + "account_number": "0200", + "account_type": "Fixed Asset" + }, + "Grundst\u00fccksgleiche Rechte ohne Bauten": { + "account_number": "0210" + }, + "Unbebaute Grundst\u00fccke": { + "account_number": "0215" + }, + "Grundst\u00fccksgleiche Rechte (Erbbaurecht, Dauerwohnrecht)": { + "account_number": "0220" + }, + "Grundst\u00fccke mit Substanzverzehr": { + "account_number": "0225" + }, + "Grundst\u00fccksanteil h\u00e4usliches Arbeitszimmer": { + "account_number": "0229" + }, + "Bauten auf eigenen Grundst\u00fccken und grundst\u00fccksgleichen Rechten": { + "account_number": "0230" + }, + "Grundst\u00fcckswerte eigener bebauter Grundst\u00fccke": { + "account_number": "0235" + }, + "Gesch\u00e4ftsbauten": { + "account_number": "0240" + }, + "Fabrikbauten ": { + "account_number": "0250" + }, + "Andere Bauten": { + "account_number": "0260" + }, + "Garagen": { + "account_number": "0270" + }, + "Au\u00dfenanlagen f. Gesch\u00e4fts-, Fabrik- und andere Bauten": { + "account_number": "0280" + }, + "Hof- und Wegebefestigungen": { + "account_number": "0285" + }, + "Einrichtungen f. Gesch\u00e4fts-, Fabrik- und andere Bauten": { + "account_number": "0290" + }, + "Wohnbauten ": { + "account_number": "0300" + }, + "Au\u00dfenanlagen ": { + "account_number": "0310" + }, + "Einrichtungen f. Wohnbauten ": { + "account_number": "0320" + }, + "Geb\u00e4udeanteil h\u00e4usliches Arbeitszimmer": { + "account_number": "0329" + }, + "Bauten auf fremden Grundst\u00fccken": { + "account_number": "0330" + }, + "Einrichtungen f. Gesch\u00e4fts-, Fabrik-, Wohn- und andere Bauten": { + "account_number": "0398" + } + }, + "2 - technische Anlagen und Maschinen": { + "is_group": 1, + "Technische Anlagen und Maschinen": { + "account_number": "0400", + "account_type": "Fixed Asset" + }, + "Technische Anlagen": { + "account_number": "0420" + }, + "Maschinen": { + "account_number": "0440" + }, + "Transportanlagen und \u00c4hnliches ": { + "account_number": "0450" + }, + "Betriebsvorrichtungen": { + "account_number": "0470" + }, + "Wertberichtigung Technische Anlagen und Maschinen": { + "account_number": "0409", + "account_type": "Accumulated Depreciation" + } + }, + "3 - andere Anlagen, Betriebs- und Gesch\u00e4ftsausstattung": { + "is_group": 1, + "Andere Anlagen, Betriebs- und Gesch\u00e4ftsausstattung": { + "account_number": "0500", + "account_type": "Fixed Asset" + }, + "Andere Anlagen": { + "account_number": "0510" + }, + "Pkw": { + "account_number": "0520" + }, + "Lkw": { + "account_number": "0540" + }, + "Sonstige Transportmittel": { + "account_number": "0560" + }, + "Werkzeuge": { + "account_number": "0620" + }, + "Betriebsausstattung": { + "account_number": "0630" + }, + "Gesch\u00e4ftsausstattung": { + "account_number": "0635" + }, + "Ladeneinrichtung": { + "account_number": "0640" + }, + "B\u00fcroeinrichtung": { + "account_number": "0650" + }, + "Ger\u00fcst- und Schalungsmaterial": { + "account_number": "0660" + }, + "Geringwertige Wirtschaftsg\u00fcter": { + "account_number": "0670" + }, + "Wirtschaftsg\u00fcter gr\u00f6\u00dfer 150 bis 1000 Euro (Sammelposten)": { + "account_number": "0675" + }, + "Einbauten in fremde Grundst\u00fccke": { + "account_number": "0680" + }, + "Sonstige Betriebs- und Gesch\u00e4ftsausstattung": { + "account_number": "0690" + } + }, + "4 - geleistete Anz. und Anlagen im Bau": { + "is_group": 1, + "Geleistete Anz. und Anlagen im Bau": { + "account_number": "0700", + "account_type": "Capital Work in Progress" + }, + "Anz. auf Grundst\u00fcckeund grundst\u00fccksgleiche Rechte ohne Bauten ": { + "account_number": "0705" + }, + "Gesch\u00e4fts-, Fabrik- und andere Bauten im Bau auf eigenen Grundst\u00fccken": { + "account_number": "0710" + }, + "Anz. auf Gesch\u00e4fts-, Fabrik- und andere Bauten auf eigenen Grundst. und grundst\u00fccksgleichen Rechten ": { + "account_number": "0720" + }, + "Wohnbauten im Bau": { + "account_number": "0725" + }, + "Anz. auf Wohnbauten auf eigenen Grundst\u00fccken und grundst\u00fccksgleichen Rechten": { + "account_number": "0735" + }, + "Gesch\u00e4fts-, Fabrik- und andere Bauten im Bau auf fremden Grundst\u00fccken": { + "account_number": "0740" + }, + "Anz. auf Gesch\u00e4fts-, Fabrik- und andere Bauten auf fremden Grundst\u00fccken ": { + "account_number": "0750" + }, + "Anz. auf Wohnbauten auf fremden Grundst\u00fccken": { + "account_number": "0765" + }, + "Technische Anlagen und Maschinen im Bau": { + "account_number": "0770" + }, + "Anz. auf technische Anlagen und Maschinen": { + "account_number": "0780" + }, + "Andere Anlagen, Betriebs- und Gesch\u00e4ftsausstattung im Bau": { + "account_number": "0785" + }, + "Andere Anlagen, Betriebs- und Gesch\u00e4ftsausstattung": { + "account_number": "0795" + } + }, + "is_group": 1 + }, + "III - Finanzanlagen": { + "1 - Anteile an verbundenen Unternehmen": { + "is_group": 1, + "Anteile an verbundenen Unternehmen": { + "account_number": "0800" + }, + "Anteile an verbundenen Unternehmen, Personengesellschaften": { + "account_number": "0803" + }, + "Anteile an verbundenen Unternehmen, Kapitalgesellschaften": { + "account_number": "0804" + }, + "Anteile an herrschender oder mehrheitlich beteiligter Gesellschaft, Personengesellschaft": { + "account_number": "0805" + }, + "Anteile an herrschender oder mehrheitlich beteiligter Gesellschaft, Kapitalgesellschaften": { + "account_number": "0808" + }, + "Anteile an herrschender oder mit Mehrheit beteiligter Gesellschaft": { + "account_number": "0809" + } + }, + "2 - Ausleihungen an verb. Unternehmen": { + "is_group": 1, + "Ausleihungen an verb. Unternehmen": { + "account_number": "0880" + }, + "Ausleihungen an Unternehmen, mit denen ein Beteiligungsverh. besteht, Personengesellschaften": { + "account_number": "0883" + }, + "Ausleihungen an Unternehmen, mit denen ein Beteiligungsverh. besteht, Kapitalgesellschaften": { + "account_number": "0885" + } + }, + "3 - Beteiligungen": { + "is_group": 1, + "Beteiligungen": { + "account_number": "0820" + }, + "Typisch stille Beteiligungen": { + "account_number": "0830" + }, + "Atypisch stille Beteiligungen": { + "account_number": "0840" + }, + "Beteiligungen an Kapitalgesellschaften": { + "account_number": "0850" + }, + "Beteiligungen an Personengesellschaften": { + "account_number": "0860" + } + }, + "4 - Ausleihungen an Unternehmen, mit denen ein Beteiligungsverh. besteht": { + "is_group": 1 + }, + "5 - Wertpapiere des Anlageverm\u00f6gens": { + "is_group": 1, + "Wertpapiere des Anlageverm\u00f6gens": { + "account_number": "0900" + }, + "Wertpapiere mit Gewinnbeteiligungsanspr\u00fcchen, die dem Teileink\u00fcnfteverfahren unterliegen": { + "account_number": "0910" + }, + "Festverzinsliche Wertpapiere": { + "account_number": "0920" + }, + "Genossenschaftsanteile zum langfristigen Verbleib": { + "account_number": "0980" + }, + "R\u00fcckdeckungsanspr\u00fcche aus Lebensversicherungen zum langfristigen Verbleib": { + "account_number": "0990" + } + }, + "6 - sonstige Ausleihungen": { + "is_group": 1, + "Sonstige Ausleihungen": { + "account_number": "0930" + }, + "Darlehen": { + "account_number": "0940" + }, + "Ausleihungen an stille Gesellschafter": { + "account_number": "0964" + } + }, + "is_group": 1 + } + }, + "B - Umlaufverm\u00f6gen": { + "I - Vorr\u00e4te": { + "1 - Roh-, Hilfs- und Betriebsstoffe": { + "is_group": 1, + "Roh-, Hilfs- und Betriebsstoffe (Bestand)": { + "account_number": "1000", + "account_type": "Stock" + } + }, + "2 - unfertige Erzeugnisse, unfertige Leistungen": { + "is_group": 1, + "Unfertige Erzeugnisse, unfertige Leistungen (Bestand)": { + "account_number": "1040", + "account_type": "Stock" + }, + "Unfertige Erzeugnisse (Bestand)": { + "account_number": "1050" + }, + "Unfertige Leistungen": { + "account_number": "1080" + }, + "In Ausf\u00fchrung befindliche Bauauftr\u00e4ge": { + "account_number": "1090" + }, + "In Arbeit befindliche Auftr\u00e4ge": { + "account_number": "1095" + } + }, + "3 - fertige Erzeugnisse und Waren": { + "is_group": 1, + "Fertige Erzeugnisse und Waren (Bestand)": { + "account_number": "1100", + "account_type": "Stock" + }, + "Fertige Erzeugnisse (Bestand)": { + "account_number": "1110" + }, + "Waren (Bestand)": { + "account_number": "1140" + }, + "Erhaltene Anz. auf Bestellungen (von Vorr\u00e4ten offen abgesetzt)": { + "account_number": "1190" + } + }, + "is_group": 1 + }, + "II - Forderungen und sonstige VG": { + "account_type": "Receivable", + "1 - Forderungen aus Lieferungen und Leistungen": { + "account_type": "Receivable", + "is_group": 1, + "Bewertungskorrektur zu Forderungen aus Lieferungen und Leistungen": { + "account_number": "9960" + }, + "Forderungen aus Lieferungen und Leistungen": { + "account_number": "1200", + "account_type": "Receivable" + }, + "Forderungen aus Lieferungen und Leistungen ohne Kontokorrent": { + "account_number": "1210" + }, + "Forderungen aus Lieferungen und Leistungen ohne Kontokorrent(b. 1 J.)": { + "account_number": "1221" + }, + "Forderungen aus Lieferungen und Leistungen ohne Kontokorrent (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1225" + }, + "Wechsel aus Lieferungen und Leistungen, bundesbankf\u00e4hig": { + "account_number": "1235" + }, + "Zweifelhafte Forderungen (Gruppe)": { + "is_group": 1, + "Zweifelhafte Forderungen": { + "account_number": "1240" + }, + "Zweifelhafte Forderungen (b. 1 J.)": { + "account_number": "1241" + }, + "Zweifelhafte Forderungen (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1245" + }, + "Einzelwertberichtigungen auf Forderungen mit einer (b. 1 J.)": { + "account_number": "1248" + }, + "Einzelwertberichtigung auf Forderungen mit einer (mehr als 1 J.)": { + "account_number": "1247" + }, + "Pauschalwertberichtigung auf Forderungen mit einer (mehr als 1 J.)": { + "account_number": "1249" + } + }, + "Gegenkonto zu sonstigen VGn bei Buchung \u00fcber Debitorenkonto": { + "account_number": "1258" + }, + "Gegenkonto 1221-1229,1240-1245,1250-1257, 1270-1279, 1290-1297 bei Aufteilung Debitorenkonto": { + "account_number": "1259" + } + }, + "2 - Forderungen gg. verb. Unternehmen": { + "account_type": "Receivable", + "is_group": 1, + "Forderungen gg. verb. Unternehmen": { + "account_number": "1260" + }, + "Forderungen gg. verb. Unternehmen (b. 1 J.)": { + "account_number": "1261" + }, + "Forderungen gg. verb. Unternehmen (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1265" + }, + "Besitzwechsel gg. verb. Unternehmen": { + "account_number": "1266" + }, + "Besitzwechsel gg. verb. Unternehmen (b. 1 J.)": { + "account_number": "1267" + }, + "Besitzwechsel gg. verb. Unternehmen (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1268" + }, + "Besitzwechsel gg. verb. Unternehmen, bundesbankf\u00e4hig": { + "account_number": "1269" + }, + "Forderungen aus Lieferungen und Leistungen gg. verb. Unternehmen (Gruppe)": { + "is_group": 1, + "Forderungen aus Lieferungen und Leistungen gg. verb. Unternehmen": { + "account_number": "1270" + }, + "Forderungen aus Lieferungen und Leistungen gg. verb. Unternehmen (b. 1 J.)": { + "account_number": "1271" + }, + "Forderungen aus Lieferungen und Leistungen gg. verb. Unternehmen (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1275" + }, + "Wertberichtigungen auf Forderungen mit einer (b. 1 J.) gg. verb. Unternehmen": { + "account_number": "1276" + }, + "Wertberichtigungen auf Forderungen mit einer (mehr als 1 J.) gg. verbundene Unternehmen": { + "account_number": "1277" + } + } + }, + "3 - Forderungen gg. Unt., mit denen ein Beteiligungsverh. besteht": { + "account_type": "Receivable", + "is_group": 1, + "Forderungen gg. Unt., mit denen ein Beteiligungsverh. besteht": { + "account_number": "1280" + }, + "Forderungen gg. Unt., mit denen ein Beteiligungsverh. besteht (b. 1 J.)": { + "account_number": "1281" + }, + "Forderungen gg. Unt., mit denen ein Beteiligungsverh. besteht (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1285" + }, + "Besitzwechsel gg. Unt., mit denen ein Beteiligungsverh. besteht": { + "account_number": "1286" + }, + "Besitzwechsel gg. Unt., mit denen ein Beteiligungsverh. besteht (b. 1 J.)": { + "account_number": "1287" + }, + "Besitzwechsel gg. Unt., mit denen ein Beteiligungsverh. besteht (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1288" + }, + "Besitzwechsel gg. Unt., mit denen ein Beteiligungsverh. besteht, bundesbankf\u00e4hig": { + "account_number": "1289" + }, + "Forderungen aus LuL gg. Unt., mit denen ein Beteiligungsverh. besteht": { + "account_number": "1290" + }, + "Forderungen aus LuL gg. Unt., mit denen ein Beteiligungsverh. besteht (b. 1 J.)": { + "account_number": "1291" + }, + "Forderungen aus LuL gg. Unt., mit denen ein Beteiligungsverh. besteht (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1295" + }, + "Wertberichtigungen auf Ford. (b. 1 J.) gg. Unt., mit denen ein Beteiligungsverh. besteht": { + "account_number": "1296" + }, + "Wertberichtigungen auf Ford. (mehr als 1 J.) gg. Unt., mit denen ein Beteiligungsverh. besteht": { + "account_number": "1297" + } + }, + "4 - sonstige VG": { + "account_type": "Receivable", + "is_group": 1, + "Bewertungskorrektur zu sonstigen VGn": { + "account_number": "9965" + }, + "Verrechnungskonto geleistete Anz. bei Buchung \u00fcber Kreditorenkonto": { + "account_number": "3695" + }, + "Sonstige VG": { + "account_number": "1300" + }, + "Sonstige VG (b. 1 J.)": { + "account_number": "1301" + }, + "Sonstige VG (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1305" + }, + "Forderungen gg. typisch stille Gesellschafter": { + "account_number": "1337" + }, + "Forderungen gg. typisch stille Gesellschafter - Restlaufzeit bis1 Jahr": { + "account_number": "1338" + }, + "Forderungen gg. typisch stille Gesellschafter (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1339" + }, + "Forderungen gg. Personal aus Lohn- und Gehaltsabrechnung (Gruppe)": { + "is_group": 1, + "Forderungen gg. Personal aus Lohn- und Gehaltsabrechnung": { + "account_number": "1340" + }, + "Forderungen gg. Personal aus Lohn- und Gehaltsabrechnung (b. 1 J.)": { + "account_number": "1341" + }, + "Forderungen gg. Personal aus Lohn- und Gehaltsabrechnung (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1345" + } + }, + "Kautionen (Gruppe)": { + "is_group": 1, + "Kautionen": { + "account_number": "1350" + }, + "Kautionen (b. 1 J.)": { + "account_number": "1351" + }, + "Kautionen (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1355" + } + }, + "Darlehen (Gruppe)": { + "Darlehen": { + "account_number": "1360" + }, + "Darlehen (b. 1 J.)": { + "account_number": "1361" + }, + "Darlehen (gr\u00f6\u00dfer 1 J.)": { + "account_number": "1365" + } + }, + "Forderungen gg. Krankenkassen aus Aufwendungsausgleichsgesetz": { + "account_number": "1369" + }, + "Durchlaufende Posten": { + "account_number": "1370" + }, + "Fremdgeld": { + "account_number": "1374" + }, + "Agenturwarenabrechnung": { + "account_number": "1375" + }, + "Nachtr\u00e4glich abziehbare Vorsteuer, \u00a7 15a Abs. 2 UStG": { + "account_number": "1376" + }, + "Zur\u00fcckzuzahlende Vorsteuer, \u00a7 15a Abs. 2 UStG": { + "account_number": "1377" + }, + "Anspr\u00fcche aus R\u00fcckdeckungsversicherungen": { + "account_number": "1378" + }, + "Verm\u00f6gensgegenst. zur Saldierung mit Pensionsr\u00fcckst. und \u00e4hnl. Verplicht. zum langfristigen Verbleib": { + "account_number": "1381" + }, + "Verm\u00f6gensgegenst. zur Erf\u00fcllung von mit der Altersvers. vergleichb. langfristigen Verplicht.": { + "account_number": "1382" + }, + "Verm\u00f6gensgegenst. zur Saldierung mit der Altersvers. vergleichb. langfristigen Verplicht.": { + "account_number": "1383" + }, + "GmbH-Anteile zum kurzfr. Verbleib": { + "account_number": "1390" + }, + "Forderungen gg. Arbeitsgemeinschaften": { + "account_number": "1391" + }, + "Genussrechte": { + "account_number": "1393" + }, + "Einzahlungsanspr\u00fcche zu Nebenleistungen oder Zuzahlungen": { + "account_number": "1394" + }, + "Genossenschaftsanteile zum kurzfr. Verbleib": { + "account_number": "1395" + }, + "Nachtr\u00e4glich abziehbare Vorsteuer, \u00a7 15a Abs. 1 UStG, bewegliche Wirtschaftsg\u00fcter": { + "account_number": "1396" + }, + "Zur\u00fcckzuzahlende Vorsteuer, \u00a7 15a Abs. 1 UStG, bewegliche Wirtschaftsg\u00fcter": { + "account_number": "1397" + }, + "Nachtr\u00e4glich abziehbare Vorsteuer gem. \u00a7 15a Abs. 1 UStG, unbewegliche Wirtschaftsg\u00fcter": { + "account_number": "1398" + }, + "Zur\u00fcckzuzahlende Vorsteuer gem. \u00a7 15a Abs. 1 UStG, unbewegliche Wirtschaftsg\u00fcter": { + "account_number": "1399" + }, + "Abziehbare Vorsteuer (Gruppe)": { + "is_group": 1, + "Abziehbare Vorsteuer": { + "account_number": "1400" + }, + "Abziehbare Vorsteuer 7 %": { + "account_number": "1401" + }, + "Abziehbare Vorsteuer aus innergem. Erwerb": { + "account_number": "1402" + }, + "Abziehbare Vorsteuer aus innergem. Erwerb 19%": { + "account_number": "1404" + }, + "Abziehbare Vorsteuer 19 %": { + "account_number": "1406" + }, + "Abziehbare Vorsteuer nach \u00a7 13b UStG 19 %": { + "account_number": "1407" + }, + "Abziehbare Vorsteuer nach \u00a7 13b UStG": { + "account_number": "1408" + }, + "Abziehbare Vorsteuer aus der Auslagerung von Gegenst\u00e4nden aus dem Umsatzsteuerlager": { + "account_number": "1431" + }, + "Abziehbare Vorsteuer aus innergem. Erwerb von Neufahrzeugen von Lieferanten ohne Ust-ID": { + "account_number": "1432" + } + }, + "Aufzuteilende Vorsteuer (Gruppe)": { + "is_group": 1, + "Aufzuteilende Vorsteuer": { + "account_number": "1410" + }, + "Aufzuteilende Vorsteuer 7 %": { + "account_number": "1411" + }, + "Aufzuteilende Vorsteuer aus innergem. Erwerb": { + "account_number": "1412" + }, + "Aufzuteilende Vorsteuer aus innergem. Erwerb 19 %": { + "account_number": "1413" + }, + "Aufzuteilende Vorsteuer 19 %": { + "account_number": "1416" + }, + "Aufzuteilende Vorsteuer nach \u00a7\u00a7 13a/13b UStG": { + "account_number": "1417" + }, + "Aufzuteilende Vorsteuer nach \u00a7\u00a7 13a/13b UStG 19 %": { + "account_number": "1419" + } + }, + "Umsatzsteuerforderungen (Gruppe)": { + "is_group": 1, + "Umsatzsteuerforderungen": { + "account_number": "1420" + }, + "Umsatzsteuerforderungen laufendes Jahr": { + "account_number": "1421" + }, + "Umsatzsteuerforderungen Vorjahr": { + "account_number": "1422" + }, + "Umsatzsteuerforderungen fr\u00fchere Jahre": { + "account_number": "1425" + }, + "Forderungen aus entrichteten Verbrauchsteuern": { + "account_number": "1427" + } + }, + "Bezahlte Einfuhrumsatzsteuer": { + "account_number": "1433" + }, + "Vorsteuer im Folgejahr abziehbar": { + "account_number": "1434" + }, + "Forderungen aus Gewerbesteuer\u00fcberzahlungen": { + "account_number": "1435" + }, + "Vorsteuer aus Erwerb als letzter Abnehmer innerh. eines Dreiecksgesch.s": { + "account_number": "1436" + }, + "Steuererstattungsanspr\u00fcche gg. anderen L\u00e4ndern": { + "account_number": "1440" + }, + "Forderungen an das Finanzamt aus abgef\u00fchrtem Bauabzugsbetrag": { + "account_number": "1456" + }, + "Forderungen gg. Bundesagentur f. Arbeit": { + "account_number": "1457" + }, + "Geldtransit": { + "account_number": "1460" + }, + "Vorsteuer nach allgemeinen Durchschnittss\u00e4tzen UStVA Kz. 63": { + "account_number": "1484" + }, + "Verrechnungskonto Ist-Versteuerung": { + "account_number": "1490" + }, + "Verrechnungskonto erhaltene Anz. bei Buchung \u00fcber Debitorenkonto": { + "account_number": "1495" + }, + "\u00dcberleitungskonto Kostenstellen": { + "account_number": "1498" + } + }, + "is_group": 1 + }, + "III - Wertpapiere": { + "is_group": 1, + "2 - sonstige Wertpapiere": { + "is_group": 1, + "Sonstige Wertpapiere": { + "account_number": "1510" + } + }, + "Finanzwechsel": { + "account_number": "1520" + }, + "Andere Wertpapiere mit unwesentlichen Wertschwankungen im Sinne Textziffer 18 DRS 2": { + "account_number": "1525" + }, + "Wertpapieranlagen i. R. d. kurzfr. Finanzdisposition": { + "account_number": "1530" + }, + "Schecks": { + "account_number": "1550" + }, + "Anteile an verbundenen Unternehmen (Umlaufverm\u00f6gen)": { + "account_number": "1500" + } + }, + "IV - Kassenbestand, Bundesbankguthaben, Guthaben bei Kreditinstituten und Schecks": { + "is_group": 1, + "Bewertungskorrektur zu Guthaben bei Kreditinstituten": { + "account_number": "9962" + }, + "Kasse (Gruppe)": { + "is_group": 1, + "Kasse": { + "account_number": "1600", + "account_type": "Cash" + }, + "Nebenkasse 1": { + "account_number": "1610", + "account_type": "Cash" + }, + "Nebenkasse 2": { + "account_number": "1620", + "account_type": "Cash" + } + }, + "Postbank (Gruppe)": { + "is_group": 1, + "Postbank": { + "account_number": "1700" + }, + "Postbank 1 (Gruppe)": { + "is_group": 1, + "Postbank 1": { + "account_number": "1710" + } + }, + "Postbank 2 (Gruppe)": { + "is_group": 1, + "Postbank 2": { + "account_number": "1720" + } + }, + "Postbank 3 (Gruppe)": { + "is_group": 1, + "Postbank 3": { + "account_number": "1730" + } + } + }, + "LZB-Guthaben": { + "account_number": "1780" + }, + "Bundesbankguthaben": { + "account_number": "1790" + }, + "Bank (Gruppe)": { + "is_group": 1, + "Bank": { + "account_number": "1800", + "account_type": "Bank" + }, + "Bank 1": { + "account_number": "1810", + "account_type": "Bank" + }, + "Bank 2": { + "account_number": "1820", + "account_type": "Bank" + }, + "Bank 3": { + "account_number": "1830" + }, + "Bank 4": { + "account_number": "1840" + }, + "Bank 5": { + "account_number": "1850" + }, + "Finanzmittelanlagen i. R. d. kurzfr. Finanzdisposition (nicht im Finanzmittelfonds enthalten)": { + "account_number": "1890" + }, + "Verb. gg. Kreditinstituten (nicht im Finanzmittelfonds enthalten)": { + "account_number": "1895" + } + } + }, + "is_group": 1 + }, + "C - Rechnungsabgrenzungsposten": { + "is_group": 1, + "Aktive Rechnungsabgrenzung": { + "account_number": "1900" + }, + "Als Aufwand ber\u00fccksichtigte Z\u00f6lle und Verbrauchsteuern auf Vorr\u00e4te": { + "account_number": "1920" + }, + "Als Aufwand ber\u00fccksichtigte Umsatzsteuer auf Anz.": { + "account_number": "1930" + }, + "Damnum/Disagio": { + "account_number": "1940" + } + }, + "D - Aktive latente Steuern": { + "is_group": 1, + "Aktive latente Steuern": { + "account_type": "Tax", + "account_number": "1950" + } + }, + "E - Aktiver Unterschiedsbetrag aus der Verm\u00f6gensverrechnung": { + "is_group": 1 + }, + "is_group": 1 + }, + "Passiva": { + "root_type": "Liability", + "A - Eigenkapital": { + "account_type": "Equity", + "is_group": 1, + "I - Gezeichnetes Kapital": { + "account_type": "Equity", + "is_group": 1 + }, + "II - Kapitalr\u00fccklage": { + "account_type": "Equity", + "is_group": 1 + }, + "III - Gewinnr\u00fccklagen": { + "account_type": "Equity", + "1 - gesetzliche R\u00fccklage": { + "account_type": "Equity", + "is_group": 1 + }, + "2 - R\u00fccklage f. Anteile an einem herrschenden oder mehrheitlich beteiligten Unternehmen": { + "account_type": "Equity", + "is_group": 1 + }, + "3 - satzungsm\u00e4\u00dfige R\u00fccklagen": { + "account_type": "Equity", + "is_group": 1 + }, + "4 - andere Gewinnr\u00fccklagen": { + "account_type": "Equity", + "is_group": 1, + "Gewinnr\u00fccklagen aus den \u00dcbergangsvorschriften BilMoG": { + "is_group": 1, + "Gewinnr\u00fccklagen (BilMoG)": { + "account_number": "2963" + }, + "Gewinnr\u00fccklagen aus Zuschreibung Sachanlageverm\u00f6gen (BilMoG)": { + "account_number": "2964" + }, + "Gewinnr\u00fccklagen aus Zuschreibung Finanzanlageverm\u00f6gen (BilMoG)": { + "account_number": "2965" + }, + "Gewinnr\u00fccklagen aus Aufl\u00f6sung der Sonderposten mit R\u00fccklageanteil (BilMoG)": { + "account_number": "2966" + } + }, + "Latente Steuern (Gewinnr\u00fccklage Haben) aus erfolgsneutralen Verrechnungen": { + "account_number": "2967" + }, + "Latente Steuern (Gewinnr\u00fccklage Soll) aus erfolgsneutralen Verrechnungen": { + "account_number": "2968" + }, + "Rechnungsabgrenzungsposten (Gewinnr\u00fccklage Soll) aus erfolgsneutralen Verrechnungen": { + "account_number": "2969" + } + }, + "is_group": 1 + }, + "IV - Gewinnvortrag/Verlustvortrag": { + "account_type": "Equity", + "is_group": 1 + }, + "V - Jahres\u00fcberschu\u00df/Jahresfehlbetrag": { + "account_type": "Equity", + "is_group": 1 + }, + "Einlagen stiller Gesellschafter": { + "account_number": "9295" + } + }, + "B - R\u00fcckstellungen": { + "is_group": 1, + "1 - R\u00fcckstellungen f. Pensionen und \u00e4hnliche Verplicht.": { + "is_group": 1, + "R\u00fcckstellungen f. Pensionen und \u00e4hnliche Verplicht.": { + "account_number": "3000" + }, + "R\u00fcckstellungen f. Pensionen und \u00e4hnliche Verplicht. (Saldierung mit langfristigen VG)": { + "account_number": "3009" + }, + "R\u00fcckstellungen f. Direktzusagen": { + "account_number": "3010" + }, + "R\u00fcckstellungen f. ZuschussVerplicht. f. Pensionskassen und Lebensversicherungen": { + "account_number": "3011" + } + }, + "2 - Steuerr\u00fcckstellungen": { + "is_group": 1, + "Steuerr\u00fcckstellungen": { + "account_number": "3020" + }, + "Gewerbesteuerr\u00fcckstellung": { + "account_number": "3030" + }, + "Gewerbesteuerr\u00fcckstellung, \u00a7 4 Abs. 5b EStG": { + "account_number": "3035" + }, + "R\u00fcckstellung f. latente Steuern": { + "account_number": "3060" + }, + "Sonstige R\u00fcckstellungen": { + "account_number": "3070" + }, + "R\u00fcckstellungen f. Personalkosten": { + "account_number": "3074" + }, + "R\u00fcckstellungen f. unterlassene Aufwendungen f. Instandhaltung, Nachholung in den ersten drei Monaten": { + "account_number": "3075" + }, + "R\u00fcckstellungen f. mit der Altersvers. vergleichb. langfr. Verplicht. zum langfr. Verbleib": { + "account_number": "3076" + }, + "R\u00fcckst. f. mit der Altersvers. vergleichb. langfr. Verplicht. (Saldierung mit langfristigen VG)": { + "account_number": "3077" + } + }, + "3 - sonstige R\u00fcckstellungen": { + "is_group": 1, + "Sonderposten mit R\u00fccklageanteil, steuerfreie R\u00fccklagen (Gruppe)": { + "is_group": 1, + "Sonderposten mit R\u00fccklageanteil, steuerfreie R\u00fccklagen": { + "account_number": "2980" + }, + "Sonderposten mit R\u00fccklageanteil nach \u00a7 6b EStG": { + "account_number": "2981" + }, + "Sonderposten mit R\u00fccklageanteil nach EStR R 6.6": { + "account_number": "2982" + }, + "R\u00fccklage f. Zusch\u00fcsse": { + "account_number": "2988" + }, + "Sonderposten mit R\u00fccklageanteil nach \u00a7 52 Abs.16 EStG": { + "account_number": "2989" + }, + "Sonderposten mit R\u00fccklageanteil, Sonderabschreibungen": { + "account_number": "2990" + }, + "Sonderposten mit R\u00fccklageanteil nach \u00a7 7g Abs. 2 EStG n. F.": { + "account_number": "2993" + }, + "Ausgleichsposten bei Entnahmen \u00a7 4g EStG": { + "account_number": "2995" + }, + "Sonderposten mit R\u00fccklageanteil nach \u00a7 7g Abs. 1 EStG a. F. / \u00a7 7g Abs. 5 EStG n. F.": { + "account_number": "2997" + }, + "Sonderposten mit R\u00fccklageanteil nach \u00a7 7g Abs. 3 und 7 EStG a. F.": { + "account_number": "2998" + }, + "Sonderposten f. Zusch\u00fcsse und Zulagen": { + "account_number": "2999" + }, + "R\u00fcckstellungen f. Abraum- und Abfallbeseitigung": { + "account_number": "3085" + }, + "R\u00fcckstellungen f. Gew\u00e4hrleistungen": { + "account_number": "3090" + }, + "R\u00fcckstellungen f. drohende Verluste aus schwebenden Gesch\u00e4ften": { + "account_number": "3092" + }, + "R\u00fcckstellungen f. Abschluss- und Pr\u00fcfungskosten": { + "account_number": "3095" + }, + "R\u00fcckstellungen zur Erf\u00fcllung der Aufbewahrungspflichten": { + "account_number": "3096" + }, + "Aufwandsr\u00fcckstellungen gem\u00e4\u00df \u00a7 249 Abs. 2 HGB a. F.": { + "account_number": "3098" + }, + "R\u00fcckstellungen f. Umweltschutz": { + "account_number": "3099" + } + } + } + }, + "C - Verb.": { + "account_type": "Payable", + "1 - Anleihen": { + "is_group": 1, + "account_type": "Payable", + "davon konvertibel": { + "account_type": "Payable", + "is_group": 1, + "Anleihen, konvertibel": { + "account_number": "3120" + }, + "Anleihen, konvertibel (b. 1 J.)": { + "account_number": "3121" + }, + "Anleihen, konvertibel (1-5 J.)": { + "account_number": "3125" + }, + "Anleihen, konvertibel (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3130" + } + }, + "Anleihen, nicht konvertibel": { + "account_number": "3100" + }, + "Anleihen, nicht konvertibel (b. 1 J.)": { + "account_number": "3101" + }, + "Anleihen, nicht konvertibel (1-5 J.)": { + "account_number": "3105" + }, + "Anleihen, nicht konvertibel (gr\u00f6\u00dfer 5 J.) (Gruppe)": { + "is_group": 1, + "Anleihen, nicht konvertibel (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3110" + } + } + }, + "2 - Verb. gg. Kreditinstituten": { + "account_type": "Payable", + "is_group": 1, + "Bewertungskorrektur zu Verb. gg. Kreditinstituten": { + "account_number": "9963" + }, + "Verb. gg. Kreditinstituten (Gruppe)": { + "is_group": 1, + "Verb. gg. Kreditinstituten": { + "account_number": "3150" + }, + "Verb. gg. Kreditinstituten (b. 1 J.)": { + "account_number": "3151" + }, + "Verb. gg. Kreditinstituten (1-5 J.)": { + "account_number": "3160" + }, + "Verb. gg. Kreditinstituten (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3170" + } + }, + "Verb. gg. Kreditinstituten aus Teilzahlungsvertr\u00e4gen (Gruppe)": { + "is_group": 1, + "Verb. gg. Kreditinstituten aus Teilzahlungsvertr\u00e4gen": { + "account_number": "3180" + }, + "Verb. gg. Kreditinstituten aus Teilzahlungsvertr\u00e4gen (b. 1 J.)": { + "account_number": "3181" + }, + "Verb. gg. Kreditinstituten aus Teilzahlungsvertr\u00e4gen (1-5 J.)": { + "account_number": "3190" + }, + "Verb. gg. Kreditinstituten aus Teilzahlungsvertr\u00e4gen (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3200" + } + } + }, + "3 - erhaltene Anz. auf Bestellungen": { + "account_type": "Payable", + "is_group": 1, + "Erhaltene, versteuerte Anz. 7 % USt (Verb.)": { + "account_number": "3260", + "account_type": "Receivable" + }, + "Erhaltene, versteuerte Anz. 16 % USt (Verb.)": { + "account_number": "3270" + }, + "Erhaltene, versteuerte Anz. 15 % USt (Verb.)": { + "account_number": "3271" + }, + "Erhaltene, versteuerte Anz. 19 % USt (Verb.)": { + "account_number": "3272", + "account_type": "Receivable" + }, + "Erhaltene Anz. (Gruppe)": { + "is_group": 1, + "Erhaltene Anz. (b. 1 J.)": { + "account_number": "3280", + "account_type": "Receivable" + }, + "Erhaltene Anz. (1-5 J.)": { + "account_number": "3284", + "account_type": "Receivable" + }, + "Erhaltene Anz. (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3285", + "account_type": "Receivable" + } + }, + "Erhaltene Anz. auf Bestellungen (Verb.)": { + "account_number": "3250", + "account_type": "Receivable" + } + }, + "4 - Verb. aus Lieferungen und Leistungen": { + "account_type": "Payable", + "is_group": 1, + "Bewertungskorrektur zu Verb. aus Lieferungen und Leistungen": { + "account_number": "9964" + }, + "Verb. aus Lieferungen und Leistungen": { + "account_number": "3300", + "account_type": "Payable" + }, + "Verb. aus Lieferungen und Leistungen ohne Kontokorrent": { + "account_number": "3310" + }, + "Verb. aus Lieferungen und Leistungen ohne Kontokorrent (b. 1 J.)": { + "account_number": "3335" + }, + "Verb. aus Lieferungen und Leistungen ohne Kontokorrent (1-5 J.)": { + "account_number": "3337" + }, + "Verb. aus Lieferungen und Leistungen ohne Kontokorrent (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3338" + } + }, + "5 - Verb. aus der Annahme gezogener Wechsel und der Ausstellung eigener Wechsel": { + "account_type": "Payable", + "is_group": 1, + "Verb. aus der Annahme gezogener Wechsel und aus der Ausstellung eigener Wechsel": { + "account_number": "3350" + }, + "Verb. aus der Annahme gezogener Wechsel und aus der Ausstellung eigener Wechsel (b. 1 J.)": { + "account_number": "3351" + }, + "Verb. aus der Annahme gezogener Wechsel und aus der Ausstellung eigner Wechsel (1-5 J.)": { + "account_number": "3380" + }, + "Verb. aus der Annahme gezogener Wechsel und der Ausstellung eigener Wechsel (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3390" + } + }, + "6 - Verb. gg. verbundenen Unternehmen": { + "account_type": "Payable", + "is_group": 1, + "Verb. gg. verbundenen Unternehmen": { + "account_number": "3400" + }, + "Verb. gg. verbundenen Unternehmen (b. 1 J.)": { + "account_number": "3401" + }, + "Verb. gg. verbundenen Unternehmen (1-5 J.)": { + "account_number": "3405" + }, + "Verb. gg. verbundenen Unternehmen (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3410" + }, + "Verb. aus LuL gg. verbundenen Unternehmen": { + "account_number": "3420" + }, + "Verb. aus LuL gg. verbundenen Unternehmen (b. 1 J.)": { + "account_number": "3421" + }, + "Verb. aus LuL gg. verbundenen Unternehmen (1-5 J.)": { + "account_number": "3425" + }, + "Verb. aus LuL gg. verbundenen Unternehmen (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3430" + } + }, + "7 - Verb. gg. Unternehmen, mit denen ein Beteiligungsverh. besteht": { + "account_type": "Payable", + "is_group": 1, + "Verb. gg. Unternehmen, mit denen ein Beteiligungsverh. besteht": { + "account_number": "3450" + }, + "Verb. gg. Unternehmen, mit denen ein Beteiligungsverh. besteht (b. 1 J.)": { + "account_number": "3451" + }, + "Verb. gg. Unternehmen, mit denen ein Beteiligungsverh. besteht (1-5 J.)": { + "account_number": "3455" + }, + "Verb. gg. Unternehmen, mit denen ein Beteiligungsverh. besteht (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3460" + }, + "Verb. aus LuL gg. Unternehmen, mit denen ein Beteiligungsverh. besteht": { + "account_number": "3470" + }, + "Verb. aus LuL gg. Unternehmen, mit denen ein Beteiligungsverh. besteht (b. 1 J.)": { + "account_number": "3471" + }, + "Verb. aus LuL gg. Unternehmen, mit denen ein Beteiligungsverh. besteht (1-5 J.)": { + "account_number": "3475" + }, + "Verb. aus LuL gg. Unternehmen, mit denen ein Beteiligungsverh. besteht (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3480" + } + }, + "8 - sonstige Verb.": { + "account_type": "Payable", + "is_group": 1, + "davon aus Steuern": { + "account_type": "Payable", + "is_group": 1, + "Verb. aus Steuern und Abgaben": { + "account_number": "3700", + "account_type": "Payable" + }, + "Verb. aus Steuern und Abgaben (b. 1 J.)": { + "account_number": "3701" + }, + "Verb. aus Steuern und Abgaben (1-5 J.)": { + "account_number": "3710" + }, + "Verb. aus Steuern und Abgaben (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3715" + }, + "Verb. aus Lohn- und Kirchensteuer": { + "account_number": "3730" + }, + "Verb. aus Einbehaltungen (KapESt und Solz auf KapESt) f. offene Aussch\u00fcttungen": { + "account_number": "3760" + }, + "Verb. f. Verbrauchsteuern": { + "account_number": "3761" + } + }, + "Gewinnverf\u00fcgungskonto stille Gesellschafter": { + "account_number": "3620" + }, + "Sonstige Verrechnungskonten (Interimskonten)": { + "account_number": "3630" + }, + "Kreditkartenabrechnung": { + "account_number": "3610" + }, + "Verb. gg. Arbeitsgemeinschaften": { + "account_number": "3611" + }, + "Bewertungskorrektur zu sonstigen Verb.": { + "account_number": "9961" + }, + "Verb. gg. stillen Gesellschaftern": { + "account_number": "3655" + }, + "Verb. gg. stillen Gesellschaftern (b. 1 J.)": { + "account_number": "3656" + }, + "Verb. gg. stillen Gesellschaftern (1-5 J.)": { + "account_number": "3657" + }, + "Verb. gg. stillen Gesellschaftern (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3658" + }, + "davon i. R. d. sozialen Sicherheit": { + "account_type": "Payable", + "is_group": 1, + "Verb. i. R. d. sozialen Sicherheit": { + "account_number": "3740" + }, + "Verb. i. R. d. sozialen Sicherheit (b. 1 J.)": { + "account_number": "3741" + }, + "Verb. i. R. d. sozialen Sicherheit (1-5 J.)": { + "account_number": "3750" + }, + "Verb. i. R. d. sozialen Sicherheit (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3755" + }, + "Voraussichtliche Beitragsschuld gg. den Sozialversicherungstr\u00e4gern": { + "account_number": "3759" + } + }, + "Verb. aus Lohn und Gehalt (Gruppe)": { + "is_group": 1, + "Verb. aus Lohn und Gehalt": { + "account_number": "3720" + }, + "Verb. f. Einbehaltungen von Arbeitnehmern": { + "account_number": "3725" + }, + "Verb. an das Finanzamt aus abzuf\u00fchrendem Bauabzugsbetrag": { + "account_number": "3726" + } + }, + "Verb. aus Verm\u00f6gensbildung": { + "account_number": "3770" + }, + "Verb. aus Verm\u00f6gensbildung (b. 1 J.)": { + "account_number": "3771" + }, + "Verb. aus Verm\u00f6gensbildung (1-5 J.)": { + "account_number": "3780" + }, + "Verb. aus Verm\u00f6gensbildung (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3785" + }, + "Ausgegebene Geschenkgutscheine": { + "account_number": "3786" + }, + "Sonstige Verb.": { + "account_number": "3500", + "account_type": "Payable" + }, + "Sonstige Verb. (b. 1 J.)": { + "account_number": "3501" + }, + "Sonstige Verb. (1-5 J.)": { + "account_number": "3504" + }, + "Sonstige Verb. (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3507" + }, + "Darlehen typisch stiller Gesellschafter (Gruppe)": { + "is_group": 1, + "Darlehen typisch stiller Gesellschafter": { + "account_number": "3520" + }, + "Darlehen typisch stiller Gesellschafter (b. 1 J.)": { + "account_number": "3521" + }, + "Darlehen typisch stiller Gesellschafter (1-5 J.)": { + "account_number": "3524" + }, + "Darlehen typisch stiller Gesellschafter (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3527" + } + }, + "Darlehen atypisch stiller Gesellschafter (Gruppe)": { + "is_group": 1, + "Darlehen atypisch stiller Gesellschafter": { + "account_number": "3530" + }, + "Darlehen atypisch stiller Gesellschafter (b. 1 J.)": { + "account_number": "3531" + }, + "Darlehen atypisch stiller Gesellschafter (1-5 J.)": { + "account_number": "3534" + }, + "Darlehen atypisch stiller Gesellschafter (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3537" + } + }, + "Partiarische Darlehen (Gruppe)": { + "is_group": 1, + "Partiarische Darlehen": { + "account_number": "3540" + }, + "Partiarische Darlehen (b. 1 J.)": { + "account_number": "3541" + }, + "Partiarische Darlehen (1-5 J.)": { + "account_number": "3544" + }, + "Partiarische Darlehen (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3547" + } + }, + "Erhaltene Kautionen (Gruppe)": { + "is_group": 1, + "Erhaltene Kautionen": { + "account_number": "3550" + }, + "Erhaltene Kautionen (b. 1 J.)": { + "account_number": "3551" + }, + "Erhaltene Kautionen (1-5 J.)": { + "account_number": "3554" + }, + "Erhaltene Kautionen (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3557" + } + }, + "Darlehen (1-5 J.)": { + "account_number": "3564" + }, + "Darlehen (gr\u00f6\u00dfer 5 J.)": { + "account_number": "3567" + }, + "Lohn- und Gehaltsverrechnungskonto": { + "account_number": "3790" + }, + "Umsatzsteuer (Gruppe)": { + "account_type": "Tax", + "is_group": 1, + "Umsatzsteuer": { + "account_number": "3800", + "account_type": "Tax" + }, + "Umsatzsteuer 7 %": { + "account_number": "3801", + "account_type": "Tax" + }, + "Umsatzsteuer aus innergem. Erwerb": { + "account_number": "3802" + }, + "Umsatzsteuer aus innergem. Erwerb 19 %": { + "account_number": "3804" + }, + "Umsatzsteuer 19 %": { + "account_number": "3806", + "account_type": "Tax" + }, + "Umsatzsteuer aus im Inland steuerpfl. EU-Lieferungen": { + "account_number": "3807" + }, + "Umsatzsteuer aus im Inland steuerpfl. EU-Lieferungen 19 %": { + "account_number": "3808" + }, + "Umsatzsteuer aus innergem. Erwerb ohne Vorsteuerabzug": { + "account_number": "3809" + }, + "Umsatzsteuer nicht f\u00e4llig (Gruppe)": { + "is_group": 1, + "Umsatzsteuer nicht f\u00e4llig": { + "account_number": "3810" + }, + "Umsatzsteuer nicht f\u00e4llig 7 %": { + "account_number": "3811" + }, + "Umsatzsteuer nicht f\u00e4llig aus im Inland steuerpfl. EU-Lieferungen": { + "account_number": "3812" + }, + "Umsatzsteuer nicht f\u00e4llig aus im Inland steuerpfl. EU-Lieferungen 19 %": { + "account_number": "3814" + }, + "Umsatzsteuer nicht f\u00e4llig 19 %": { + "account_number": "3816" + }, + "Umsatzsteuer aus im anderen EU-Land steuerpfl. Lieferungen": { + "account_number": "3817" + }, + "Umsatzsteuer aus im anderen EU-Land steuerpfl. sonstigen Leistungen/Werklieferungen": { + "account_number": "3818" + }, + "Umsatzsteuer aus Erwerb als letzter Abnehmer innerh. eines Dreiecksgesch.s": { + "account_number": "3819" + } + }, + "Umsatzsteuer-Vorauszahlungen": { + "account_number": "3820", + "account_type": "Tax" + }, + "Umsatzsteuer-Vorauszahlung 1/11": { + "account_number": "3830" + }, + "Nachsteuer, UStVA Kz. 65": { + "account_number": "3832" + }, + "Umsatzsteuer aus innergem. Erwerb von Neufahrzeugen von Lieferanten ohne Ust-ID": { + "account_number": "3834" + }, + "Umsatzsteuer nach \u00a7 13b UStG": { + "account_number": "3835" + }, + "Umsatzsteuer nach \u00a7 13b UStG 19 %": { + "account_number": "3837" + }, + "Umsatzsteuer aus der Auslagerung von Gegenst\u00e4nden aus einem Umsatzsteuerlager": { + "account_number": "3839" + }, + "Einfuhrumsatzsteuer aufgeschoben bis": { + "account_number": "3850" + }, + "In Rechnung unrichtig oder unberechtigtausgewiesene Steuerbetr\u00e4ge, UStVA Kz. 69": { + "account_number": "3852" + }, + "Steuerzahlungen an andere L\u00e4nder": { + "account_number": "3854" + } + } + }, + "is_group": 1 + }, + "E - Passive latente Steuern": { + "is_group": 1, + "Passive latente Steuern": { + "account_number": "3065" + } + }, + "D - Rechnungsabgrenzungsposten": { + "is_group": 1, + "Passive Rechnungsabgrenzung": { + "account_number": "3900" + } + }, + "is_group": 1 + }, + "1 - Umsatzerl\u00f6se": { + "root_type": "Income", + "is_group": 1, + "Steuerfreie Ums\u00e4tze \u00a7 4 Nr. 8 ff UStG (Gruppe)": { + "is_group": 1, + "Steuerfreie Ums\u00e4tze \u00a7 4 Nr. 8 ff UStG": { + "account_number": "4100" + }, + "Steuerfreie Ums\u00e4tze nach \u00a7 4 Nr. 12 UStG (Vermietung und Verpachtung)": { + "account_number": "4105" + }, + "Sonstige steuerfreie Ums\u00e4tze Inland": { + "account_number": "4110" + }, + "Steuerfreie Ums\u00e4tze \u00a7 4 Nr. 1a UStG (Gruppe)": { + "is_group": 1, + "Steuerfreie Ums\u00e4tze \u00a7 4 Nr. 1a UStG": { + "account_number": "4120" + }, + "Steuerfreie Innergemeinschaftliche Lieferungen \u00a7 4 Nr. 1b UStG": { + "account_number": "4125" + } + }, + "Lieferungen des ersten Abnehmers bei innergem. Dreiecksgesch.en \u00a7 25b Abs. 2 UStG (Gruppe)": { + "is_group": 1, + "Lieferungen des ersten Abnehmers bei innergem. Dreiecksgesch.en \u00a7 25b Abs. 2 UStG": { + "account_number": "4130" + }, + "Steuerfreie innergem. Lieferungen von Neufahrzeugen an Abnehmer ohne Ust-ID": { + "account_number": "4135" + }, + "Umsatzerl\u00f6se nach \u00a7\u00a7 25 und 25a UStG 19% USt": { + "account_number": "4136" + }, + "Umsatzerl\u00f6se nach \u00a7\u00a7 25 und 25a UStG ohne USt": { + "account_number": "4138" + }, + "Umsatzerl\u00f6se aus Reiseleistungen \u00a7 25 Abs. 2 UStG, steuerfrei": { + "account_number": "4139" + } + }, + "Steuerfreie Ums\u00e4tze Offshore usw.": { + "account_number": "4140" + }, + "Sonstige steuerfreie Ums\u00e4tze (z. B. \u00a7 4 Nr. 2-7 UStG)": { + "account_number": "4150" + }, + "Steuerfreie Ums\u00e4tze ohne Vorsteuerabzug zum Gesamtumsatz geh\u00f6rend": { + "account_number": "4160" + }, + "Erl\u00f6se, die mit den Durchschnittss\u00e4tzen des \u00a7 24 UStG versteuert werden": { + "account_number": "4180" + }, + "Erl\u00f6se aus Kleinunternehmer i. S. d. \u00a7 19 Abs. 1 UStG": { + "account_number": "4185", + "account_type": "Income Account" + }, + "Erl\u00f6se aus Geldspielautomaten 19 % USt": { + "account_number": "4186" + } + }, + "Erl\u00f6se": { + "account_number": "4200", + "account_type": "Income Account" + }, + "Erl\u00f6se 7 % USt": { + "account_number": "4300", + "account_type": "Income Account" + }, + "Erl\u00f6se aus im Inland steuerpfl. EU-Lieferungen 7 % USt": { + "account_number": "4310" + }, + "Erl\u00f6se aus im Inland steuerpfl. EU-Lieferungen 19 % USt": { + "account_number": "4315" + }, + "Erl\u00f6se aus im anderen EU-Land steuerpfl. Lieferungen": { + "account_number": "4320" + }, + "Erl\u00f6se aus im Inland steuerpfl. EU-Lieferungen 16 % USt": { + "account_number": "4330" + }, + "Erl\u00f6se aus Lieferungen von Mobilfunkger./Schaltkr., f. die der Leistungsempf. die Ust. schuldet": { + "account_number": "4335" + }, + "Erl\u00f6se aus im anderen EU-Land steuerpfl. sonst. Leistungen, f. die der Leistungsempf. die Ust. schuldet": { + "account_number": "4336" + }, + "Erl\u00f6se aus Leistungen, f. die der Leistungsempf. die Ust. nach \u00a7 13b UStG schuldet": { + "account_number": "4337" + }, + "Erl\u00f6se aus im Drittland steuerbaren Leistungen, im Inland nicht steuerbare Ums\u00e4tze": { + "account_number": "4338" + }, + "Erl\u00f6se aus im anderen EU-Land steuerbaren Leistungen, im Inland nicht steuerbare Ums\u00e4tze": { + "account_number": "4339" + }, + "Erl\u00f6se 16 % USt (Gruppe)": { + "is_group": 1, + "Erl\u00f6se 16 % USt": { + "account_number": "4340" + } + }, + "Erl\u00f6se 19 % USt (Gruppe)": { + "is_group": 1, + "Erl\u00f6se 19 % USt": { + "account_number": "4400", + "account_type": "Income Account" + } + }, + "Erl\u00f6sschm\u00e4lerungen (Gruppe)": { + "is_group": 1, + "Erl\u00f6sschm\u00e4lerungen": { + "account_number": "4700" + }, + "Erl\u00f6sschm\u00e4lerungen aus steuerfreien Ums\u00e4tzen \u00a7 4 Nr. 1a UStG": { + "account_number": "4705" + }, + "Erl\u00f6sschm\u00e4lerungen 7 % USt": { + "account_number": "4710" + }, + "Erl\u00f6sschm\u00e4lerungen 19 % USt": { + "account_number": "4720" + }, + "Erl\u00f6sschm\u00e4lerungen 16 % USt": { + "account_number": "4723" + }, + "Erl\u00f6sschm\u00e4lerungen aus steuerfreien innergem. Lieferungen": { + "account_number": "4724" + }, + "Erl\u00f6sschm\u00e4lerungen aus im Inland steuerpfl. EU-Lieferungen 7 % USt": { + "account_number": "4725" + }, + "Erl\u00f6sschm\u00e4lerungen aus im Inland steuerpfl. EU-Lieferungen 19 % USt": { + "account_number": "4726" + }, + "Erl\u00f6sschm\u00e4lerungen aus im anderen EU-Land steuerpfl. Lieferungen": { + "account_number": "4727" + }, + "Erl\u00f6sschm\u00e4lerungen aus im Inland steuerpfl. EU-Lieferungen 16 % USt": { + "account_number": "4729" + }, + "Gew\u00e4hrte Skonti (Gruppe)": { + "is_group": 1, + "Gew. Skonti": { + "account_number": "4730" + }, + "Gew. Skonti 7 % USt": { + "account_number": "4731" + }, + "Gew. Skonti 19 % USt": { + "account_number": "4736" + }, + "Gew. Skonti aus Lieferungen von Mobilfunkger./Schaltkr., f. die der Leistungsempf. die Ust. schuldet": { + "account_number": "4738" + }, + "Gew. Skonti aus Leistungen, f. die der Leistungsempf. die Umsatzsteuer nach \u00a7 13b UStG schuldet": { + "account_number": "4741" + }, + "Gew. Skonti aus Erl\u00f6sen aus im anderen EU-Land steuerpfl. Leistungen, f. die der Leistungsempf. die Ust. schuldet": { + "account_number": "4742" + }, + "Gew. Skonti aus steuerfreien innergem. Lieferungen \u00a7 4 Nr. 1b UStG": { + "account_number": "4743" + }, + "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen": { + "account_number": "4745" + }, + "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 7% USt": { + "account_number": "4746" + }, + "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 19% USt": { + "account_number": "4748" + } + }, + "Gew\u00e4hrte Boni 7 % USt": { + "account_number": "4750" + }, + "Gew\u00e4hrte Boni 19 % USt": { + "account_number": "4760" + }, + "Gew\u00e4hrte Boni": { + "account_number": "4769" + }, + "Gew\u00e4hrte Rabatte": { + "account_number": "4770" + }, + "Gew\u00e4hrte Rabatte 7 % USt": { + "account_number": "4780" + }, + "Gew\u00e4hrte Rabatte 19 % USt": { + "account_number": "4790" + } + }, + "Grundst\u00fccksertr\u00e4ge (Gruppe)": { + "is_group": 1, + "Grundst\u00fccksertr\u00e4ge": { + "account_number": "4860" + }, + "Erl\u00f6se aus Vermietung und Verpachtung, umsatzsteuerfrei \u00a7 4 Nr. 12 UStG": { + "account_number": "4861" + }, + "Erl\u00f6se aus Vermietung und Verpachtung 19% USt": { + "account_number": "4862" + } + }, + "Sonstige Ertr\u00e4ge aus Provisionen, Lizenzen und Patenten (Gruppe)": { + "is_group": 1, + "Sonstige Ertr\u00e4ge aus Provisionen, Lizenzen und Patenten": { + "account_number": "4570" + }, + "Sonstige Ertr\u00e4ge aus Provisionen, Lizenzen und Patenten, steuerfrei \u00a7 4 Nr. 8ff UStG": { + "account_number": "4574" + }, + "Sonstige Ertr\u00e4ge aus Provisionen, Lizenzen und Patenten, steuerfrei \u00a7 4 Nr. 5 UStG": { + "account_number": "4575" + }, + "Sonstige Ertr\u00e4ge aus Provisionen, Lizenzen und Patenten 7% USt": { + "account_number": "4576" + }, + "Sonstige Ertr\u00e4ge aus Provisionen, Lizenzen und Patenten 19% USt": { + "account_number": "4579" + } + }, + "Provisionsums\u00e4tze (Gruppe)": { + "is_group": 1, + "Provisionsums\u00e4tze": { + "account_number": "4560" + }, + "Provisionsums\u00e4tze, steuerfrei \u00a7 4Nr. 8ff UStG": { + "account_number": "4564" + }, + "Provisionsums\u00e4tze, steuerfrei \u00a7 4 Nr. 5 UStG": { + "account_number": "4565" + }, + "Provisionsums\u00e4tze 7% USt": { + "account_number": "4566" + }, + "Provisionsums\u00e4tze 19 % Ust": { + "account_number": "4569" + } + }, + "Erl\u00f6se Abfallverwertung": { + "account_number": "4510" + }, + "Erl\u00f6se Leergut": { + "account_number": "4520" + } + }, + "2 - Herstellungskosten der zur Erzielung der Umsatzerl\u00f6se erbrachten Leistungen": { + "root_type": "Expense", + "is_group": 1, + "Herstellungskosten": { + "account_number": "6990", + "account_type": "Cost of Goods Sold" + }, + "Aufwendungen f. Roh-, Hilfs- und Betriebsstoffe und f. bezogene Waren": { + "account_number": "5000", + "account_type": "Expense Account" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe (Gruppe)": { + "is_group": 1, + "Einkauf Roh-, Hilfs- und Betriebsstoffe": { + "account_number": "5100", + "account_type": "Expense Account" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": { + "account_number": "5110" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": { + "account_number": "5130" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe, innergem. Erwerb 7% Vorst. u. 7% Ust.": { + "account_number": "5160" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe, innergem. Erwerb 19% Vorst. u. 19% Ust.": { + "account_number": "5162" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe, innergem. Erwerb ohne Vorsteuer und 7% Umsatzsteuer": { + "account_number": "5166" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe, innergem. Erwerb ohne Vorsteuer und 19% Umsatzsteuer": { + "account_number": "5167" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe 5,5% Vorsteuer": { + "account_number": "5170" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe 10,7% Vorsteuer": { + "account_number": "5171" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe aus einem USt-Lager \u00a7 13a UStG 7% Vorst. und 7% Ust.": { + "account_number": "5175" + }, + "Einkauf Roh-, Hilfs- und Betriebsstoffe aus einem USt-Lager \u00a7 13a UStG 19% Vorst. und 19% Ust.": { + "account_number": "5176" + }, + "Erwerb Roh-, Hilfs- und Betriebsstoffe als letzter Abnehmer innerh. Dreiecksgesch. 19% Vorst. und 19% Ust.": { + "account_number": "5189" + }, + "Energiestoffe (Fertigung) (Gruppe)": { + "is_group": 1, + "Energiestoffe (Fertigung)": { + "account_number": "5190" + }, + "Energiestoffe (Fertigung)7% Vorsteuer": { + "account_number": "5191" + }, + "Energiestoffe (Fertigung)19% Vorsteuer": { + "account_number": "5192" + } + } + }, + "Wareneingang (Gruppe)": { + "is_group": 1, + "Wareneingang": { + "account_number": "5200" + }, + "Wareneingang 7 % Vorsteuer": { + "account_number": "5300" + }, + "Wareneingang 19 % Vorsteuer": { + "account_number": "5400" + }, + "Wareneingang 5,5 % Vorsteuer": { + "account_number": "5505" + }, + "Wareneingang 10,7 % Vorsteuer": { + "account_number": "5540" + }, + "Steuerfreier innergem. Erwerb": { + "account_number": "5550" + }, + "Wareneingang im Drittland steuerbar": { + "account_number": "5551" + }, + "Erwerb 1. Abnehmer innerh. eines Dreieckgesch\u00e4ftes": { + "account_number": "5552" + }, + "Erwerb Waren als letzter Abnehmer innerh. Dreiecksgesch. 19% Vorst. u. 19% Ust.": { + "account_number": "5553" + }, + "Wareneingang im anderen EU-Land steuerbar": { + "account_number": "5558" + }, + "Steuerfreie Einfuhren": { + "account_number": "5559" + }, + "Waren aus einem Umsatzsteuerlager, \u00a7 13a UStG 7% Vorst. u. 7% Ust.": { + "account_number": "5560" + }, + "Waren aus einem Umsatzsteuerlager, \u00a7 13a UStG 19% Vorst. u. 19% Ust.": { + "account_number": "5565" + } + }, + "innergem. Erwerb 7% Vorst. u. 7% Ust.": { + "account_number": "5420" + }, + "innergem. Erwerb 19 % Vorsteuer 19 % Umsatzsteuer": { + "account_number": "5425" + }, + "innergem. Erwerb ohne Vorst. und 7% Ust.": { + "account_number": "5430" + }, + "innergem. Erwerb ohne Vorsteuer und 19 % Umsatzsteuer": { + "account_number": "5435" + }, + "innergem. Erwerb von Neufahrzeugen von Lieferanten ohne Ust-ID 19 % Vorst. und 19 % Ust.": { + "account_number": "5440" + }, + "Nicht abziehbare Vorsteuer (Gruppe)": { + "is_group": 1, + "Nicht abziehbare Vorsteuer": { + "account_number": "5600" + }, + "Nicht abziehbare Vorsteuer 7 % (Gruppe)": { + "is_group": 1, + "Nicht abziehbare Vorsteuer 7 %": { + "account_number": "5610" + } + }, + "Nicht abziehbare Vorsteuer 19 % (Gruppe)": { + "is_group": 1, + "Nicht abziehbare Vorsteuer 19 %": { + "account_number": "5660" + } + } + }, + "Nachl\u00e4sse (Gruppe)": { + "is_group": 1, + "Nachl\u00e4sse": { + "account_number": "5700" + }, + "Nachl\u00e4sse aus Einkauf Roh-, Hilfs- und Betriebsstoffe": { + "account_number": "5701" + }, + "Nachl\u00e4sse 7 % Vorsteuer": { + "account_number": "5710" + }, + "Nachl\u00e4sse aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": { + "account_number": "5714" + }, + "Nachl\u00e4sse aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": { + "account_number": "5715" + }, + "Nachl\u00e4sse aus Einkauf Roh-, Hilfs- und Betriebsstoffe, innergem. Erwerb 7% Vorst. u. 7% Ust.": { + "account_number": "5717" + }, + "Nachl\u00e4sse aus Einkauf Roh-, Hilfs- und Betriebsstoffe, innergem. Erwerb 19% Vorst. u. 19% Ust.": { + "account_number": "5718" + }, + "Nachl\u00e4sse 19 % Vorsteuer": { + "account_number": "5720" + }, + "Nachl\u00e4sse 16 % Vorsteuer": { + "account_number": "5722" + }, + "Nachl\u00e4sse 15 % Vorsteuer": { + "account_number": "5723" + }, + "Nachl\u00e4sse aus innergem. Erwerb 7% Vorst. u. 7% Ust.": { + "account_number": "5724" + }, + "Nachl\u00e4sse aus innergem. Erwerb 19% Vorst. u. 19% Ust.": { + "account_number": "5725" + }, + "Nachl\u00e4sse aus innergem. Erwerb 16 % Vorsteuer und 16 % Umsatzsteuer": { + "account_number": "5726" + }, + "Nachl\u00e4sse aus innergem. Erwerb 15 % Vorsteuer und 15 % Umsatzsteuer": { + "account_number": "5727" + }, + "Erhaltene Skonti (Gruppe)": { + "is_group": 1, + "Erh. Skonti": { + "account_number": "5730" + }, + "Erh. Skonti 7 % Vorsteuer": { + "account_number": "5731" + }, + "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe": { + "account_number": "5733" + }, + "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": { + "account_number": "5734" + }, + "Erh. Skonti 19 % Vorsteuer": { + "account_number": "5736" + }, + "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": { + "account_number": "5738" + }, + "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe aus steuerpfl. innergem. Erwerb 19% Vorst. u. 19% Ust.": { + "account_number": "5741" + }, + "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe aus steuerpfl. innergem. Erwerb 7% Vorst. u. 7% Ust.": { + "account_number": "5743" + }, + "Erh. Skonti aus steuerpflichtigem innergem. Erwerb": { + "account_number": "5745" + }, + "Erh. Skonti aus steuerpflichtigem innergem. Erwerb 7% Vorst. u. 7% Ust.": { + "account_number": "5746" + }, + "Erh. Skonti aus steuerpflichtigem innergem. Erwerb 19% Vorst. u. 19% Ust.": { + "account_number": "5748" + }, + "Erh. Skonti aus Erwerb Roh-,Hilfs-,Betriebsstoff letzter Abn.innerh.Dreiecksg. 19% Vorst. und 19% Ust.": { + "account_number": "5792" + }, + "Erh. Skonti aus Erwerb Waren als letzter Abnehmer innerh. Dreiecksgesch. 19% Vorst. u. 19% Ust.": { + "account_number": "5793" + } + }, + "Erhaltene Boni (Gruppe)": { + "is_group": 1, + "Erhaltene Boni 7 % Vorsteuer": { + "account_number": "5750" + }, + "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe": { + "account_number": "5753" + }, + "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": { + "account_number": "5754" + }, + "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": { + "account_number": "5755" + }, + "Erhaltene Boni 19 % Vorsteuer": { + "account_number": "5760" + }, + "Erhaltene Boni": { + "account_number": "5769" + } + }, + "Erhaltene Rabatte (Gruppe)": { + "is_group": 1, + "Erhaltene Rabatte": { + "account_number": "5770" + }, + "Erhaltene Rabatte 7 % Vorsteuer": { + "account_number": "5780" + }, + "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe": { + "account_number": "5783" + }, + "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": { + "account_number": "5784" + }, + "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": { + "account_number": "5785" + }, + "Erhaltene Rabatte 19 % Vorsteuer": { + "account_number": "5790" + } + } + }, + "Bezugsnebenkosten (Gruppe)": { + "is_group": 1, + "Bezugsnebenkosten": { + "account_number": "5800" + }, + "Leergut": { + "account_number": "5820" + }, + "Z\u00f6lle und Einfuhrabgaben": { + "account_number": "5840" + }, + "Verrechnete Stoffkosten (Gegenkonto 5000-99) oder (4000-99)": { + "account_number": "5860" + } + }, + "Fremdleistungen (Gruppe)": { + "is_group": 1, + "Fremdleistungen": { + "account_number": "5900", + "account_type": "Expense Account" + }, + "Fremdleistungen 19% Vorsteuer": { + "account_number": "5906" + }, + "Fremdleistungen ohne Vorsteuer": { + "account_number": "5909" + }, + "Bauleistungen eines im Inland ans\u00e4ssigen Unternehmers 7% Vorst. u. 7% Ust.": { + "account_number": "5910" + }, + "Sonstige Leistungen eines im anderen EU-Land ans\u00e4ssigen Unternehmers 7% Vorst. u. 7% Ust.": { + "account_number": "5913" + }, + "Leistungen eines im Ausland ans\u00e4ssigen Unternehmers 7% Vorst. u. 7% Ust.": { + "account_number": "5915" + }, + "Bauleistungen eines im Inland ans\u00e4ssigen Unternehmers 19% Vorst. u. 19% Ust.": { + "account_number": "5920" + }, + "Sonstige Leistungen eines im anderen EU-Land ans\u00e4ssigen Unternehmers 19% Vorst. u. 19% Ust.": { + "account_number": "5923" + }, + "Leistungen eines im Ausland ans\u00e4ssigen Unternehmers 19% Vorst. u. 19% Ust.": { + "account_number": "5925" + }, + "Bauleistungen eines im Inland ans\u00e4ssigen Unternehmers ohne Vorst. und 7% Ust.": { + "account_number": "5930" + }, + "Sonstige Leistungen eines im anderen EU-Land ans\u00e4ssigen Unternehmers ohne Vorst. und 7% Ust.": { + "account_number": "5933" + }, + "Leistungen eines im Ausland ans\u00e4ssigen Unternehmers ohne Vorst. und 7% Ust.": { + "account_number": "5935" + }, + "Bauleistungen eines im Inland ans\u00e4ssigen Unternehmers ohne Vorsteuer und 19 % Umsatzsteuer": { + "account_number": "5940" + }, + "Sonstige Leistungen eines im anderen EU-Land ans\u00e4ssigen Unternehmers ohne Vorsteuer und 19 % Umsatzsteuer": { + "account_number": "5943" + }, + "Leistungen eines im Ausland ans\u00e4ssigen Unternehmers ohne Vorsteuer und 19 % Umsatzsteuer": { + "account_number": "5945" + }, + "Erhaltene Skonti aus Leistungen, f. die als Leistungsempf. die Steuer geschuldet wird (Gruppe)": { + "is_group": 1, + "Erh. Skonti aus Leistungen, f. die als Leistungsempf. die Steuer nach \u00a7 13b UStG geschuldet wird": { + "account_number": "5950" + }, + "Erh. Skonti aus Leistungen,f. die als Leistungsempf. die Steuer geschuldet wird 19 % Vorst. und 19 % Ust.": { + "account_number": "5951" + }, + "Erh. Skonti aus Leistungen, f. die als Leistungsempf. die Steuer geschuldet wird ohne Vorst. aber mit Uts.": { + "account_number": "5953" + }, + "Erh. Skonti aus Leistungen, f. die als Leistungsempf. die Steuer geschuldet wird ohne Vorst., mit 19 % Ust.": { + "account_number": "5954" + } + }, + "Leistungen nach \u00a7 13b UStG mit Vorsteuerabzug": { + "account_number": "5960" + }, + "Leistungen nach \u00a7 13b UStG ohne Vorsteuerabzug": { + "account_number": "5965" + } + }, + "L\u00f6hne und Geh\u00e4lter (Gruppe)": { + "is_group": 1, + "L\u00f6hne und Geh\u00e4lter": { + "account_number": "6000", + "account_type": "Expense Account" + }, + "L\u00f6hne": { + "account_number": "6010" + }, + "Geh\u00e4lter": { + "account_number": "6020" + }, + "Tantiemen": { + "account_number": "6026" + }, + "Aushilfsl\u00f6hne": { + "account_number": "6030" + }, + "L\u00f6hne f. Minijobs": { + "account_number": "6035" + }, + "Pauschale Steuern und Abgaben f. Sachzuwendungen und Dienstleistungen an Arbeitnehmer": { + "account_number": "6039" + }, + "Pauschale Steuer f. Aushilfen": { + "account_number": "6040" + }, + "Bedienungsgelder": { + "account_number": "6045" + }, + "Ehegattengehalt": { + "account_number": "6050" + }, + "Freiwillige soziale Aufwendungen lohnsteuerpflichtig": { + "account_number": "6060" + }, + "Pauschale Steuer auf sonstige Bez\u00fcge (z. B. Fahrtkostenzusch\u00fcsse)": { + "account_number": "6069" + }, + "Krankengeldzusch\u00fcsse": { + "account_number": "6070" + }, + "Sachzuwendungen und Dienstleistungen an Arbeitnehmer": { + "account_number": "6072" + }, + "Zusch\u00fcsse der Agenturen f. Arbeit (Haben)": { + "account_number": "6075" + }, + "Verm\u00f6genswirksame Leistungen": { + "account_number": "6080" + }, + "Fahrtkostenerstattung - Wohnung/Arbeitsst\u00e4tte": { + "account_number": "6090" + } + }, + "Soziale Abgaben und Aufwendungen f. Altersvers. und f. Unterst\u00fctzung (Gruppe)": { + "is_group": 1, + "Soziale Abgaben und Aufwendungen f. Altersvers. und f. Unterst\u00fctzung": { + "account_number": "6100", + "account_type": "Expense Account" + }, + "Gesetzliche soziale Aufwendungen": { + "account_number": "6110", + "account_type": "Expense Account" + }, + "Beitr\u00e4ge zur Berufsgenossenschaft": { + "account_number": "6120", + "account_type": "Expense Account" + }, + "Freiwillige soziale Aufwendungen lohnsteuerfrei": { + "account_number": "6130" + }, + "Aufwendungen f. Altersvers.": { + "account_number": "6150" + }, + "Aufwendungen f. Unterst\u00fctzung": { + "account_number": "6160" + }, + "Sonstige soziale Abgaben": { + "account_number": "6170" + } + }, + "Abschreibungen auf Sachanlagen (Gruppe)": { + "is_group": 1, + "Abschreibungen auf Sachanlagen (ohne AfA auf Kfz und Geb\u00e4ude)": { + "account_number": "6220", + "account_type": "Depreciation" + }, + "Abschreibungen auf Geb\u00e4ude": { + "account_number": "6221", + "account_type": "Depreciation" + }, + "Abschreibungen auf Kfz": { + "account_number": "6222", + "account_type": "Depreciation" + }, + "Abschreibungen auf Geb\u00e4udeanteil des h\u00e4uslichen Arbeitszimmers": { + "account_number": "6223" + } + }, + "Au\u00dferplanm\u00e4\u00dfige Abschreibungen auf Sachanlagen (Gruppe)": { + "is_group": 1, + "Au\u00dferplanm\u00e4\u00dfige Abschreibungen auf Sachanlagen": { + "account_number": "6230" + }, + "Absetzung f. au\u00dfergew\u00f6hnliche technische und wirtschaftliche Abnutzung der Geb\u00e4ude": { + "account_number": "6231" + }, + "Absetzung f. au\u00dfergew\u00f6hnliche technische und wirtschaftliche Abnutzung des Kfz": { + "account_number": "6232" + }, + "Absetzung f. au\u00dfergew\u00f6hnliche technische und wirtschaftliche Abnutzung sonstiger Wirtschaftsg\u00fcter": { + "account_number": "6233" + } + }, + "Abschreibungen auf Sachanlagen auf Grund steuerlicher Sondervorschriften (Gruppe)": { + "is_group": 1, + "Abschreibungen auf Sachanlagen auf Grund steuerlicher Sondervorschriften": { + "account_number": "6240" + }, + "Sonderabschreibungen nach \u00a7 7g Abs. 1 und 2 EStG a. F./\u00a7 7g Abs. 5 EStG n. F.(ohne Kfz)": { + "account_number": "6241" + }, + "Sonderabschreibungen nach \u00a7 7g Abs. 1 und 2 EStG a. F./\u00a7 7g Abs. 5 EStG n. F.(f. Kfz)": { + "account_number": "6242" + }, + "K\u00fcrzung der Anschaffungs- oder Herstellungskosten gem\u00e4\u00df \u00a7 7g Abs. 2 EStG n.F. (ohne Kfz)": { + "account_number": "6243" + }, + "K\u00fcrzung der Anschaffungs- oder Herstellungskosten gem\u00e4\u00df \u00a7 7g Abs. 2 EStG n.F. (f. Kfz)": { + "account_number": "6244" + } + }, + "Kaufleasing": { + "account_number": "6250" + }, + "Sofortabschreibung geringwertiger Wirtschaftsg\u00fcter": { + "account_number": "6260", + "account_type": "Depreciation" + }, + "Abschreibungen auf aktivierte, geringwertige Wirtschaftsg\u00fcter": { + "account_number": "6262" + }, + "Abschreibungen auf den Sammelposten Wirtschaftsg\u00fcter": { + "account_number": "6264" + }, + "Au\u00dferplanm\u00e4\u00dfige Abschreibungen auf aktivierte, geringwertige Wirtschaftsg\u00fcter": { + "account_number": "6266" + }, + "Abschreibungen auf Aufwendungen f. die Ingangsetzung und Erweiterung des Gesch\u00e4ftsbetriebs": { + "account_number": "6268" + }, + "Abschreibungen auf immaterielle VG (Gruppe)": { + "is_group": 1, + "Abschreibungen auf immaterielle VG": { + "account_number": "6200", + "account_type": "Depreciation" + }, + "Abschreibungen auf selbst geschaffene immaterielle VG": { + "account_number": "6201" + }, + "Abschreibungen auf den Gesch\u00e4fts- oder Firmenwert": { + "account_number": "6205" + }, + "Au\u00dferplanm\u00e4\u00dfige Abschreibungen auf den Gesch\u00e4fts- oder Firmenwert": { + "account_number": "6209" + }, + "Au\u00dferplanm\u00e4\u00dfige Abschreibungen auf immaterielle VG": { + "account_number": "6210" + }, + "Au\u00dferplanm\u00e4\u00dfige Abschreibungen auf selbst geschaffene immaterielle VG": { + "account_number": "6211" + }, + "Abschreibungen auf Forderungen gg. Kapitalges., an denen eine Beteiligung besteht (soweit un\u00fcblich hoch)": { + "account_number": "6290" + } + }, + "Abschreibungen auf sonstige VG des Umlaufverm. (soweit un\u00fcbliche H\u00f6he) (Gruppe)": { + "is_group": 1, + "Abschreibungen auf sonstige VG des Umlaufverm. (soweit un\u00fcbliche H\u00f6he)": { + "account_number": "6270" + }, + "Abschreibungen auf Umlaufverm\u00f6gen, steuerrechtlich bedingt (soweit un\u00fcbliche H\u00f6he)": { + "account_number": "6272" + }, + "Abschreibungen auf Roh-, Hilfs- und Betriebsstoffe/Waren (soweit un\u00fcblich hoch)": { + "account_number": "6278" + }, + "Abschreibungen auf fertige und unfertige Erzeugnisse (soweit un\u00fcblich hoch)": { + "account_number": "6279" + }, + "Forderungsverluste, un\u00fcblich hoch (Gruppe)": { + "is_group": 1, + "Forderungsverluste, un\u00fcblich hoch": { + "account_number": "6280" + }, + "Forderungsverluste 7% USt (soweit un\u00fcblich hoch)": { + "account_number": "6281" + }, + "Forderungsverluste 16% USt (soweit un\u00fcblich hoch)": { + "account_number": "6285" + }, + "Forderungsverluste 19% USt (soweit un\u00fcblich hoch)": { + "account_number": "6286" + }, + "Forderungsverluste 15% USt (soweit un\u00fcblich hoch)": { + "account_number": "6287" + } + } + } + }, + "4 - Vertriebskosten": { + "root_type": "Expense", + "is_group": 1, + "Personalaufwand (Vertrieb)": { + "is_group": 1 + } + }, + "5 - allgemeine Verwaltungskosten": { + "root_type": "Expense", + "is_group": 1, + "Verwaltungskosten": { + "account_number": "6992", + "account_type": "Expenses Included In Valuation" + }, + "Personalaufwand (Verwaltung)": { + "is_group": 1 + } + }, + "6 - sonstige betriebliche Ertr\u00e4ge": { + "root_type": "Income", + "is_group": 1, + "Andere aktivierte Eigenleistungen": { + "account_number": "4820" + }, + "Aktivierte Eigenleistungen zur Erstellung von selbst geschaffenen immateriellen VGn": { + "account_number": "4825" + }, + "Sonstige betriebliche Ertr\u00e4ge": { + "account_number": "4830" + }, + "Sonstige betriebliche Ertr\u00e4ge von verbundenen Unternehmen": { + "account_number": "4832" + }, + "Andere Nebenerl\u00f6se": { + "account_number": "4833" + }, + "Sonstige Ertr\u00e4ge betrieblich und regelm\u00e4\u00dfig 16 % USt": { + "account_number": "4834" + }, + "Sonstige Ertr\u00e4ge betrieblich und regelm\u00e4\u00dfig": { + "account_number": "4835" + }, + "Sonstige Ertr\u00e4ge betrieblich und regelm\u00e4\u00dfig 19 % USt": { + "account_number": "4836" + }, + "Sonstige Ertr\u00e4ge betriebsfremd und regelm\u00e4\u00dfig": { + "account_number": "4837" + }, + "Erstattete Vorsteuer anderer L\u00e4nder": { + "account_number": "4838" + }, + "Sonstige Ertr\u00e4ge unregelm\u00e4\u00dfig": { + "account_number": "4839" + }, + "Ertr\u00e4ge aus Abgang von Gegenst\u00e4nden des Anlageverm\u00f6gens": { + "account_number": "4900" + }, + "Ertr\u00e4ge aus der Ver\u00e4u\u00dferung von Anteilen an Kap.Ges. (Finanzanlageverm., inl\u00e4nd. Kap.Ges.)": { + "account_number": "4901" + }, + "Ertr\u00e4ge aus Abgang von Gegenst\u00e4nden des Umlaufverm. (au\u00dfer Vorr\u00e4te)": { + "account_number": "4905" + }, + "Ertr\u00e4ge aus Abgang von Gegenst\u00e4nden des Umlaufverm. (au\u00dfer Vorr\u00e4te, inl\u00e4nd. Kap.Ges.)": { + "account_number": "4906" + }, + "Ertr\u00e4ge aus der W\u00e4hrungsumrechnung": { + "account_number": "4840" + }, + "Sonstige Erl\u00f6se betrieblich und regelm\u00e4\u00dfig, steuerfrei \u00a7 4 Nr. 8 ff UStG": { + "account_number": "4841" + }, + "Sonstige Erl\u00f6se betrieblich und regelm\u00e4\u00dfig, steuerfrei z. B. \u00a7 4 Nr. 2-7 UStG": { + "account_number": "4842" + }, + "Ertr\u00e4ge aus Bewertung Finanzmittelfonds": { + "account_number": "4843" + }, + "Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen steuerfrei \u00a7 4 Nr. 1a UStG (bei Buchgewinn)": { + "account_number": "4844" + }, + "Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen 19 % USt (bei Buchgewinn)": { + "account_number": "4845" + }, + "Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen steuerfrei \u00a7 4 Nr. 1b UStG (bei Buchgewinn)": { + "account_number": "4848" + }, + "Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen (bei Buchgewinn)": { + "account_number": "4849" + }, + "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchgewinn) (Gruppe)": { + "is_group": 1, + "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchgewinn)": { + "account_number": "4850" + }, + "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (bei Buchgewinn)": { + "account_number": "4851" + }, + "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (inl\u00e4ndische Kap.Ges., bei Buchgewinn)": { + "account_number": "4852" + }, + "Anlagenabg\u00e4nge Sachanlagen (Restbuchwert bei Buchvergewinn)": { + "account_number": "4855" + }, + "Anlagenabg\u00e4nge immaterielle VG (Restbuchwert bei Buchgewinn)": { + "account_number": "4856" + }, + "Anlagenabg\u00e4nge Finanzanlagen (Restbuchwert bei Buchgewinn)": { + "account_number": "4857" + }, + "Anlagenabg\u00e4nge Finanzanlagen (inl\u00e4ndische Kap.Ges., Restbuchwert bei Buchgewinn)": { + "account_number": "4858" + } + }, + "Ertr\u00e4ge aus Zuschreibungen des Sachanlageverm\u00f6gens": { + "account_number": "4910", + "account_type": "Round Off" + }, + "Ertr\u00e4ge aus Zuschreibungen des immateriellen Anlageverm\u00f6gens": { + "account_number": "4911" + }, + "Ertr\u00e4ge aus Zuschreibungen des Finanzanlageverm\u00f6gens": { + "account_number": "4912" + }, + "Ertr\u00e4ge aus Zuschreibungen des Finanzanlageverm\u00f6gens (inl\u00e4ndische Kap.Ges.)": { + "account_number": "4913" + }, + "Ertr\u00e4ge aus Zuschreibungen \u00a7 3 Nr. 40 EStG/\u00a7 8b Abs. 2 KStG (inl\u00e4ndische Kap.Ges.)": { + "account_number": "4914" + }, + "Ertr\u00e4ge aus Zuschreibungen des Umlaufverm. au\u00dfer Vorr\u00e4te": { + "account_number": "4915" + }, + "Ertr\u00e4ge aus Zuschreibungen des Umlaufverm. (inl\u00e4ndische Kap.Ges.)": { + "account_number": "4916" + }, + "Ertr\u00e4ge aus Herabsetzung der Pauschalwertberichtigung auf Forderungen": { + "account_number": "4920" + }, + "Ertr\u00e4ge aus Herabsetzung der Einzelwertberichtigung auf Forderungen": { + "account_number": "4923" + }, + "Ertr\u00e4ge aus abgeschriebenen Forderungen": { + "account_number": "4925" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung einer steuerlichen R\u00fccklage nach \u00a7 6b Abs. 3 EStG": { + "account_number": "4927" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung einer steuerlichen R\u00fccklage nach \u00a7 6b Abs. 10 EStG": { + "account_number": "4928" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung der R\u00fccklage f. Ersatzbeschaffung R 6.6 EStR": { + "account_number": "4929" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung von R\u00fcckstellungen": { + "account_number": "4930" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung einer steuerlichen R\u00fccklage (Existenzgr\u00fcnderr\u00fccklage)": { + "account_number": "4934" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung einer steuerlichen R\u00fccklage": { + "account_number": "4935" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung von steuerlichen R\u00fccklagen (Ansparabschreibungen)": { + "account_number": "4936" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung steuerrechtlicher Sonderabschreibungen": { + "account_number": "4937" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung einer steuerlichen R\u00fccklage nach \u00a7 4g EStG": { + "account_number": "4938" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung von steuerlichen R\u00fccklagen nach \u00a7 52 Abs. 16 EStG": { + "account_number": "4939" + }, + "Verrechnete sonstige Sachbez\u00fcge (Gruppe)": { + "is_group": 1, + "Verrechnete sonstige Sachbez\u00fcge (keine Waren)": { + "account_number": "4940" + }, + "Sachbez\u00fcge 7 % USt (Waren)": { + "account_number": "4941" + }, + "Sachbez\u00fcge 19 % USt (Waren)": { + "account_number": "4945" + }, + "Verrechnete sonstige Sachbez\u00fcge": { + "account_number": "4946" + }, + "Verrechnete sonstige Sachbez\u00fcge aus Kfz-Gestellung 19% USt": { + "account_number": "4947" + }, + "Verrechnete sonstige Sachbez\u00fcge 19% USt": { + "account_number": "4948" + }, + "Verrechnete sonstige Sachbez\u00fcge ohne Umsatzsteuer": { + "account_number": "4949" + } + }, + "Periodenfremde Ertr\u00e4ge (soweit nicht au\u00dferordentlich)": { + "account_number": "4960" + }, + "Versicherungsentsch\u00e4digungen und Schadenersatzleistungen": { + "account_number": "4970" + }, + "Erstattungen Aufwendungsausgleichsgesetz": { + "account_number": "4972" + }, + "Investitionszusch\u00fcsse (steuerpflichtig)": { + "account_number": "4975" + }, + "Investitionszulagen (steuerfrei)": { + "account_number": "4980" + }, + "Steuerfreie Ertr\u00e4ge aus der Aufl\u00f6sung von steuerlichen R\u00fccklagen": { + "account_number": "4981" + }, + "Sonstige steuerfreie Betriebseinnahmen": { + "account_number": "4982" + }, + "Ertr\u00e4ge aus der Aktivierung unentgeltlich erworbener VG": { + "account_number": "4987" + }, + "Kostenerstattungen, R\u00fcckverg\u00fctungen und Gutschriften f. fr\u00fchere Jahre": { + "account_number": "4989" + }, + "Ertr\u00e4ge aus Verwaltungskostenumlagen": { + "account_number": "4992" + }, + "Unentgeltliche Wertabgaben": { + "account_number": "4600" + }, + "Entnahme von Gegenst\u00e4nden ohne USt": { + "account_number": "4605" + }, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 7 % USt (Gruppe)": { + "is_group": 1, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 7 % USt": { + "account_number": "4630" + }, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt": { + "account_number": "4637" + }, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternnehmens ohne USt (Telefon-Nutzung)": { + "account_number": "4638" + }, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt (Kfz-Nutzung)": { + "account_number": "4639" + } + }, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 19 % USt (Gruppe)": { + "is_group": 1, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 19 % USt": { + "account_number": "4640" + }, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 19 % USt (Kfz-Nutzung)": { + "account_number": "4645" + }, + "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 19 % USt (Telefon-Nutzung)": { + "account_number": "4646" + } + }, + "Unentgeltliche Erbringung einer sonstigen Leistung 7 % USt": { + "account_number": "4650" + }, + "Unentgeltliche Erbringung einer sonstigen Leistung ohne USt": { + "account_number": "4659" + }, + "Unentgeltliche Erbringung einer sonstigen Leistung 19 % USt": { + "account_number": "4660" + }, + "Unentgeltliche Zuwendung von Waren 7 % USt": { + "account_number": "4670" + }, + "Unentgeltliche Zuwendung von Waren ohne USt": { + "account_number": "4679" + }, + "Unentgeltliche Zuwendung von Waren 19 % USt": { + "account_number": "4680" + }, + "Unentgeltliche Zuwendung von Gegenst\u00e4nden 19 % USt": { + "account_number": "4686" + }, + "Unentgeltliche Zuwendung von Gegenst\u00e4nden ohne USt": { + "account_number": "4689" + }, + "Nicht steuerbare Ums\u00e4tze (Innenums\u00e4tze) (Gruppe)": { + "is_group": 1, + "Nicht steuerbare Ums\u00e4tze (Innenums\u00e4tze)": { + "account_number": "4690" + }, + "Umsatzsteuerverg\u00fctungen, z.B. nach \u00a7 24 UStG": { + "account_number": "4695" + } + }, + "Au\u00dferordentliche Ertr\u00e4ge (Gruppe)": { + "is_group": 1, + "Au\u00dferordentliche Ertr\u00e4ge": { + "account_number": "7400" + }, + "Au\u00dferordentliche Ertr\u00e4ge finanzwirksam": { + "account_number": "7401" + }, + "Au\u00dferordentliche Ertr\u00e4ge nicht finanzwirksam (Gruppe)": { + "is_group": 1, + "Au\u00dferordentliche Ertr\u00e4ge nicht finanzwirksam": { + "account_number": "7450" + }, + "Ertr\u00e4ge durch Verschmelzung und Umwandlung": { + "account_number": "7451" + }, + "Ertr\u00e4ge durch den Verkauf von bedeutenden Beteiligungen": { + "account_number": "7452" + }, + "Ert\u00e4ge durch den Verkauf von bedeutenden Grundst\u00fccken": { + "account_number": "7453" + }, + "Gewinn aus der Ver\u00e4u\u00dferung oder der Aufgabe von Gesch\u00e4ftsaktivit\u00e4ten nach Steuern": { + "account_number": "7454" + } + }, + "Au\u00dferordentliche Ertr\u00e4ge aus der Anwendung von \u00dcbergangsvorschriften (Gruppe)": { + "is_group": 1, + "Au\u00dferordentliche Ertr\u00e4ge aus der Anwendung von \u00dcbergangsvorschriften": { + "account_number": "7460" + }, + "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Sachanlageverm\u00f6gen": { + "account_number": "7461" + }, + "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Finanzanlageverm\u00f6gen": { + "account_number": "7462" + }, + "Au\u00dferordentliche Ertr\u00e4ge: Wertpapiere im Umlaufverm\u00f6gen": { + "account_number": "7463" + }, + "Au\u00dferordentliche Ertr\u00e4ge: latente Steuern": { + "account_number": "7464" + } + } + } + }, + "7 - sonstige betriebliche Aufwendungen": { + "root_type": "Expense", + "is_group": 1, + "Sonstige betriebliche Aufwendungen": { + "account_number": "6300" + }, + "Interimskonto f. Aufw. in einem anderen Land (Vorst.verg. m\u00f6glich)": { + "account_number": "6302" + }, + "Fremdleistungen/Fremdarbeiten": { + "account_number": "6303" + }, + "Sonstige Aufwendungen betrieblich und regelm\u00e4\u00dfig": { + "account_number": "6304" + }, + "Raumkosten": { + "account_number": "6305" + }, + "Miete (unbewegliche Wirtschaftsg\u00fcter)": { + "account_number": "6310" + }, + "Miete/Aufwendungen f. doppelte Haushaltsf\u00fchrung": { + "account_number": "6312" + }, + "Pacht (unbewegliche Wirtschaftsg\u00fcter)": { + "account_number": "6315" + }, + "Leasing (unbewegliche Wirtschaftsg\u00fcter)": { + "account_number": "6316" + }, + "Aufwendungen f. gemietete oder gepachtete unbewegliche Wirtschaftsg., die GewSt hinzuzurechnen sind": { + "account_number": "6317" + }, + "Miet- und Pachtnebenkosten (GewSt nicht zu ber\u00fccksichtigen)": { + "account_number": "6318" + }, + "Heizung": { + "account_number": "6320" + }, + "Gas, Strom, Wasser": { + "account_number": "6325" + }, + "Reinigung": { + "account_number": "6330" + }, + "Instandhaltung betrieblicher R\u00e4ume": { + "account_number": "6335" + }, + "Abgaben f. betrieblich genutzten Grundbesitz": { + "account_number": "6340" + }, + "Sonstige Raumkosten": { + "account_number": "6345" + }, + "Aufwendungen f. ein h\u00e4usliches Arbeitszimmer (abziehbarer Anteil)": { + "account_number": "6348" + }, + "Aufwendungen f. ein h\u00e4usliches Arbeitszimmer (nicht abziehbarer Anteil)": { + "account_number": "6349" + }, + "Grundst\u00fccksaufwendungen betrieblich": { + "account_number": "6350" + }, + "Grundst\u00fccksaufwendungen neutral": { + "account_number": "6352" + }, + "Zuwendungen, Spenden (Gruppe)": { + "is_group": 1, + "Zuwendungen, Spenden, steuerlich nicht abziehbar": { + "account_number": "6390" + }, + "Zuwendungen, Spenden f. wissenschaftliche und kulturelle Zwecke": { + "account_number": "6391" + }, + "Zuwendungen, Spenden f. mildt\u00e4tige Zwecke": { + "account_number": "6392" + }, + "Zuwendungen, Spenden f. kirchliche, religi\u00f6se und gemeinn\u00fctzige Zwecke": { + "account_number": "6393" + }, + "Zuwendungen, Spenden an politische Parteien": { + "account_number": "6394" + }, + "Zuwendungen, Spenden an Stiftungen f. gemeinn\u00fctzige Zwecke i. S. d. \u00a7 52 Abs. 2 Nr. 1-3 AO": { + "account_number": "6395" + }, + "Zuwendungen, Spenden an Stiftungen f. gemeinn\u00fctzige Zwecke i. S. d. \u00a7 52 Abs. 2 Nr. 4 AO": { + "account_number": "6396" + }, + "Zuwendungen, Spenden an Stiftungen f. kirchliche, religi\u00f6se und gemeinn\u00fctzige Zwecke": { + "account_number": "6397" + }, + "Zuwendungen, Spenden an Stiftungen f.wissenschaftliche, mildt\u00e4tige und kulturelle Zwecke": { + "account_number": "6398" + } + }, + "Versicherungen (Gruppe)": { + "is_group": 1, + "Versicherungen": { + "account_number": "6400" + }, + "Versicherungen f. Geb\u00e4ude, die zum Betriebsverm\u00f6gen geh\u00f6ren": { + "account_number": "6405" + }, + "Netto-Pr\u00e4mie f. R\u00fcckdeckung k\u00fcnftiger Versorgungsleistungen": { + "account_number": "6410" + }, + "Beitr\u00e4ge": { + "account_number": "6420" + }, + "Sonstige Abgaben": { + "account_number": "6430" + }, + "Steuerlich abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": { + "account_number": "6436" + }, + "Steuerlich nicht abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": { + "account_number": "6437" + }, + "Ausgleichsabgabe i. S. d. Schwerbehindertengesetzes": { + "account_number": "6440" + }, + "Reparaturen und Instandhaltung von Bauten": { + "account_number": "6450" + }, + "Reparaturen und Instandhaltung von technischenAnlagen und Maschinen": { + "account_number": "6460" + }, + "Reparaturen und Instandhaltung von anderen Anlagen und Betriebs- und Gesch\u00e4ftsausstattung": { + "account_number": "6470" + }, + "Zuf\u00fchrung zu Aufwandsr\u00fcckstellungen": { + "account_number": "6475" + }, + "Reparaturen und Instandhaltung von anderen Anlagen": { + "account_number": "6485" + }, + "Sonstige Reparaturen und Instandhaltungen": { + "account_number": "6490" + }, + "Wartungskosten f. Hard- und Software": { + "account_number": "6495" + }, + "Mietleasing (bewegliche Wirtschaftsg\u00fcter)": { + "account_number": "6498" + } + }, + "Fahrzeugkosten (Gruppe)": { + "is_group": 1, + "Fahrzeugkosten": { + "account_number": "6500" + }, + "Kfz-Versicherungen (Gruppe)": { + "is_group": 1, + "Kfz-Versicherungen": { + "account_number": "6520" + } + }, + "Laufende Kfz-Betriebskosten (Gruppe)": { + "is_group": 1, + "Laufende Kfz-Betriebskosten": { + "account_number": "6530" + } + }, + "Kfz-Reparaturen (Gruppe)": { + "is_group": 1, + "Kfz-Reparaturen": { + "account_number": "6540" + } + }, + "Garagenmiete (Gruppe)": { + "is_group": 1, + "Garagenmiete": { + "account_number": "6550" + } + }, + "Mietleasing Kfz (Gruppe)": { + "is_group": 1, + "Mietleasing Kfz": { + "account_number": "6560" + } + }, + "Sonstige Kfz-Kosten (Gruppe)": { + "is_group": 1, + "Sonstige Kfz-Kosten": { + "account_number": "6570" + } + }, + "Mautgeb\u00fchren (Gruppe)": { + "is_group": 1, + "Mautgeb\u00fchren": { + "account_number": "6580" + } + }, + "Kfz-Kosten f. betrieblich genutzte zum Privatverm\u00f6gen geh\u00f6rende Kraftfahrzeuge": { + "account_number": "6590" + }, + "Fremdfahrzeugkosten": { + "account_number": "6595" + } + }, + "Werbekosten (Gruppe)": { + "is_group": 1, + "Werbekosten": { + "account_number": "6600" + }, + "Streuartikel": { + "account_number": "6605" + }, + "Geschenke abzugsf\u00e4hig ohne \u00a7 37b EStG": { + "account_number": "6610" + }, + "Geschenke abzugsf\u00e4hig mit \u00a7 37b EStG": { + "account_number": "6611" + }, + "Pauschale Steuern f. Geschenke und Zugaben abzugsf\u00e4hig": { + "account_number": "6612" + }, + "Geschenke nicht abzugsf\u00e4hig ohne \u00a7 37b EStG": { + "account_number": "6620" + }, + "Geschenke nicht abzugsf\u00e4hig mit \u00a7 37b EStG": { + "account_number": "6621" + }, + "Pauschale Steuern f. Geschenke und Zuwendungen nicht abzugsf\u00e4hig": { + "account_number": "6622" + }, + "Geschenke ausschlie\u00dflich betrieblich genutzt": { + "account_number": "6625" + }, + "Zugaben mit \u00a7 37b EStG": { + "account_number": "6629" + }, + "Repr\u00e4sentationskosten": { + "account_number": "6630" + }, + "Bewirtungskosten": { + "account_number": "6640" + }, + "Sonstige eingeschr\u00e4nkt abziehbare Betriebsausgaben (abziehbarer Anteil)": { + "account_number": "6641" + }, + "Sonstige eingeschr\u00e4nkt abziehbare Betriebsausgaben (nicht abziehbarer Anteil)": { + "account_number": "6642" + }, + "Aufmerksamkeiten": { + "account_number": "6643" + }, + "Nicht abzugsf\u00e4hige Bewirtungskosten": { + "account_number": "6644" + }, + "Nicht abzugsf\u00e4hige Betriebsausgaben aus Werbe- und Repr\u00e4sentationskosten": { + "account_number": "6645" + }, + "Reisekosten Arbeitnehmer": { + "account_number": "6650" + }, + "Reisekosten Arbeitnehmer \u00dcbernachtungsaufwand": { + "account_number": "6660" + }, + "Reisekosten Arbeitnehmer Fahrtkosten": { + "account_number": "6663" + }, + "Reisekosten Arbeitnehmer Verpflegungsmehraufwand": { + "account_number": "6664" + }, + "Kilometergelderstattung Arbeitnehmer": { + "account_number": "6668" + }, + "Reisekosten Unternehmer (Gruppe)": { + "is_group": 1, + "Reisekosten Unternehmer": { + "account_number": "6670" + }, + "Reisekosten Unternehmer (nicht abziehbarer Anteil)": { + "account_number": "6672" + }, + "Reisekosten Unternehmer Fahrtkosten": { + "account_number": "6673" + }, + "Reisekosten Unternehmer Verpflegungsmehraufwand": { + "account_number": "6674" + }, + "Reisekosten Unternehmer \u00dcbernachtungsaufwand": { + "account_number": "6680" + } + }, + "Fahrten zwischen Wohnung und Betriebsst\u00e4tte und Familienheimfahrten (abziehbarer Anteil)": { + "account_number": "6688" + }, + "Fahrten zwischen Wohnung und Betriebsst\u00e4tte und Familienheimfahrten (nicht abziehbarer Anteil)": { + "account_number": "6689" + }, + "Fahrten zwischen Wohnung und Betriebsst\u00e4tte und Familienheimfahrten (Haben)": { + "account_number": "6690" + }, + "Verpflegungsmehraufwendungen i. R. d. doppelten Haushaltsf\u00fchrung (abziehbarer Anteil)": { + "account_number": "6691" + } + }, + "Kosten Warenabgabe (Gruppe)": { + "is_group": 1, + "Kosten Warenabgabe": { + "account_number": "6700" + }, + "Verpackungsmaterial": { + "account_number": "6710" + }, + "Ausgangsfrachten": { + "account_number": "6740" + }, + "Transportversicherungen": { + "account_number": "6760" + }, + "Verkaufsprovisionen": { + "account_number": "6770" + }, + "Fremdarbeiten (Vertrieb)": { + "account_number": "6780" + }, + "Aufwand f. Gew\u00e4hrleistungen": { + "account_number": "6790" + } + }, + "Porto": { + "account_number": "6800" + }, + "Telefon": { + "account_number": "6805" + }, + "Telefax und Internetkosten": { + "account_number": "6810" + }, + "B\u00fcrobedarf": { + "account_number": "6815" + }, + "Zeitschriften, B\u00fccher": { + "account_number": "6820" + }, + "Fortbildungskosten": { + "account_number": "6821" + }, + "Freiwillige Sozialleistungen": { + "account_number": "6822" + }, + "Rechts- und Beratungskosten": { + "account_number": "6825" + }, + "Abschluss- und Pr\u00fcfungskosten": { + "account_number": "6827" + }, + "Buchf\u00fchrungskosten": { + "account_number": "6830" + }, + "Mieten f. Einrichtungen (bewegliche Wirtschaftsg\u00fcter)": { + "account_number": "6835" + }, + "Pacht (bewegliche Wirtschaftsg\u00fcter)": { + "account_number": "6836" + }, + "Aufwendungen f. die zeitlich befristete \u00dcberlassung von Rechten (Lizenzen, Konzessionen)": { + "account_number": "6837" + }, + "Aufwendungen f. gemietete oder gepachtete bewegliche Wirtschaftsg., die gewerbest. hinzuzurechnen sind": { + "account_number": "6838" + }, + "Werkzeuge und Kleinger\u00e4te": { + "account_number": "6845" + }, + "Betriebsbedarf": { + "account_number": "6850" + }, + "Nebenkosten des Geldverkehrs": { + "account_number": "6855" + }, + "Aufwendungen aus Anteilen an inl\u00e4ndischen Kap.Ges.": { + "account_number": "6856" + }, + "Ver\u00e4u\u00dferungskosten \u00a7 3 Nr. 40 EStG/\u00a7 8b Abs. 2 KStG (inl. Kap.Ges.)": { + "account_number": "6857" + }, + "Aufwendungen f. Abraum- und Abfallbeseitigung": { + "account_number": "6859" + }, + "Nicht abziehbare Vorsteuer 19 %": { + "account_number": "6871" + }, + "Aufwendungen aus der W\u00e4hrungsumrechnung": { + "account_number": "6880" + }, + "Aufwendungen aus Bewertung Finanzmittelfonds": { + "account_number": "6883" + }, + "Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen steuerfrei \u00a7 4 Nr. 1a UStG (bei Buchverlust)": { + "account_number": "6884" + }, + "Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen 19 % USt (bei Buchverlust)": { + "account_number": "6885" + }, + "Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen steuerfrei \u00a7 4 Nr. 1b UStG (bei Buchverlust)": { + "account_number": "6888" + }, + "Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen (bei Buchverlust)": { + "account_number": "6889" + }, + "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchverlust)": { + "account_number": "6890" + }, + "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (bei Buchverlust)": { + "account_number": "6891" + }, + "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (inl. Kap.Ges., bei Buchverlust)": { + "account_number": "6892" + }, + "Anlagenabg\u00e4nge Sachanlagen (Restbuchwert bei Buchverlust)": { + "account_number": "6895" + }, + "Anlagenabg\u00e4nge immaterielle VG (Restbuchwert bei Buchverlust)": { + "account_number": "6896" + }, + "Anlagenabg\u00e4nge Finanzanlagen (Restbuchwert bei Buchverlust)": { + "account_number": "6897" + }, + "Anlagenabg\u00e4nge Finanzanlagen (inl. Kap.Ges., Restbuchwert bei Buchverlust)": { + "account_number": "6898" + }, + "Verluste aus dem Abgang von Gegenst\u00e4nden des Anlageverm\u00f6gens": { + "account_number": "6900" + }, + "Verluste aus der Ver\u00e4u\u00dferung von Anteilen an Kap.Ges. (Finanzanlageverm\u00f6gen, inl. Kap.Ges.)": { + "account_number": "6903" + }, + "Verluste aus dem Abgang von Ggenst\u00e4nden des Umlaufverm. (au\u00dfer Vorr\u00e4te)": { + "account_number": "6905" + }, + "Verluste aus dem Abgang von Gegenst\u00e4nden des Umlaufverm. (au\u00dfer Vorr\u00e4te, inl. Kap.Ges.)": { + "account_number": "6906" + }, + "Abschreibungen auf Umlaufverm\u00f6gen au\u00dfer Vorr\u00e4te und Wertpapiere (\u00fcbliche H\u00f6he)": { + "account_number": "6910", + "account_type": "Round Off" + }, + "Abschreibungen auf Umlaufverm\u00f6gen, steuerrechtlich bedingt (\u00fcbliche H\u00f6he)": { + "account_number": "6912" + }, + "Einstellung in die Pauschalwertberichtigung auf Forderungen": { + "account_number": "6920" + }, + "Einstellungen in die steuerliche R\u00fccklage nach \u00a7 6b Abs. 3 EStG": { + "account_number": "6922" + }, + "Einstellung in die Einzelwertberichtigung auf Forderungen": { + "account_number": "6923" + }, + "Einstellungen in die steuerliche R\u00fccklage nach \u00a7 6b Abs. 10 EStG": { + "account_number": "6924" + }, + "Einstellungen in steuerliche R\u00fccklagen": { + "account_number": "6927" + }, + "Einstellungen in die R\u00fccklage f. Ersatzbeschaffung nach R 6.6 EStR": { + "account_number": "6928" + }, + "Einstellungen in die steuerliche R\u00fccklage nach \u00a7 4g EStG": { + "account_number": "6929" + }, + "Forderungsverluste (\u00fcbliche H\u00f6he) (Gruppe)": { + "is_group": 1, + "Forderungsverluste (\u00fcbliche H\u00f6he)": { + "account_number": "6930" + }, + "Forderungsverluste 7 % USt (\u00fcbliche H\u00f6he)": { + "account_number": "6931" + }, + "Forderungsverluste aus steuerfreien EU-Lieferungen (\u00fcbliche H\u00f6he)": { + "account_number": "6932" + }, + "Forderungsverluste aus im Inland steuerpfl. EU-Lieferungen 7 % USt (\u00fcbliche H\u00f6he)": { + "account_number": "6933" + }, + "Forderungsverluste aus im Inland steuerpfl. EU-Lieferungen 16 % USt (\u00fcbliche H\u00f6he)": { + "account_number": "6934" + }, + "Forderungsverluste 16% USt (\u00fcbliche H\u00f6he)": { + "account_number": "6935" + }, + "Forderungsverluste 19 % USt (\u00fcbliche H\u00f6he)": { + "account_number": "6936" + }, + "Forderungsverluste 15% USt (\u00fcbliche H\u00f6he)": { + "account_number": "6937" + }, + "Forderungsverluste aus im Inland steuerpfl. EU-Lieferungen 19 % USt (\u00fcbliche H\u00f6he)": { + "account_number": "6938" + }, + "Forderungsverluste aus im Inland steuerpfl. EU-Lieferungen 15% USt (\u00fcbliche H\u00f6he)": { + "account_number": "6939" + } + }, + "Periodenfremde Aufwendungen (soweit nicht au\u00dferordentlich)": { + "account_number": "6960" + }, + "Sonstige Aufwendungen betriebsfremd und regelm\u00e4\u00dfig": { + "account_number": "6967" + }, + "Sonstige Aufwendungen unregelm\u00e4\u00dfig": { + "account_number": "6969" + }, + "Au\u00dferordentliche Aufwendungen (Gruppe)": { + "is_group": 1, + "Au\u00dferordentliche Aufwendungen": { + "account_number": "7500" + }, + "Au\u00dferordentliche Aufwendungen finanzwirksam": { + "account_number": "7501" + }, + "Au\u00dferordentliche Aufwendungen nicht finanzwirksam": { + "account_number": "7550" + }, + "Verluste durch Verschmelzung und Umwandlung": { + "account_number": "7551" + }, + "Verluste durch au\u00dfergew\u00f6hnliche Schadensf\u00e4lle": { + "account_number": "7552" + }, + "Aufwendungen f. Restrukturierungs- und Sanierungsma\u00dfnahmen": { + "account_number": "7553" + }, + "Verluste aus Gesch\u00e4ftsaufgabe oder -ver\u00e4u\u00dferung nach Steuern": { + "account_number": "7554" + }, + "Au\u00dferordentliche Aufwendungen aus der Anwendung von \u00dcbergangsvorschriften (Gruppe)": { + "is_group": 1, + "Au\u00dferordentliche Aufwendungen aus der Anwendung von \u00dcbergangsvorschriften": { + "account_number": "7560" + }, + "Au\u00dferordentliche Aufwendungen aus der Anwendung von \u00dcbergangsvorschriften (Pensionsr\u00fcckst.)": { + "account_number": "7561" + }, + "Au\u00dferordentliche Aufwendungen aus der Anwendung von \u00dcbergangsvorschriften (Bilanzierungshilfen)": { + "account_number": "7562" + }, + "Au\u00dferordentliche Aufwendungen aus der Anwendung von \u00dcbergangsvorschriften (Latente Steuern)": { + "account_number": "7563" + } + } + } + }, + "8 - Ertr\u00e4ge aus Beteiligungen": { + "root_type": "Income", + "is_group": 1, + "Ertr\u00e4ge aus Beteiligungen": { + "account_number": "7000", + "account_type": "Income Account" + }, + "Ertr\u00e4ge aus Beteiligungen an Personengesellschaften (verb. Unternehmen), \u00a7 9 GewStG": { + "account_number": "7004" + }, + "Ertr\u00e4ge aus Anteilen an Kap.Ges. (inl\u00e4ndische Beteiligung)": { + "account_number": "7005" + }, + "Ertr\u00e4ge aus Anteilen an Kap.Ges. (inl\u00e4ndische verb. Unternehmen)": { + "account_number": "7006" + }, + "Sonstige GewSt-freie Gewinne aus Anteilen an einer Kap.Ges. (K\u00fcrzung gem. \u00a7 9 Nr. 2a GewStG)": { + "account_number": "7007" + }, + "Gewinnanteile aus Mitunternehmerschaften \u00a7 9 GewStG": { + "account_number": "7008" + }, + "Ertr\u00e4ge aus Beteiligungen an verbundenen Unternehmen": { + "account_number": "7009" + }, + "Zins- und Dividendenertr\u00e4ge": { + "account_number": "7020" + }, + "Erhaltene Ausgleichszahlungen (als au\u00dfenstehender Aktion\u00e4r)": { + "account_number": "7030" + } + }, + "9 - Ertr\u00e4ge aus anderen Wertpapieren und Ausleihungen des Finanzanlageverm\u00f6gens": { + "root_type": "Income", + "is_group": 1, + "Ertr\u00e4ge aus anderen Wertpapieren und Ausleihungen des Finanzanlageverm\u00f6gens": { + "account_number": "7010", + "account_type": "Income Account" + }, + "Ertr\u00e4ge aus Ausleihungen des Finanzanlageverm\u00f6gens": { + "account_number": "7011" + }, + "Ertr\u00e4ge aus Ausleihungen des Finanzanlageverm\u00f6gens an verbundenen Unternehmen": { + "account_number": "7012" + }, + "Ertr\u00e4ge aus Anteilen an Personengesellschaften (Finanzanlageverm\u00f6gen)": { + "account_number": "7013" + }, + "Ertr\u00e4ge aus Anteilen an Kap.Ges. (Finanzanlageverm\u00f6gen, inl\u00e4ndische Kap.Ges.)": { + "account_number": "7014" + }, + "Ertr\u00e4ge aus Anteilen an Personengesellschaften (verb. Unternehmen)": { + "account_number": "7016" + }, + "Ertr\u00e4ge aus anderen Wertpapieren des Finanzanlageverm. an Kap.Ges. (verb. Unternehmen)": { + "account_number": "7017" + }, + "Ertr\u00e4ge aus anderen Wertpapieren des Finanzanlageverm. an Pers.Ges. (verb. Unternehmen)": { + "account_number": "7018" + }, + "Ertr\u00e4ge aus anderen Wertpapieren und Ausleihungen des Finanzanlageverm. aus verbundenen Unternehmen": { + "account_number": "7019" + } + }, + "10 - sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge": { + "root_type": "Income", + "is_group": 1, + "davon aus verbundenen Unternehmen": { + "is_group": 1, + "Diskontertr\u00e4ge aus verbundenen Unternehmen": { + "account_number": "7139" + }, + "Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge aus verbundenen Unternehmen": { + "account_number": "7109" + }, + "Sonstige Zinsertr\u00e4ge aus verbundenen Unternehmen": { + "account_number": "7119", + "account_type": "Income Account" + }, + "Zins\u00e4hnliche Ertr\u00e4ge aus verbundenen Unternehmen": { + "account_number": "7129" + } + }, + "Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge": { + "account_number": "7100", + "account_type": "Income Account" + }, + "Ertr\u00e4ge aus Anteilen an Kap.Ges. (Umlaufverm\u00f6gen, inl\u00e4ndische Kap.Ges.)": { + "account_number": "7103" + }, + "Zinsertr\u00e4ge \u00a7 233a AO steuerpflichtig": { + "account_number": "7105" + }, + "Zinsertr\u00e4ge \u00a7 233a AO, \u00a7 4 Abs. 5b EStG, steuerfrei": { + "account_number": "7107" + }, + "Sonstige Zinsertr\u00e4ge": { + "account_number": "7110" + }, + "Ertr\u00e4ge aus anderen Wertpapieren und Ausleihungen des Umlaufverm.": { + "account_number": "7115" + }, + "Zins\u00e4hnliche Ertr\u00e4ge": { + "account_number": "7120" + }, + "Diskontertr\u00e4ge": { + "account_number": "7130" + }, + "Zinsertr\u00e4ge aus der Abzinsung von Verb.": { + "account_number": "7141" + }, + "Zinsertr\u00e4ge aus der Abzinsung von R\u00fcckstellungen": { + "account_number": "7142" + }, + "Zinsertr\u00e4ge aus der Abzinsung von Pensionsr\u00fcckst. und \u00e4hnl./vergleichb. Verplicht.": { + "account_number": "7143" + }, + "Zinsertr\u00e4ge aus der Abzinsung von Pensionsr\u00fcckst. und \u00e4hnl. Verplicht. zur Verrechnung": { + "account_number": "7144" + }, + "Erhaltene Gewinne auf Grund einer Gewinngemeinschaft": { + "account_number": "7192" + }, + "Erhaltene Gewinne auf Grund einer Gewinn- oder Teilgewinnabf\u00fchrungsvertrags": { + "account_number": "7194" + } + }, + "11 - Abschreibungen auf Finanzanlagen und auf Wertpapiere des Umlaufverm.": { + "root_type": "Expense", + "is_group": 1, + "Abschreibungen auf Finanzanlagen (dauerhaft)": { + "account_number": "7200", + "account_type": "Depreciation" + }, + "Abschreibungen auf Finanzanlagen (nicht dauerhaft)": { + "account_number": "7201" + }, + "Abschreibungen auf Finanzanlagen \u00a7 3 Nr. 40 EStG / \u00a7 8b Abs. 3 KStG (inl. Kap.Ges., dauerh.)": { + "account_number": "7204" + }, + "Abschreibungen auf Finanzanlagen - verb. Unternehmen": { + "account_number": "7207" + }, + "Aufwendungen auf Grund von Verlustanteilen an Mitunternehmerschaften \u00a7 8 GewStG": { + "account_number": "7208" + }, + "Abschreibungen auf Wertpapiere des Umlaufverm. (Gruppe)": { + "is_group": 1, + "Abschreibungen auf Wertpapiere des Umlaufverm.": { + "account_number": "7210" + }, + "Abschreibungen auf Wertpapiere des Umlaufverm. \u00a73Nr.40EStG/\u00a78bAbs.3KStG (inl. Kap.Ges.)": { + "account_number": "7214" + }, + "Abschreibungen auf Wertpapiere des Umlaufverm. - verb. Unternehmen": { + "account_number": "7217" + } + }, + "Abschreibungen auf Finanzanlagen auf Grund \u00a7 6b EStG-R\u00fccklage": { + "account_number": "7250" + }, + "Abschreibungen auf Finanzanlagen auf Grund \u00a7 3Nr.40EStG/\u00a78bAbs.3KStG (inl. Kap.Ges.)": { + "account_number": "7255" + } + }, + "12- Zinsen und \u00e4hnliche Aufwendungen": { + "root_type": "Expense", + "is_group": 1, + "davon an verb. Unternehmen": { + "is_group": 1, + "Zinsen und \u00e4hnliche Aufwendungen an verb. Unternehmen (inl. Kap.Ges.)": { + "account_number": "7351" + }, + "Zinsen und \u00e4hnliche Aufwendungen an verb. Unternehmen": { + "account_number": "7309" + }, + "Zinsaufwendungen f. kurzfistige Verb. an verb. Unternehmen": { + "account_number": "7319" + }, + "Zinsaufwendungen f. langfristigeVerb. an verb. Unternehmen": { + "account_number": "7329" + }, + "Diskontaufwendungen an verb. Unternehmen": { + "account_number": "7349" + } + }, + "Zinsen und \u00e4hnliche Aufwendungen": { + "account_number": "7300" + }, + "Steuerlich nicht abzugsf\u00e4hige andere Nebenleistungen zu Steuern \u00a7 4 Abs. 5b EStG": { + "account_number": "7302" + }, + "Steuerlich abzugsf\u00e4hige, andere Nebenleistungen zu Steuern": { + "account_number": "7303" + }, + "Steuerlich nicht abzugsf\u00e4hige, andere Nebenleistungen zu Steuern": { + "account_number": "7304" + }, + "Zinsaufwendungen \u00a7 233a AO betriebliche Steuern": { + "account_number": "7305" + }, + "Zinsaufwendungen \u00a7\u00a7 233a bis 237 AO Personensteuern": { + "account_number": "7306" + }, + "Zinsaufwendungen \u00a7 233a AO, \u00a7 4 Abs. 5b EStG": { + "account_number": "7308" + }, + "Zinsaufwendungen f. kurzfristige Verb.": { + "account_number": "7310" + }, + "Nicht abzugsf\u00e4hige Schuldzinsen gem\u00e4\u00df \u00a7 4 Abs. 4a EStG (Hinzurechnungsbetrag)": { + "account_number": "7313" + }, + "Zinsen auf Kontokorrentkonten": { + "account_number": "7318" + }, + "Zinsaufwendungen f. langfristige Verb.": { + "account_number": "7320" + }, + "Abschreibungen auf Disagio/Damnum zur Finanzierung": { + "account_number": "7323" + }, + "Abschreibungen auf Disagio/Damnum zur Finanzierung des Anlageverm\u00f6gens": { + "account_number": "7324" + }, + "Zinsaufwendungen f. Geb\u00e4ude, die zum Betriebsverm\u00f6gen geh\u00f6ren": { + "account_number": "7325" + }, + "Zinsen zur Finanzierung des Anlageverm\u00f6gens": { + "account_number": "7326" + }, + "Renten und dauernde Lasten": { + "account_number": "7327" + }, + "Zins\u00e4hnliche Aufwendungen": { + "account_number": "7330" + }, + "Diskontaufwendungen": { + "account_number": "7340" + }, + "Zinsen und \u00e4hnl. Aufwendungen \u00a7\u00a73Nr.40,3cEStG/\u00a78bAbs.1KStG (inl. Kap.Ges.)": { + "account_number": "7350" + }, + "Kreditprovisionen und Verwaltungskostenbeitr\u00e4ge": { + "account_number": "7355" + }, + "Zinsanteil der Zuf\u00fchrungen zu Pensionsr\u00fcckst.": { + "account_number": "7360" + }, + "Zinsaufwendungen aus der Abzinsung von Verb.": { + "account_number": "7361" + }, + "Zinsaufwendungen aus der Abzinsung von R\u00fcckstellungen": { + "account_number": "7362" + }, + "Zinsaufwendungen aus der Abzinsung von Pensionsr\u00fcckst. und \u00e4hnl. Verplicht.": { + "account_number": "7363" + }, + "Zinsaufwendungen aus der Abzinsung von Pensionsr\u00fcckst. und \u00e4hnl. Verplicht. zur Verrechnung": { + "account_number": "7364" + }, + "Aufwendungen aus Verlust\u00fcbernahme": { + "account_number": "7390" + } + }, + "13 - Steuern vom Einkommen und vom Ertrag": { + "root_type": "Expense", + "is_group": 1, + "K\u00f6rperschaftsteuer": { + "account_number": "7600", + "account_type": "Tax" + }, + "Gewerbesteuer": { + "account_number": "7610", + "account_type": "Tax" + }, + "Kapitalertragsteuer 25 %": { + "account_number": "7630" + }, + "Anrechenbarer Solidarit\u00e4tszuschlag auf Kapitalertragsteuer 25 %": { + "account_number": "7633" + }, + "Anzurechnende ausl\u00e4ndische Quellensteuer": { + "account_number": "7639" + }, + "Gewerbesteuernachzahlungen Vorjahre": { + "account_number": "7640" + }, + "Gewerbesteuernachzahlungen und Gewerbesteuererstattungen f. Vorjahre, \u00a7 4 Abs. 5b EStG": { + "account_number": "7641" + }, + "Gewerbesteuererstattungen Vorjahre": { + "account_number": "7642" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung von Gewerbesteuerr\u00fcckstellungen, \u00a7 4 Abs. 5b EStG": { + "account_number": "7643" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung von Gewerbesteuerr\u00fcckstellungen": { + "account_number": "7644" + }, + "Aufwendungen aus der Zuf\u00fchrung und Aufl\u00f6sung von latenten Steuern": { + "account_number": "7645" + }, + "Ertr\u00e4ge aus der Zuf\u00fchrung und Aufl\u00f6sung von latenten Steuern": { + "account_number": "7649" + } + }, + "15 - sonstige Steuern": { + "root_type": "Expense", + "is_group": 1, + "Verbrauchsteuer": { + "account_number": "7675" + }, + "\u00d6kosteuer": { + "account_number": "7678" + }, + "Grundsteuer": { + "account_number": "7680" + }, + "Kfz-Steuer": { + "account_number": "7685" + }, + "Steuernachzahlungen Vorjahre f. sonstige Steuern": { + "account_number": "7690" + }, + "Steuererstattungen Vorjahre f. sonstige Steuern": { + "account_number": "7692" + }, + "Ertr\u00e4ge aus der Aufl\u00f6sung von R\u00fcckstellungen f. sonstige Steuern": { + "account_number": "7694" + } + }, + "Debitoren" : { + "root_type": "Asset", + "is_group": 1 + }, + "Kreditoren" : { + "root_type": "Liability", + "is_group": 1 + } + } +} From 6f54a7b7d88b48ba965218f43c511e12540f28c8 Mon Sep 17 00:00:00 2001 From: Sun Howwrongbum Date: Fri, 19 Apr 2019 01:44:35 +0530 Subject: [PATCH 23/56] fix: scan_barcode field adding invalid items --- erpnext/public/js/controllers/transaction.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 168a727f270..ec4e4b7b83b 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -290,7 +290,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ args: { search_value: this.frm.doc.scan_barcode } }).then(r => { const data = r && r.message; - if (!data) { + if (!data || Object.keys(data).length === 0) { scan_barcode_field.set_new_description(__('Cannot find Item with this barcode')); return; } From 00303858df2729078b201f19160bd28dba947baa Mon Sep 17 00:00:00 2001 From: Raffael Meyer Date: Fri, 19 Apr 2019 00:09:37 +0200 Subject: [PATCH 24/56] fix missing account types --- ..._kontenplan_SKR04_with_account_number.json | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json index b0f06911cd3..b042bcc4204 100644 --- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json @@ -795,6 +795,7 @@ }, "Kasse (Gruppe)": { "is_group": 1, + "account_type": "Cash", "Kasse": { "account_number": "1600", "account_type": "Cash" @@ -840,6 +841,7 @@ }, "Bank (Gruppe)": { "is_group": 1, + "account_type": "Bank", "Bank": { "account_number": "1800", "account_type": "Bank" @@ -1822,9 +1824,14 @@ "2 - Herstellungskosten der zur Erzielung der Umsatzerl\u00f6se erbrachten Leistungen": { "root_type": "Expense", "is_group": 1, - "Herstellungskosten": { - "account_number": "6990", - "account_type": "Cost of Goods Sold" + "Herstellungskosten (Gruppe)": { + "Herstellungskosten": { + "account_number": "6990", + "account_type": "Cost of Goods Sold" + }, + "Herstellungskosten: Schwund": { + "account_type": "Stock Adjustment" + } }, "Aufwendungen f. Roh-, Hilfs- und Betriebsstoffe und f. bezogene Waren": { "account_number": "5000", @@ -3603,13 +3610,17 @@ "account_number": "7694" } }, - "Debitoren" : { + "Debitoren": { "root_type": "Asset", "is_group": 1 }, - "Kreditoren" : { + "Kreditoren": { "root_type": "Liability", - "is_group": 1 + "is_group": 1, + "Wareneingangs-­Verrechnungskonto" : { + "account_number": "70001", + "account_type": "Stock Received But Not Billed" + } } } } From df16cdcf3192bec8af453a0fb0cad5060218d9d3 Mon Sep 17 00:00:00 2001 From: Raffael Meyer Date: Fri, 19 Apr 2019 00:21:44 +0200 Subject: [PATCH 25/56] fix(test): provide a helpful error message --- erpnext/setup/doctype/company/test_company.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/erpnext/setup/doctype/company/test_company.py b/erpnext/setup/doctype/company/test_company.py index 1b08a228b6c..8debef5ff69 100644 --- a/erpnext/setup/doctype/company/test_company.py +++ b/erpnext/setup/doctype/company/test_company.py @@ -4,6 +4,8 @@ from __future__ import unicode_literals import frappe import unittest +import json +from frappe import _ from frappe.utils import random_string from erpnext.accounts.doctype.account.chart_of_accounts.chart_of_accounts import get_charts_for_country @@ -78,7 +80,10 @@ class TestCompany(unittest.TestCase): if account_type in ["Bank", "Cash"]: filters["is_group"] = 1 - self.assertTrue(frappe.get_all("Account", filters)) + has_matching_accounts = frappe.get_all("Account", filters) + error_message = _("No Account matched these filters: {}".format(json.dumps(filters))) + + self.assertTrue(has_matching_accounts, msg=error_message) finally: self.delete_mode_of_payment(template) frappe.delete_doc("Company", template) From e85c6ad236b2acb9279862f9caddf1c672a6bac8 Mon Sep 17 00:00:00 2001 From: Prasad R Date: Fri, 19 Apr 2019 10:57:21 +0530 Subject: [PATCH 26/56] fix: Allow system manager to access share ledger --- erpnext/accounts/report/share_ledger/share_ledger.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/report/share_ledger/share_ledger.json b/erpnext/accounts/report/share_ledger/share_ledger.json index d374bb7747c..fe158a6f003 100644 --- a/erpnext/accounts/report/share_ledger/share_ledger.json +++ b/erpnext/accounts/report/share_ledger/share_ledger.json @@ -1,23 +1,27 @@ { "add_total_row": 0, - "apply_user_permissions": 1, "creation": "2017-12-27 16:15:52.615453", + "disable_prepared_report": 0, "disabled": 0, "docstatus": 0, "doctype": "Report", "idx": 0, "is_standard": "Yes", - "modified": "2017-12-27 16:46:54.422356", + "modified": "2019-04-19 10:50:36.061588", "modified_by": "Administrator", "module": "Accounts", "name": "Share Ledger", "owner": "Administrator", + "prepared_report": 0, "ref_doctype": "Share Transfer", "report_name": "Share Ledger", "report_type": "Script Report", "roles": [ { "role": "Administrator" + }, + { + "role": "System Manager" } ] } \ No newline at end of file From ce291c253bbbb8dfbfc47579527ffb618cedea2c Mon Sep 17 00:00:00 2001 From: Prasad R Date: Fri, 19 Apr 2019 12:17:19 +0530 Subject: [PATCH 27/56] fix: show 2 missing doctypes in Accounts Pricing Term and Exchage Rate Revaluation were missing, added in list --- erpnext/config/accounts.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py index 31366b4f1b7..cd4edd8ccd6 100644 --- a/erpnext/config/accounts.py +++ b/erpnext/config/accounts.py @@ -27,6 +27,11 @@ def get_data(): "type": "doctype", "name": "Payment Entry", "description": _("Bank/Cash transactions against party or for internal transfer") + }, + { + "type": "doctype", + "name": "Payment Term", + "description": _("Payment Terms based on conditions") } ] @@ -284,6 +289,11 @@ def get_data(): "name": "Currency Exchange", "description": _("Currency exchange rate master.") }, + { + "type": "doctype", + "name": "Exchange Rate Revaluation", + "description": _("Exchange Rate Revaluation master.") + }, { "type": "doctype", "name": "Payment Gateway Account", From e86d21ea15a8e8da150c8ea2e933917dfe2e2c7b Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Fri, 19 Apr 2019 10:09:06 +0200 Subject: [PATCH 28/56] Py3 and matching corrections --- .../bank_transaction/bank_transaction.py | 1 + .../bank_transaction_upload.py | 7 +++--- .../bank_reconciliation.js | 1 - .../bank_reconciliation.py | 24 ++++++++++++------- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py index d8b5f00f6ee..0050ffc9df2 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document from frappe.utils import flt +from six.moves import reduce class BankTransaction(Document): def after_insert(self): diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction_upload.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction_upload.py index d5d8c0e0465..8dd8d286729 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction_upload.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction_upload.py @@ -7,6 +7,7 @@ import frappe import json from frappe.utils import getdate from frappe.utils.dateutils import parse_date +from six import iteritems @frappe.whitelist() def upload_bank_statement(): @@ -17,11 +18,11 @@ def upload_bank_statement(): from frappe.utils.file_manager import get_uploaded_content fname, fcontent = get_uploaded_content() - if frappe.safe_encode(fname).lower().endswith("csv"): + if frappe.safe_encode(fname).lower().endswith("csv".encode('utf-8')): from frappe.utils.csvutils import read_csv_content rows = read_csv_content(fcontent, False) - elif frappe.safe_encode(fname).lower().endswith("xlsx"): + elif frappe.safe_encode(fname).lower().endswith("xlsx".encode('utf-8')): from frappe.utils.xlsxutils import read_xlsx_file_from_attached_file rows = read_xlsx_file_from_attached_file(fcontent=fcontent) @@ -40,7 +41,7 @@ def create_bank_entries(columns, data, bank_account): if all(item is None for item in d) is True: continue fields = {} - for key, value in header_map.iteritems(): + for key, value in iteritems(header_map): fields.update({key: d[int(value)-1]}) diff --git a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.js b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.js index 5cb4bba6a55..c64e28fc218 100644 --- a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.js +++ b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.js @@ -32,7 +32,6 @@ erpnext.accounts.bankReconciliation = class BankReconciliation { fieldname: 'company', options: "Company", onchange: function() { - console.log(this.value) if (this.value) { me.company = this.value; } else { diff --git a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py index e39cf9ea950..1f96bade762 100644 --- a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py +++ b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py @@ -83,7 +83,7 @@ def get_linked_payments(bank_transaction): amount_matching = check_matching_amount(bank_account[0].account, bank_account[0].company, transaction) # Get some data from payment entries linked to a corresponding bank transaction - description_matching = get_matching_descriptions_data(bank_account[0].account, transaction) + description_matching = get_matching_descriptions_data(bank_account[0].company, transaction) if amount_matching: return check_amount_vs_description(amount_matching, description_matching) @@ -207,7 +207,7 @@ def check_matching_amount(bank_account, company, transaction): return payments -def get_matching_descriptions_data(bank_account, transaction): +def get_matching_descriptions_data(company, transaction): if not transaction.description : return [] @@ -243,17 +243,23 @@ def get_matching_descriptions_data(bank_account, transaction): data = [] + company_currency = get_company_currency(company) for key, value in iteritems(links): if key == "Payment Entry": - data.extend(frappe.get_all("Payment Entry", filters=[["name", "in", value]], fields=["'Payment Entry' as doctype", "posting_date", "party", "reference_no", "reference_date", "paid_amount"])) + data.extend(frappe.get_all("Payment Entry", filters=[["name", "in", value]], fields=["'Payment Entry' as doctype", "posting_date", "party", "reference_no", "reference_date", "paid_amount", "paid_to_account_currency as currency"])) if key == "Journal Entry": - data.extend(frappe.get_all("Journal Entry", filters=[["name", "in", value]], fields=["'Journal Entry' as doctype", "posting_date", "paid_to_recd_from as party", "cheque_no as reference_no", "cheque_date as reference_date"])) + journal_entries = frappe.get_all("Journal Entry", filters=[["name", "in", value]], fields=["name", "'Journal Entry' as doctype", "posting_date", "paid_to_recd_from as party", "cheque_no as reference_no", "cheque_date as reference_date", "total_credit as paid_amount"]) + for journal_entry in journal_entries: + journal_entry_accounts = frappe.get_all("Journal Entry Account", filters={"parenttype": journal_entry["doctype"], "parent": journal_entry["name"]}, fields=["account_currency"]) + journal_entry["currency"] = journal_entry_accounts[0]["account_currency"] if journal_entry_accounts else company_currency + data.extend(journal_entries) if key == "Sales Invoice": - data.extend(frappe.get_all("Sales Invoice", filters=[["name", "in", value]], fields=["'Sales Invoice' as doctype", "posting_date", "customer_name as party"])) + data.extend(frappe.get_all("Sales Invoice", filters=[["name", "in", value]], fields=["'Sales Invoice' as doctype", "posting_date", "customer_name as party", "paid_amount", "currency"])) if key == "Purchase Invoice": - data.append(frappe.get_all("Purchase Invoice", filters=[["name", "in", value]], fields=["'Purchase Invoice' as doctype", "posting_date", "supplier_name as party"])) - if key == "Purchase Invoice": - data.append(frappe.get_all("Expense Claim", filters=[["name", "in", value]], fields=["'Expense Claim' as doctype", "posting_date", "employee_name as party"])) + data.extend(frappe.get_all("Purchase Invoice", filters=[["name", "in", value]], fields=["'Purchase Invoice' as doctype", "posting_date", "supplier_name as party", "paid_amount", "currency"])) + if key == "Expense Claim": + expense_claims = frappe.get_all("Expense Claim", filters=[["name", "in", value]], fields=["'Expense Claim' as doctype", "posting_date", "employee_name as party", "total_amount_reimbursed as paid_amount"]) + data.extend([dict(x,**{"currency": company_currency}) for x in expense_claims]) return data @@ -269,7 +275,7 @@ def check_amount_vs_description(amount_matching, description_matching): continue if hasattr(am_match, "reference_no") and hasattr(des_match, "reference_no"): - if difflib.SequenceMatcher(lambda x: x == " ", am_match["reference_no"], des_match["reference_no"]) > 70: + if difflib.SequenceMatcher(lambda x: x == " ", am_match["reference_no"], des_match["reference_no"]).ratio() > 70: if am_match not in result: result.append(am_match) if result: From d36e635e60661400dcd28c082f76704e63bc28d5 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 18 Apr 2019 19:03:30 +0530 Subject: [PATCH 29/56] fix: Requested Items To Be Ordered report showing records even if material request is fully ordered --- .../requested_items_to_be_ordered.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.json b/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.json index f351f3b5735..55786ae4ccc 100644 --- a/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.json +++ b/erpnext/buying/report/requested_items_to_be_ordered/requested_items_to_be_ordered.json @@ -1,18 +1,19 @@ { "add_total_row": 1, - "apply_user_permissions": 1, "creation": "2013-05-13 16:10:02", + "disable_prepared_report": 0, "disabled": 0, "docstatus": 0, "doctype": "Report", "idx": 3, "is_standard": "Yes", - "modified": "2017-02-24 20:10:53.005589", + "modified": "2019-04-19 14:54:49.123836", "modified_by": "Administrator", "module": "Buying", "name": "Requested Items To Be Ordered", "owner": "Administrator", - "query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tsum(ifnull(mr_item.qty, 0)) as \"Qty:Float:100\",\n\tsum(ifnull(mr_item.ordered_qty, 0)) as \"Ordered Qty:Float:100\", \n\t(sum(mr_item.qty) - sum(ifnull(mr_item.ordered_qty, 0))) as \"Qty to Order:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\",\n\tmr.company as \"Company:Link/Company:\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Purchase\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\ngroup by mr.name, mr_item.item_code\nhaving\n\tsum(ifnull(mr_item.ordered_qty, 0)) < sum(ifnull(mr_item.qty, 0))\norder by mr.transaction_date asc", + "prepared_report": 0, + "query": "select \n mr.name as \"Material Request:Link/Material Request:120\",\n\tmr.transaction_date as \"Date:Date:100\",\n\tmr_item.item_code as \"Item Code:Link/Item:120\",\n\tsum(ifnull(mr_item.stock_qty, 0)) as \"Qty:Float:100\",\n\tifnull(mr_item.stock_uom, '') as \"UOM:Link/UOM:100\",\n\tsum(ifnull(mr_item.ordered_qty, 0)) as \"Ordered Qty:Float:100\", \n\t(sum(mr_item.stock_qty) - sum(ifnull(mr_item.ordered_qty, 0))) as \"Qty to Order:Float:100\",\n\tmr_item.item_name as \"Item Name::150\",\n\tmr_item.description as \"Description::200\",\n\tmr.company as \"Company:Link/Company:\"\nfrom\n\t`tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere\n\tmr_item.parent = mr.name\n\tand mr.material_request_type = \"Purchase\"\n\tand mr.docstatus = 1\n\tand mr.status != \"Stopped\"\ngroup by mr.name, mr_item.item_code\nhaving\n\tsum(ifnull(mr_item.ordered_qty, 0)) < sum(ifnull(mr_item.stock_qty, 0))\norder by mr.transaction_date asc", "ref_doctype": "Purchase Order", "report_name": "Requested Items To Be Ordered", "report_type": "Query Report", From 4f2fa173c900125970b1b3adacf233d9179b7a3e Mon Sep 17 00:00:00 2001 From: Anurag Mishra <32095923+Anurag810@users.noreply.github.com> Date: Fri, 19 Apr 2019 16:06:17 +0530 Subject: [PATCH 30/56] fix: Reopen button does not appear in delivery note (#17295) --- erpnext/stock/doctype/delivery_note/delivery_note.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js index 41e65d0497e..e8224eb458f 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.js +++ b/erpnext/stock/doctype/delivery_note/delivery_note.js @@ -101,8 +101,7 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend( refresh: function(doc, dt, dn) { var me = this; this._super(); - - if ((!doc.is_return) && (doc.status!="Closed" || doc.is_new())) { + if ((!doc.is_return) && (doc.status!="Closed" || this.frm.is_new())) { if (this.frm.doc.docstatus===0) { this.frm.add_custom_button(__('Sales Order'), function() { From 3dbaa3c2d9dfc30205f378c1db69afcd09d845f2 Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Fri, 19 Apr 2019 16:31:23 +0530 Subject: [PATCH 31/56] fix(site_sync): return more data in level --- erpnext/utilities/activation.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/erpnext/utilities/activation.py b/erpnext/utilities/activation.py index 16391e073e2..8e59bdc966b 100644 --- a/erpnext/utilities/activation.py +++ b/erpnext/utilities/activation.py @@ -48,7 +48,27 @@ def get_level(): if frappe.db.sql('select name from tabUser where last_login > date_sub(now(), interval 2 day) limit 1'): activation_level += 1 - return activation_level + level = {"activation_level": 10, "sales_data": [ + {"Item": frappe.db.count('Item')}, + {"Sales Order": frappe.db.count('Sales Order')}, + {"Purchase Order": frappe.db.count('Purchase Order')}, + {"Employee": frappe.db.count('Employee')}, + {"Lead": frappe.db.count('Lead')}, + {"Payment Entry": frappe.db.count('Payment Entry')}, + {"Communication": frappe.db.count('Communication')}, + {"User": frappe.db.count('User')}, + {"Student": frappe.db.count('Student')}, + {"Instructor": frappe.db.count('Instructor')}, + {"Sales Invoice": frappe.db.count('Sales Invoice')}, + {"BOM": frappe.db.count('BOM')}, + {"Quotation": frappe.db.count('Quotation')}, + {"Lead": frappe.db.count('Lead')}, + {"Payment Entry": frappe.db.count('Payment Entry')}, + {"Journal Entry": frappe.db.count('Journal Entry')}, + {"Stock Entry": frappe.db.count('Stock Entry')}, + ]} + + return level def get_help_messages(): '''Returns help messages to be shown on Desktop''' From d08953b72b8d8bb14e5b4636b290c92d6514cb25 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Fri, 19 Apr 2019 21:52:08 +0530 Subject: [PATCH 32/56] fix: Do not create employee user permission if already exists --- erpnext/hr/doctype/employee/employee.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py index d518cd89957..1fc51690c3a 100755 --- a/erpnext/hr/doctype/employee/employee.py +++ b/erpnext/hr/doctype/employee/employee.py @@ -80,6 +80,14 @@ class Employee(NestedSet): if not self.create_user_permission: return if not has_permission('User Permission', ptype='write'): return + employee_user_permission_exists = frappe.db.exists('User Permission', { + 'allow': 'Employee', + 'for_value': self.name, + 'user': self.user_id + }) + + if employee_user_permission_exists: return + add_user_permission("Employee", self.name, self.user_id) set_user_permission_if_allowed("Company", self.company, self.user_id) From dfba52b834b26773c440c03bb1410c5214172702 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 20 Apr 2019 10:57:04 +0530 Subject: [PATCH 33/56] fix: Total row alignment in AR report --- .../report/accounts_receivable/accounts_receivable.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.html b/erpnext/accounts/report/accounts_receivable/accounts_receivable.html index 5ce80d1baf3..1bff93cb77e 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.html @@ -107,8 +107,8 @@ {% if(report.report_name === "Accounts Receivable" || report.report_name === "Accounts Payable") { %} - {%= __("Date") %} - {%= __("Age (Days)") %} + {%= __("Date") %} + {%= __("Age (Days)") %} {% if(report.report_name === "Accounts Receivable" && filters.show_sales_person_in_print) { %} {%= __("Reference") %} @@ -206,7 +206,7 @@ {% if(!filters.show_pdc_in_print) { %} {% } %} - {% if(report.report_name === "Accounts Receivable") { %} + {% if(report.report_name === "Accounts Receivable" && filters.show_sales_person_in_print) { %} {% } %} From 4e81fb20b9a8a3997b735440e2fea5ca6b3eb162 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Sat, 20 Apr 2019 11:50:45 +0530 Subject: [PATCH 34/56] fix: Move erpnext related methods from frappe to erpnext (#17293) --- erpnext/crm/doctype/lead/lead.py | 27 +++++++++++++++++++ .../crm/doctype/opportunity/opportunity.py | 22 +++++++++++++++ erpnext/public/js/communication.js | 6 ++--- erpnext/support/doctype/issue/issue.py | 18 +++++++++++++ 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index 29ca71bd88e..2fa6b68ee20 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -10,6 +10,7 @@ from frappe.model.mapper import get_mapped_doc from erpnext.controllers.selling_controller import SellingController from frappe.contacts.address_and_contact import load_address_and_contact from erpnext.accounts.party import set_taxes +from frappe.email.inbox import link_communication_to_document sender_field = "email_id" @@ -199,3 +200,29 @@ def get_lead_details(lead, posting_date=None, company=None): out['taxes_and_charges'] = taxes_and_charges return out + +@frappe.whitelist() +def make_lead_from_communication(communication, ignore_communication_links=False): + """ raise a issue from email """ + + doc = frappe.get_doc("Communication", communication) + lead_name = None + if doc.sender: + lead_name = frappe.db.get_value("Lead", {"email_id": doc.sender}) + if not lead_name and doc.phone_no: + lead_name = frappe.db.get_value("Lead", {"mobile_no": doc.phone_no}) + if not lead_name: + lead = frappe.get_doc({ + "doctype": "Lead", + "lead_name": doc.sender_full_name, + "email_id": doc.sender, + "mobile_no": doc.phone_no + }) + lead.flags.ignore_mandatory = True + lead.flags.ignore_permissions = True + lead.insert() + + lead_name = lead.name + + link_communication_to_document(doc, "Lead", lead_name, ignore_communication_links) + return lead_name \ No newline at end of file diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py index e8da4e6436b..c5aae9cd5f3 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.py +++ b/erpnext/crm/doctype/opportunity/opportunity.py @@ -9,6 +9,7 @@ from frappe.model.mapper import get_mapped_doc from erpnext.setup.utils import get_exchange_rate from erpnext.utilities.transaction_base import TransactionBase from erpnext.accounts.party import get_party_account_currency +from frappe.email.inbox import link_communication_to_document subject_field = "title" sender_field = "contact_email" @@ -321,3 +322,24 @@ def auto_close_opportunity(): doc.flags.ignore_permissions = True doc.flags.ignore_mandatory = True doc.save() + +@frappe.whitelist() +def make_opportunity_from_communication(communication, ignore_communication_links=False): + from erpnext.crm.doctype.lead.lead import make_lead_from_communication + doc = frappe.get_doc("Communication", communication) + + lead = doc.reference_name if doc.reference_doctype == "Lead" else None + if not lead: + lead = make_lead_from_communication(communication, ignore_communication_links=True) + + enquiry_from = "Lead" + + opportunity = frappe.get_doc({ + "doctype": "Opportunity", + "enquiry_from": enquiry_from, + "lead": lead + }).insert(ignore_permissions=True) + + link_communication_to_document(doc, "Opportunity", opportunity.name, ignore_communication_links) + + return opportunity.name diff --git a/erpnext/public/js/communication.js b/erpnext/public/js/communication.js index e85107e77aa..02357ef086c 100644 --- a/erpnext/public/js/communication.js +++ b/erpnext/public/js/communication.js @@ -33,7 +33,7 @@ frappe.ui.form.on("Communication", { make_lead_from_communication: (frm) => { return frappe.call({ - method: "frappe.email.inbox.make_lead_from_communication", + method: "erpnext.crm.doctype.lead.lead.make_lead_from_communication", args: { communication: frm.doc.name }, @@ -48,7 +48,7 @@ frappe.ui.form.on("Communication", { make_issue_from_communication: (frm) => { return frappe.call({ - method: "frappe.email.inbox.make_issue_from_communication", + method: "erpnext.support.doctype.issue.issue.make_issue_from_communication", args: { communication: frm.doc.name }, @@ -63,7 +63,7 @@ frappe.ui.form.on("Communication", { make_opportunity_from_communication: (frm) => { return frappe.call({ - method: "frappe.email.inbox.make_opportunity_from_communication", + method: "erpnext.crm.doctype.opportunity.opportunity.make_opportunity_from_communication", args: { communication: frm.doc.name }, diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py index 0b5eb539c8d..2e74b997f61 100644 --- a/erpnext/support/doctype/issue/issue.py +++ b/erpnext/support/doctype/issue/issue.py @@ -9,6 +9,7 @@ from frappe import _ from frappe.model.document import Document from frappe.utils import now from frappe.utils.user import is_website_user +from frappe.email.inbox import link_communication_to_document sender_field = "raised_by" @@ -160,3 +161,20 @@ def has_website_permission(doc, ptype, user, verbose=False): def update_issue(contact, method): """Called when Contact is deleted""" frappe.db.sql("""UPDATE `tabIssue` set contact='' where contact=%s""", contact.name) + +@frappe.whitelist() +def make_issue_from_communication(communication, ignore_communication_links=False): + """ raise a issue from email """ + + doc = frappe.get_doc("Communication", communication) + issue = frappe.get_doc({ + "doctype": "Issue", + "subject": doc.subject, + "communication_medium": doc.communication_medium, + "raised_by": doc.sender or "", + "raised_by_phone": doc.phone_no or "" + }).insert(ignore_permissions=True) + + link_communication_to_document(doc, "Issue", issue.name, ignore_communication_links) + + return issue.name \ No newline at end of file From 3889d0f0a0628e64e499d3840175b3ec9b6e0826 Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Sat, 20 Apr 2019 14:26:49 +0530 Subject: [PATCH 35/56] fix: refactor level --- erpnext/utilities/activation.py | 64 ++++++++------------------------- 1 file changed, 14 insertions(+), 50 deletions(-) diff --git a/erpnext/utilities/activation.py b/erpnext/utilities/activation.py index 8e59bdc966b..ea1b0ea3a6a 100644 --- a/erpnext/utilities/activation.py +++ b/erpnext/utilities/activation.py @@ -7,66 +7,30 @@ import frappe, erpnext from frappe import _ def get_level(): + activation_level = 0 + sales_data = [] + doctypes = {"Item": 5, "Customer": 5, "Sales Order": 2, "Sales Invoice": 2, "Purchase Order": 2, "Employee": 3, "Lead": 3, "Quotation": 3 + "Payment Entry": 2, "User": 5, "Student": 5, "Instructor": 5, "BOM": 3, "Journal Entry": 3, "Stock Entry": 3} + for doctype, min_count in iteritems(doctypes): + count = frappe.db.count(doctype) + if count > min_count: + activation_level += 1 + sales_data.append({doctype: count}) + if frappe.db.get_single_value('System Settings', 'setup_complete'): - activation_level = 1 - - if frappe.db.count('Item') > 5: activation_level += 1 - if frappe.db.count('Customer') > 5: - activation_level += 1 - - if frappe.db.count('Sales Order') > 2: - activation_level += 1 - - if frappe.db.count('Purchase Order') > 2: - activation_level += 1 - - if frappe.db.count('Employee') > 3: - activation_level += 1 - - if frappe.db.count('Lead') > 3: - activation_level += 1 - - if frappe.db.count('Payment Entry') > 2: - activation_level += 1 - - if frappe.db.count('Communication', dict(communication_medium='Email')) > 10: - activation_level += 1 - - if frappe.db.count('User') > 5: - activation_level += 1 - - if frappe.db.count('Student') > 5: - activation_level += 1 - - if frappe.db.count('Instructor') > 5: + communication_number = frappe.db.count('Communication', dict(communication_medium='Email')) + if communication_number > 10: activation_level += 1 + sales_data.append({"Communication": communication_number}) # recent login if frappe.db.sql('select name from tabUser where last_login > date_sub(now(), interval 2 day) limit 1'): activation_level += 1 - level = {"activation_level": 10, "sales_data": [ - {"Item": frappe.db.count('Item')}, - {"Sales Order": frappe.db.count('Sales Order')}, - {"Purchase Order": frappe.db.count('Purchase Order')}, - {"Employee": frappe.db.count('Employee')}, - {"Lead": frappe.db.count('Lead')}, - {"Payment Entry": frappe.db.count('Payment Entry')}, - {"Communication": frappe.db.count('Communication')}, - {"User": frappe.db.count('User')}, - {"Student": frappe.db.count('Student')}, - {"Instructor": frappe.db.count('Instructor')}, - {"Sales Invoice": frappe.db.count('Sales Invoice')}, - {"BOM": frappe.db.count('BOM')}, - {"Quotation": frappe.db.count('Quotation')}, - {"Lead": frappe.db.count('Lead')}, - {"Payment Entry": frappe.db.count('Payment Entry')}, - {"Journal Entry": frappe.db.count('Journal Entry')}, - {"Stock Entry": frappe.db.count('Stock Entry')}, - ]} + level = {"activation_level": activation_level, "sales_data": sales_data} return level From a26e2c064a70971e6bfee9d9ac5ad432427c3314 Mon Sep 17 00:00:00 2001 From: Don-Leopardo <46027152+Don-Leopardo@users.noreply.github.com> Date: Sat, 20 Apr 2019 12:42:23 -0300 Subject: [PATCH 36/56] fix: Campaign Efficiency report only works in english (#17284) * fix column translation and match * fix float results * fix import missing --- .../campaign_efficiency.py | 88 ++++++++++++++----- 1 file changed, 67 insertions(+), 21 deletions(-) diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py index b20fe15ce27..52b848ed504 100644 --- a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py @@ -4,24 +4,70 @@ from __future__ import unicode_literals import frappe from frappe import _ +from frappe.utils import flt def execute(filters=None): columns, data = [], [] - columns=get_columns() - data=get_lead_data(filters, "Campaign Name") + columns=get_columns("Campaign Name") + data=get_lead_data(filters or {}, "Campaign Name") return columns, data -def get_columns(): +def get_columns(based_on): return [ - _("Campaign Name") + ":data:130", - _("Lead Count") + ":Int:80", - _("Opp Count") + ":Int:80", - _("Quot Count") + ":Int:80", - _("Order Count") + ":Int:100", - _("Order Value") + ":Float:100", - _("Opp/Lead %") + ":Float:100", - _("Quot/Lead %") + ":Float:100", - _("Order/Quot %") + ":Float:100" + { + "fieldname": frappe.scrub(based_on), + "label": _(based_on), + "fieldtype": "Data", + "width": 150 + }, + { + "fieldname": "lead_count", + "label": _("Lead Count"), + "fieldtype": "Int", + "width": 80 + }, + { + "fieldname": "opp_count", + "label": _("Opp Count"), + "fieldtype": "Int", + "width": 80 + }, + { + "fieldname": "quot_count", + "label": _("Quot Count"), + "fieldtype": "Int", + "width": 80 + }, + { + "fieldname": "order_count", + "label": _("Order Count"), + "fieldtype": "Int", + "width": 100 + }, + { + "fieldname": "order_value", + "label": _("Order Value"), + "fieldtype": "Float", + "width": 100 + }, + { + "fieldname": "opp_lead", + "label": _("Opp/Lead %"), + "fieldtype": "Float", + "width": 100 + }, + { + "fieldname": "quot_lead", + "label": _("Quot/Lead %"), + "fieldtype": "Float", + "width": 100 + }, + { + "fieldname": "order_quot", + "label": _("Order/Quot %"), + "fieldtype": "Float", + "width": 100 + } ] def get_lead_data(filters, based_on): @@ -41,18 +87,18 @@ def get_lead_data(filters, based_on): data = [] for based_on_value, leads in lead_map.items(): row = { - based_on: based_on_value, - "Lead Count": len(leads) + based_on_field: based_on_value, + "lead_count": len(leads) } - row["Quot Count"]= get_lead_quotation_count(leads) - row["Opp Count"] = get_lead_opp_count(leads) - row["Order Count"] = get_quotation_ordered_count(leads) - row["Order Value"] = get_order_amount(leads) + row["quot_count"]= get_lead_quotation_count(leads) + row["opp_count"] = get_lead_opp_count(leads) + row["order_count"] = get_quotation_ordered_count(leads) + row["order_value"] = get_order_amount(leads) or 0 - row["Opp/Lead %"] = row["Opp Count"] / row["Lead Count"] * 100 - row["Quot/Lead %"] = row["Quot Count"] / row["Lead Count"] * 100 + row["opp_lead"] = flt(row["opp_count"]) / flt(row["lead_count"] or 1.0) * 100.0 + row["quot_lead"] = flt(row["quot_count"]) / flt(row["lead_count"] or 1.0) * 100.0 - row["Order/Quot %"] = row["Order Count"] / (row["Quot Count"] or 1) * 100 + row["order_quot"] = flt(row["order_count"]) / flt(row["quot_count"] or 1.0) * 100.0 data.append(row) From c4a670c8c88807db0929298e9d33f244fa37ff17 Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira <33246109+kennethsequeira@users.noreply.github.com> Date: Sat, 20 Apr 2019 21:44:38 +0530 Subject: [PATCH 37/56] add salutation in contact display for lead (#17312) --- erpnext/crm/doctype/lead/lead.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index 2fa6b68ee20..687caaaad83 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -186,7 +186,7 @@ def get_lead_details(lead, posting_date=None, company=None): out.update({ "territory": lead.territory, "customer_name": lead.company_name or lead.lead_name, - "contact_display": lead.lead_name, + "contact_display": " ".join(filter(None, [lead.salutation, lead.lead_name])), "contact_email": lead.email_id, "contact_mobile": lead.mobile_no, "contact_phone": lead.phone, From cb4b86512dc28386bcd76fb1e7c8dda65722d0cc Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Mon, 22 Apr 2019 10:10:50 +0530 Subject: [PATCH 38/56] fix: syntax error --- erpnext/utilities/activation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/utilities/activation.py b/erpnext/utilities/activation.py index ea1b0ea3a6a..e617cbaada0 100644 --- a/erpnext/utilities/activation.py +++ b/erpnext/utilities/activation.py @@ -10,7 +10,7 @@ def get_level(): activation_level = 0 sales_data = [] - doctypes = {"Item": 5, "Customer": 5, "Sales Order": 2, "Sales Invoice": 2, "Purchase Order": 2, "Employee": 3, "Lead": 3, "Quotation": 3 + doctypes = {"Item": 5, "Customer": 5, "Sales Order": 2, "Sales Invoice": 2, "Purchase Order": 2, "Employee": 3, "Lead": 3, "Quotation": 3, "Payment Entry": 2, "User": 5, "Student": 5, "Instructor": 5, "BOM": 3, "Journal Entry": 3, "Stock Entry": 3} for doctype, min_count in iteritems(doctypes): count = frappe.db.count(doctype) From afb59fa5c084b1e3238f8442779e9f1d0761aab0 Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Mon, 22 Apr 2019 10:47:37 +0530 Subject: [PATCH 39/56] fix: import iteritems --- erpnext/utilities/activation.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/utilities/activation.py b/erpnext/utilities/activation.py index e617cbaada0..d6e7c9ea458 100644 --- a/erpnext/utilities/activation.py +++ b/erpnext/utilities/activation.py @@ -5,11 +5,13 @@ from __future__ import unicode_literals import frappe, erpnext from frappe import _ +from six import iteritems def get_level(): activation_level = 0 sales_data = [] + min_count = 0 doctypes = {"Item": 5, "Customer": 5, "Sales Order": 2, "Sales Invoice": 2, "Purchase Order": 2, "Employee": 3, "Lead": 3, "Quotation": 3, "Payment Entry": 2, "User": 5, "Student": 5, "Instructor": 5, "BOM": 3, "Journal Entry": 3, "Stock Entry": 3} for doctype, min_count in iteritems(doctypes): From 010a05df4831d2ffc0f8e9e7e4eb424a284219a2 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Apr 2019 11:16:47 +0530 Subject: [PATCH 40/56] Update set_salary_details_submitable.py --- .../patches/v11_1/set_salary_details_submitable.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/erpnext/patches/v11_1/set_salary_details_submitable.py b/erpnext/patches/v11_1/set_salary_details_submitable.py index 36e78792ecb..f4477d9fd6d 100644 --- a/erpnext/patches/v11_1/set_salary_details_submitable.py +++ b/erpnext/patches/v11_1/set_salary_details_submitable.py @@ -1,12 +1,11 @@ from __future__ import unicode_literals import frappe -import itertools def execute(): - salary_structure = frappe.get_all("Salary Structure", filters={"docstatus": 1}, as_list=1) - salary_structure = list(itertools.chain(*salary_structure)) - salary_structure = "', '".join(map(str, salary_structure)) - - query = ''' update `tabSalary Detail` set docstatus=1 where parent in ('{0}')'''.format(salary_structure) - frappe.db.sql(query) + frappe.db.sql(""" + update `tabSalary Structure` ss, `tabSalary Detail` sd + set sd.docstatus=1 + where ss.name=sd.parent and ss.docstatus=1 and sd.parenttype='Salary Structure' + """) + From 7760db7563750cbffcee07496b1f6bd5266ab60d Mon Sep 17 00:00:00 2001 From: Anurag Mishra <32095923+Anurag810@users.noreply.github.com> Date: Mon, 22 Apr 2019 12:15:11 +0530 Subject: [PATCH 41/56] fix: sales order status for order type 'Maintenance' (#17119) * fix: Sales order Status for order type 'Maintenance' * fix: test case for sales order --- erpnext/controllers/status_updater.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index d94564e4b5c..d86c3f546c3 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -34,8 +34,8 @@ status_map = { ], "Sales Order": [ ["Draft", None], - ["To Deliver and Bill", "eval:self.per_delivered < 100 and self.per_billed < 100 and self.docstatus == 1"], - ["To Bill", "eval:self.per_delivered == 100 and self.per_billed < 100 and self.docstatus == 1"], + ["To Deliver and Bill", "eval:self.per_delivered < 100 and self.per_billed < 100 and self.docstatus == 1 and self.order_type in ['Sales', 'Shopping Cart']"], + ["To Bill", "eval:self.per_delivered == 100 or self.order_type == 'Maintenance' and self.per_billed < 100 and self.docstatus == 1"], ["To Deliver", "eval:self.per_delivered < 100 and self.per_billed == 100 and self.docstatus == 1"], ["Completed", "eval:self.per_delivered == 100 and self.per_billed == 100 and self.docstatus == 1"], ["Completed", "eval:self.order_type == 'Maintenance' and self.per_billed == 100 and self.docstatus == 1"], From d1332f6c2472b376f981f13cc32eca996bf74fb9 Mon Sep 17 00:00:00 2001 From: Saif Ur Rehman Date: Mon, 22 Apr 2019 12:17:25 +0500 Subject: [PATCH 42/56] fix: Set Allocate Advance Automatically disabled by default --- .../doctype/purchase_invoice/purchase_invoice.json | 8 +++++--- erpnext/accounts/doctype/sales_invoice/sales_invoice.json | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index d798fd5fdc6..885f2c8926c 100755 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -3511,6 +3511,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "clearance_date", "fieldtype": "Date", "hidden": 1, @@ -3543,6 +3544,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "col_br_payments", "fieldtype": "Column Break", "hidden": 0, @@ -3880,7 +3882,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "default": "1", + "default": "", "fetch_if_empty": 0, "fieldname": "allocate_advances_automatically", "fieldtype": "Check", @@ -4901,7 +4903,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2019-04-11 16:08:22.288425", + "modified": "2019-04-22 12:45:49.728359", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice", @@ -5016,4 +5018,4 @@ "track_changes": 1, "track_seen": 0, "track_views": 0 -} \ No newline at end of file +} diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 7f7e6f981a9..12ae9aae7b0 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -3630,7 +3630,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "default": "1", + "default": "", "fetch_if_empty": 0, "fieldname": "allocate_advances_automatically", "fieldtype": "Check", @@ -5816,7 +5816,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2019-04-10 16:10:34.266458", + "modified": "2019-04-22 12:45:41.109345", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", From 393b12a37fa752b39414cf1686681bcb6d0815b8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Apr 2019 13:24:02 +0530 Subject: [PATCH 43/56] fix: Renamed depends_on_lwp to depends_on_payment_days --- .../additional_salary/additional_salary.py | 2 +- .../employee_benefit_application.py | 12 +- .../employee_benefit_claim.py | 2 +- .../salary_component/salary_component.js | 2 +- .../salary_component/salary_component.json | 38 ++++++- .../doctype/salary_detail/salary_detail.json | 28 ++++- erpnext/hr/doctype/salary_slip/salary_slip.js | 13 +-- erpnext/hr/doctype/salary_slip/salary_slip.py | 24 ++-- .../salary_structure/salary_structure.js | 2 +- .../salary_structure/salary_structure.py | 4 +- .../salary_slip_based_on_timesheet.json | 30 ++--- .../salary_slip_standard.json | 38 +++---- erpnext/patches.txt | 3 +- .../patches/v11_1/rename_depends_on_lwp.py | 13 +++ ...e.py => set_salary_details_submittable.py} | 2 - .../patches/v7_0/rename_salary_components.py | 106 +++++++++--------- 16 files changed, 188 insertions(+), 131 deletions(-) create mode 100644 erpnext/patches/v11_1/rename_depends_on_lwp.py rename erpnext/patches/v11_1/{set_salary_details_submitable.py => set_salary_details_submittable.py} (98%) diff --git a/erpnext/hr/doctype/additional_salary/additional_salary.py b/erpnext/hr/doctype/additional_salary/additional_salary.py index 968a1c4571c..9ca1260fe06 100644 --- a/erpnext/hr/doctype/additional_salary/additional_salary.py +++ b/erpnext/hr/doctype/additional_salary/additional_salary.py @@ -51,7 +51,7 @@ def get_additional_salary_component(employee, start_date, end_date): for d in additional_components: component = frappe.get_doc("Salary Component", d.salary_component) struct_row = {'salary_component': d.salary_component} - for field in ["depends_on_lwp", "abbr", "is_tax_applicable", "variable_based_on_taxable_salary", "is_additional_component"]: + for field in ["depends_on_payment_days", "abbr", "is_tax_applicable", "variable_based_on_taxable_salary", "is_additional_component"]: struct_row[field] = component.get(field) additional_components_list.append({ diff --git a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py index 9b6dba5ff81..c613a13223e 100644 --- a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py +++ b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py @@ -113,7 +113,7 @@ def get_max_benefits(employee, on_date): def get_max_benefits_remaining(employee, on_date, payroll_period): max_benefits = get_max_benefits(employee, on_date) if max_benefits and max_benefits > 0: - have_depends_on_lwp = False + have_depends_on_payment_days = False per_day_amount_total = 0 payroll_period_days = get_payroll_period_days(on_date, on_date, employee)[0] payroll_period_obj = frappe.get_doc("Payroll Period", payroll_period) @@ -122,22 +122,22 @@ def get_max_benefits_remaining(employee, on_date, payroll_period): prev_sal_slip_flexi_total = get_sal_slip_total_benefit_given(employee, payroll_period_obj) if prev_sal_slip_flexi_total > 0: - # Check salary structure hold depends_on_lwp component + # Check salary structure hold depends_on_payment_days component # If yes then find the amount per day of each component and find the sum sal_struct_name = get_assigned_salary_structure(employee, on_date) if sal_struct_name: sal_struct = frappe.get_doc("Salary Structure", sal_struct_name) for sal_struct_row in sal_struct.get("earnings"): salary_component = frappe.get_doc("Salary Component", sal_struct_row.salary_component) - if salary_component.depends_on_lwp == 1 and salary_component.pay_against_benefit_claim != 1: - have_depends_on_lwp = True + if salary_component.depends_on_payment_days == 1 and salary_component.pay_against_benefit_claim != 1: + have_depends_on_payment_days = True benefit_amount = get_benefit_pro_rata_ratio_amount(sal_struct, salary_component.max_benefit_amount) amount_per_day = benefit_amount / payroll_period_days per_day_amount_total += amount_per_day # Then the sum multiply with the no of lwp in that period # Include that amount to the prev_sal_slip_flexi_total to get the actual - if have_depends_on_lwp and per_day_amount_total > 0: + if have_depends_on_payment_days and per_day_amount_total > 0: holidays = get_holidays_for_employee(employee, payroll_period_obj.start_date, on_date) working_days = date_diff(on_date, payroll_period_obj.start_date) + 1 leave_days = calculate_lwp(employee, payroll_period_obj.start_date, holidays, working_days) @@ -185,7 +185,7 @@ def get_benefit_component_amount(employee, start_date, end_date, struct_row, sal 'payroll_period': payroll_period }) - if frappe.db.get_value("Salary Component", struct_row.salary_component, "depends_on_lwp") != 1: + if frappe.db.get_value("Salary Component", struct_row.salary_component, "depends_on_payment_days") != 1: if frequency == "Monthly" and actual_payroll_days in range(360, 370): period_length = 1 period_factor = 12 diff --git a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py index bf150b12322..8be67a866ab 100644 --- a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py +++ b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py @@ -170,7 +170,7 @@ def get_last_payroll_period_benefits(employee, sal_slip_start_date, sal_slip_end amount += current_claimed_amount struct_row = {} salary_components_dict = {} - struct_row['depends_on_lwp'] = salary_component.depends_on_lwp + struct_row['depends_on_payment_days'] = salary_component.depends_on_payment_days struct_row['salary_component'] = salary_component.name struct_row['abbr'] = salary_component.salary_component_abbr struct_row['do_not_include_in_total'] = salary_component.do_not_include_in_total diff --git a/erpnext/hr/doctype/salary_component/salary_component.js b/erpnext/hr/doctype/salary_component/salary_component.js index b33451bc35c..1d398ccd59c 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.js +++ b/erpnext/hr/doctype/salary_component/salary_component.js @@ -75,5 +75,5 @@ var set_value_for_condition_and_formula = function(frm) { frm.set_value("amount_based_on_formula", 0); frm.set_value("statistical_component", 0); frm.set_value("do_not_include_in_total", 0); - frm.set_value("depends_on_lwp", 0); + frm.set_value("depends_on_payment_days", 0); }; diff --git a/erpnext/hr/doctype/salary_component/salary_component.json b/erpnext/hr/doctype/salary_component/salary_component.json index f7ce08c737a..697d224092c 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.json +++ b/erpnext/hr/doctype/salary_component/salary_component.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, @@ -19,6 +20,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "salary_component", "fieldtype": "Data", "hidden": 0, @@ -51,6 +53,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "salary_component_abbr", "fieldtype": "Data", "hidden": 0, @@ -85,6 +88,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "type", "fieldtype": "Select", "hidden": 0, @@ -119,6 +123,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.is_flexible_benefit != 1", + "fetch_if_empty": 0, "fieldname": "is_additional_component", "fieldtype": "Check", "hidden": 0, @@ -153,6 +158,7 @@ "columns": 0, "default": "1", "depends_on": "eval:doc.type == \"Earning\"", + "fetch_if_empty": 0, "fieldname": "is_tax_applicable", "fieldtype": "Check", "hidden": 0, @@ -186,6 +192,7 @@ "collapsible": 0, "columns": 0, "default": "1", + "fetch_if_empty": 0, "fieldname": "is_payable", "fieldtype": "Check", "hidden": 0, @@ -218,7 +225,9 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "depends_on_lwp", + "default": "1", + "fetch_if_empty": 0, + "fieldname": "depends_on_payment_days", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -227,7 +236,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Depends on Leave Without Pay", + "label": "Depends on Payment Days", "length": 0, "no_copy": 0, "permlevel": 0, @@ -250,6 +259,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "do_not_include_in_total", "fieldtype": "Check", "hidden": 0, @@ -282,6 +292,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_4", "fieldtype": "Column Break", "hidden": 0, @@ -313,6 +324,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "disabled", "fieldtype": "Check", "hidden": 0, @@ -345,6 +357,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "description", "fieldtype": "Small Text", "hidden": 0, @@ -378,6 +391,7 @@ "collapsible": 0, "columns": 0, "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ", + "fetch_if_empty": 0, "fieldname": "statistical_component", "fieldtype": "Check", "hidden": 0, @@ -411,6 +425,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.type==\"Earning\" && doc.is_additional_component != 1 && doc.statistical_component!=1", + "fetch_if_empty": 0, "fieldname": "flexible_benefits", "fieldtype": "Section Break", "hidden": 0, @@ -444,6 +459,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.is_additional_component != 1", + "fetch_if_empty": 0, "fieldname": "is_flexible_benefit", "fieldtype": "Check", "hidden": 0, @@ -477,6 +493,7 @@ "collapsible": 0, "columns": 0, "depends_on": "is_flexible_benefit", + "fetch_if_empty": 0, "fieldname": "max_benefit_amount", "fieldtype": "Currency", "hidden": 0, @@ -509,6 +526,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_9", "fieldtype": "Column Break", "hidden": 0, @@ -541,6 +559,7 @@ "collapsible": 0, "columns": 0, "depends_on": "is_flexible_benefit", + "fetch_if_empty": 0, "fieldname": "pay_against_benefit_claim", "fieldtype": "Check", "hidden": 0, @@ -574,6 +593,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.is_flexible_benefit == 1 & doc.create_separate_payment_entry_against_benefit_claim !=1", + "fetch_if_empty": 0, "fieldname": "only_tax_impact", "fieldtype": "Check", "hidden": 0, @@ -607,6 +627,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.is_flexible_benefit == 1 & doc.only_tax_impact !=1", + "fetch_if_empty": 0, "fieldname": "create_separate_payment_entry_against_benefit_claim", "fieldtype": "Check", "hidden": 0, @@ -640,6 +661,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.type=='Deduction'", + "fetch_if_empty": 0, "fieldname": "section_break_11", "fieldtype": "Section Break", "hidden": 0, @@ -671,6 +693,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "variable_based_on_taxable_salary", "fieldtype": "Check", "hidden": 0, @@ -704,6 +727,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.statistical_component != 1", + "fetch_if_empty": 0, "fieldname": "section_break_5", "fieldtype": "Section Break", "hidden": 0, @@ -736,6 +760,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "accounts", "fieldtype": "Table", "hidden": 0, @@ -771,6 +796,7 @@ "collapsible_depends_on": "", "columns": 0, "depends_on": "eval:doc.is_flexible_benefit != 1 && doc.variable_based_on_taxable_salary != 1", + "fetch_if_empty": 0, "fieldname": "condition_and_formula", "fieldtype": "Section Break", "hidden": 0, @@ -803,6 +829,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "condition", "fieldtype": "Code", "hidden": 0, @@ -836,6 +863,7 @@ "collapsible": 0, "columns": 0, "default": "", + "fetch_if_empty": 0, "fieldname": "amount_based_on_formula", "fieldtype": "Check", "hidden": 0, @@ -869,6 +897,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.amount_based_on_formula!==0", + "fetch_if_empty": 0, "fieldname": "formula", "fieldtype": "Code", "hidden": 0, @@ -902,6 +931,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.amount_based_on_formula!==1", + "fetch_if_empty": 0, "fieldname": "amount", "fieldtype": "Currency", "hidden": 0, @@ -934,6 +964,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_28", "fieldtype": "Column Break", "hidden": 0, @@ -965,6 +996,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "help", "fieldtype": "HTML", "hidden": 0, @@ -1003,7 +1035,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-09-20 16:44:58.876044", + "modified": "2019-04-16 19:08:55.323567", "modified_by": "Administrator", "module": "HR", "name": "Salary Component", diff --git a/erpnext/hr/doctype/salary_detail/salary_detail.json b/erpnext/hr/doctype/salary_detail/salary_detail.json index 0ec3cd64138..8f2649ad21b 100644 --- a/erpnext/hr/doctype/salary_detail/salary_detail.json +++ b/erpnext/hr/doctype/salary_detail/salary_detail.json @@ -19,6 +19,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "salary_component", "fieldtype": "Link", "hidden": 0, @@ -55,6 +56,7 @@ "default": "", "depends_on": "eval:doc.parenttype=='Salary Structure'", "fetch_from": "salary_component.salary_component_abbr", + "fetch_if_empty": 0, "fieldname": "abbr", "fieldtype": "Data", "hidden": 0, @@ -88,6 +90,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_3", "fieldtype": "Column Break", "hidden": 0, @@ -121,6 +124,7 @@ "columns": 0, "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ", "fetch_from": "salary_component.statistical_component", + "fetch_if_empty": 0, "fieldname": "statistical_component", "fieldtype": "Check", "hidden": 0, @@ -154,6 +158,7 @@ "collapsible": 0, "columns": 0, "fetch_from": "salary_component.is_tax_applicable", + "fetch_if_empty": 0, "fieldname": "is_tax_applicable", "fieldtype": "Check", "hidden": 0, @@ -187,6 +192,7 @@ "collapsible": 0, "columns": 0, "fetch_from": "salary_component.is_flexible_benefit", + "fetch_if_empty": 0, "fieldname": "is_flexible_benefit", "fieldtype": "Check", "hidden": 0, @@ -221,6 +227,7 @@ "columns": 0, "default": "", "fetch_from": "salary_component.is_additional_component", + "fetch_if_empty": 0, "fieldname": "is_additional_component", "fieldtype": "Check", "hidden": 1, @@ -255,6 +262,7 @@ "columns": 0, "default": "", "fetch_from": "salary_component.variable_based_on_taxable_salary", + "fetch_if_empty": 0, "fieldname": "variable_based_on_taxable_salary", "fieldtype": "Check", "hidden": 0, @@ -288,8 +296,9 @@ "collapsible": 0, "columns": 0, "depends_on": "", - "fetch_from": "salary_component.depends_on_lwp", - "fieldname": "depends_on_lwp", + "fetch_from": "salary_component.depends_on_payment_days", + "fetch_if_empty": 0, + "fieldname": "depends_on_payment_days", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -298,7 +307,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Depends on Leave Without Pay", + "label": "Depends on Payment Days", "length": 0, "no_copy": 0, "permlevel": 0, @@ -322,6 +331,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.is_flexible_benefit != 1", + "fetch_if_empty": 0, "fieldname": "section_break_2", "fieldtype": "Section Break", "hidden": 0, @@ -354,6 +364,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.parenttype=='Salary Structure'", + "fetch_if_empty": 0, "fieldname": "condition", "fieldtype": "Code", "hidden": 0, @@ -389,6 +400,7 @@ "default": "0", "depends_on": "eval:doc.parenttype=='Salary Structure'", "fetch_from": "", + "fetch_if_empty": 0, "fieldname": "amount_based_on_formula", "fieldtype": "Check", "hidden": 0, @@ -425,6 +437,7 @@ "default": "", "depends_on": "eval:doc.amount_based_on_formula!==0 && doc.parenttype==='Salary Structure'", "description": "", + "fetch_if_empty": 0, "fieldname": "formula", "fieldtype": "Code", "hidden": 0, @@ -458,6 +471,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.amount_based_on_formula!==1 || doc.parenttype==='Salary Slip'", + "fetch_if_empty": 0, "fieldname": "amount", "fieldtype": "Currency", "hidden": 0, @@ -491,6 +505,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "do_not_include_in_total", "fieldtype": "Check", "hidden": 0, @@ -524,6 +539,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.parenttype=='Salary Structure'", + "fetch_if_empty": 0, "fieldname": "default_amount", "fieldtype": "Currency", "hidden": 0, @@ -558,6 +574,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1", + "fetch_if_empty": 0, "fieldname": "tax_on_flexible_benefit", "fieldtype": "Currency", "hidden": 0, @@ -591,6 +608,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1", + "fetch_if_empty": 0, "fieldname": "tax_on_additional_salary", "fieldtype": "Currency", "hidden": 0, @@ -624,6 +642,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.parenttype=='Salary Structure'", + "fetch_if_empty": 0, "fieldname": "section_break_11", "fieldtype": "Column Break", "hidden": 0, @@ -656,6 +675,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.parenttype=='Salary Structure'", + "fetch_if_empty": 0, "fieldname": "condition_and_formula_help", "fieldtype": "HTML", "hidden": 0, @@ -693,7 +713,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2019-02-04 14:41:56.030991", + "modified": "2019-04-16 19:09:31.726597", "modified_by": "Administrator", "module": "HR", "name": "Salary Detail", diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.js b/erpnext/hr/doctype/salary_slip/salary_slip.js index 86c50d08ba1..4e9fcce8982 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.js +++ b/erpnext/hr/doctype/salary_slip/salary_slip.js @@ -132,9 +132,6 @@ var get_emp_and_leave_details = function(doc, dt, dn) { }); } -cur_frm.cscript.employee = function(doc,dt,dn){ - get_emp_and_leave_details(doc, dt, dn); -} cur_frm.cscript.leave_without_pay = function(doc,dt,dn){ if (doc.employee && doc.start_date && doc.end_date) { @@ -160,7 +157,7 @@ cur_frm.cscript.amount = function(doc,dt,dn){ calculate_all(doc, dt, dn); } -cur_frm.cscript.depends_on_lwp = function(doc,dt,dn){ +cur_frm.cscript.depends_on_payment_days = function(doc,dt,dn){ calculate_earning_total(doc, dt, dn, true); calculate_ded_total(doc, dt, dn, true); calculate_net_pay(doc, dt, dn); @@ -174,7 +171,7 @@ var calculate_earning_total = function(doc, dt, dn, reset_amount) { var tbl = doc.earnings || []; var total_earn = 0; for(var i = 0; i < tbl.length; i++){ - if(cint(tbl[i].depends_on_lwp) == 1) { + if(cint(tbl[i].depends_on_payment_days) == 1) { tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days) / cint(doc.total_working_days)*100)/100; } else if(reset_amount && tbl[i].default_amount) { @@ -196,7 +193,7 @@ var calculate_ded_total = function(doc, dt, dn, reset_amount) { var tbl = doc.deductions || []; var total_ded = 0; for(var i = 0; i < tbl.length; i++){ - if(cint(tbl[i].depends_on_lwp) == 1) { + if(cint(tbl[i].depends_on_payment_days) == 1) { tbl[i].amount = Math.round(tbl[i].default_amount)*(flt(doc.payment_days)/cint(doc.total_working_days)*100)/100; } else if(reset_amount && tbl[i].default_amount) { tbl[i].amount = tbl[i].default_amount; @@ -209,16 +206,12 @@ var calculate_ded_total = function(doc, dt, dn, reset_amount) { refresh_many(['deductions', 'total_deduction']); } -// Calculate net payable amount -// ------------------------------------------------------------------------ var calculate_net_pay = function(doc, dt, dn) { doc.net_pay = flt(doc.gross_pay) - flt(doc.total_deduction); doc.rounded_total = Math.round(doc.net_pay); refresh_many(['net_pay', 'rounded_total']); } -// validate -// ------------------------------------------------------------------------ cur_frm.cscript.validate = function(doc, dt, dn) { calculate_all(doc, dt, dn); } diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 3fd266b4bba..19aaba894f1 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -131,11 +131,12 @@ class SalarySlip(TransactionBase): for d in self.get(key): if d.salary_component == struct_row.salary_component: component_row = d + if not component_row: self.append(key, { 'amount': amount, 'default_amount': amount, - 'depends_on_lwp' : struct_row.depends_on_lwp, + 'depends_on_payment_days' : struct_row.depends_on_payment_days, 'salary_component' : struct_row.salary_component, 'abbr' : struct_row.abbr, 'do_not_include_in_total' : struct_row.do_not_include_in_total, @@ -147,12 +148,11 @@ class SalarySlip(TransactionBase): 'tax_on_additional_salary': additional_tax }) else: - if overwrite: - component_row.default_amount = amount - component_row.amount = amount - else: - component_row.default_amount += amount - component_row.amount = component_row.default_amount + if not overwrite: + amount += struct_row.get("default_amount", 0) + + component_row.default_amount = amount + component_row.amount = amount component_row.tax_on_flexible_benefit = benefit_tax component_row.tax_on_additional_salary = additional_tax @@ -418,7 +418,7 @@ class SalarySlip(TransactionBase): for d in self.get(component_type): if (self.salary_structure and - cint(d.depends_on_lwp) and + cint(d.depends_on_payment_days) and (not self.salary_slip_based_on_timesheet or getdate(self.start_date) < joining_date or @@ -431,7 +431,7 @@ class SalarySlip(TransactionBase): ) elif not self.payment_days and not self.salary_slip_based_on_timesheet and \ - cint(d.depends_on_lwp): + cint(d.depends_on_payment_days): d.amount = 0 elif not d.amount: d.amount = d.default_amount @@ -441,7 +441,7 @@ class SalarySlip(TransactionBase): def calculate_net_pay(self): if self.salary_structure: self.calculate_component_amounts() - + disable_rounded_total = cint(frappe.db.get_value("Global Defaults", None, "disable_rounded_total")) precision = frappe.defaults.get_global_default("currency_precision") self.total_deduction = 0 @@ -455,7 +455,7 @@ class SalarySlip(TransactionBase): self.net_pay = flt(self.gross_pay) - (flt(self.total_deduction) + flt(self.total_loan_repayment)) self.rounded_total = rounded(self.net_pay, self.precision("net_pay") if disable_rounded_total else 0) - + if self.net_pay < 0: frappe.throw(_("Net Pay cannnot be negative")) @@ -784,7 +784,7 @@ class SalarySlip(TransactionBase): component = frappe.get_doc("Salary Component", salary_component) # Data for update_component_row struct_row = {} - struct_row['depends_on_lwp'] = component.depends_on_lwp + struct_row['depends_on_payment_days'] = component.depends_on_payment_days struct_row['salary_component'] = component.name struct_row['abbr'] = component.salary_component_abbr struct_row['do_not_include_in_total'] = component.do_not_include_in_total diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.js b/erpnext/hr/doctype/salary_structure/salary_structure.js index 79d75bfdf6e..e3f37e71059 100755 --- a/erpnext/hr/doctype/salary_structure/salary_structure.js +++ b/erpnext/hr/doctype/salary_structure/salary_structure.js @@ -246,7 +246,7 @@ frappe.ui.form.on('Salary Detail', { frappe.model.set_value(cdt, cdn, 'amount', result.amount); } frappe.model.set_value(cdt, cdn, 'statistical_component', result.statistical_component); - frappe.model.set_value(cdt, cdn, 'depends_on_lwp', result.depends_on_lwp); + frappe.model.set_value(cdt, cdn, 'depends_on_payment_days', result.depends_on_payment_days); frappe.model.set_value(cdt, cdn, 'do_not_include_in_total', result.do_not_include_in_total); frappe.model.set_value(cdt, cdn, 'variable_based_on_taxable_salary', result.variable_based_on_taxable_salary); frappe.model.set_value(cdt, cdn, 'is_tax_applicable', result.is_tax_applicable); diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py index 202ae9bcfe5..26efd00d473 100644 --- a/erpnext/hr/doctype/salary_structure/salary_structure.py +++ b/erpnext/hr/doctype/salary_structure/salary_structure.py @@ -18,7 +18,7 @@ class SalaryStructure(Document): self.validate_max_benefits_with_flexi() def set_missing_values(self): - overwritten_fields = ["depends_on_lwp", "variable_based_on_taxable_salary", "is_tax_applicable", "is_flexible_benefit"] + overwritten_fields = ["depends_on_payment_days", "variable_based_on_taxable_salary", "is_tax_applicable", "is_flexible_benefit"] overwritten_fields_if_missing = ["amount_based_on_formula", "formula", "amount"] for table in ["earnings", "deductions"]: for d in self.get(table): @@ -126,7 +126,7 @@ def create_salary_structures_assignment(employee, salary_structure, from_date, b def get_existing_assignments(employees, salary_structure,from_date): salary_structures_assignments = frappe.db.sql_list(""" - select distinct employee from `tabSalary Structure Assignment` + select distinct employee from `tabSalary Structure Assignment` where salary_structure=%s and employee in (%s) and from_date=%s and docstatus=1 """ % ('%s', ', '.join(['%s']*len(employees)),'%s'), [salary_structure] + employees+[from_date]) diff --git a/erpnext/hr/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json b/erpnext/hr/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json index 20c7d232494..ceaf4a6ac71 100644 --- a/erpnext/hr/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json +++ b/erpnext/hr/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json @@ -1,18 +1,18 @@ { - "creation": "2016-07-07 12:38:32.447281", - "custom_format": 0, - "disabled": 0, - "doc_type": "Salary Slip", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \"

{{doc.name}}


\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_hours\"}, {\"print_hide\": 0, \"fieldname\": \"hour_rate\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"time_sheet\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"working_hours\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"timesheets\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]", - "idx": 0, - "modified": "2016-08-21 21:02:59.896033", - "modified_by": "Administrator", - "name": "Salary Slip based on Timesheet", - "owner": "Administrator", - "print_format_builder": 1, - "print_format_type": "Server", + "creation": "2016-07-07 12:38:32.447281", + "custom_format": 0, + "disabled": 0, + "doc_type": "Salary Slip", + "docstatus": 0, + "doctype": "Print Format", + "font": "Default", + "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \"

{{doc.name}}


\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_hours\"}, {\"print_hide\": 0, \"fieldname\": \"hour_rate\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"time_sheet\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"working_hours\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"timesheets\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]", + "idx": 0, + "modified": "2016-08-21 21:02:59.896033", + "modified_by": "Administrator", + "name": "Salary Slip based on Timesheet", + "owner": "Administrator", + "print_format_builder": 1, + "print_format_type": "Server", "standard": "Yes" } \ No newline at end of file diff --git a/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json b/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json index 9f299df0ed3..b01239fe02d 100644 --- a/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json +++ b/erpnext/hr/print_format/salary_slip_standard/salary_slip_standard.json @@ -1,22 +1,22 @@ { - "align_labels_right": 0, - "creation": "2016-07-07 11:45:14.872204", - "custom_format": 0, - "disabled": 0, - "doc_type": "Salary Slip", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"

{{doc.name}}

\\n
\\n
\\n
\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\", \"label\": \"Employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\", \"label\": \"Employee Name\"}, {\"print_hide\": 0, \"fieldname\": \"department\", \"label\": \"Department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\", \"label\": \"Designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\", \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\", \"label\": \"Start Date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\", \"label\": \"End Date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\", \"label\": \"Working Days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\", \"label\": \"Leave Without Pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\", \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\", \"label\": \"Earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_lwp\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\", \"label\": \"Deductions\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\", \"label\": \"Gross Pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\", \"label\": \"Total Deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\", \"label\": \"Net Pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\", \"label\": \"Total in words\"}]", - "idx": 0, - "line_breaks": 0, - "modified": "2018-07-24 19:31:39.040701", - "modified_by": "Administrator", - "module": "HR", - "name": "Salary Slip Standard", - "owner": "Administrator", - "print_format_builder": 1, - "print_format_type": "Server", - "show_section_headings": 0, + "align_labels_right": 0, + "creation": "2016-07-07 11:45:14.872204", + "custom_format": 0, + "disabled": 0, + "doc_type": "Salary Slip", + "docstatus": 0, + "doctype": "Print Format", + "font": "Default", + "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"

{{doc.name}}

\\n
\\n
\\n
\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\", \"label\": \"Employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\", \"label\": \"Employee Name\"}, {\"print_hide\": 0, \"fieldname\": \"department\", \"label\": \"Department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\", \"label\": \"Designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\", \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\", \"label\": \"Start Date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\", \"label\": \"End Date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\", \"label\": \"Working Days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\", \"label\": \"Leave Without Pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\", \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\", \"label\": \"Earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\", \"label\": \"Deductions\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\", \"label\": \"Gross Pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\", \"label\": \"Total Deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\", \"label\": \"Net Pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\", \"label\": \"Total in words\"}]", + "idx": 0, + "line_breaks": 0, + "modified": "2018-07-24 19:31:39.040701", + "modified_by": "Administrator", + "module": "HR", + "name": "Salary Slip Standard", + "owner": "Administrator", + "print_format_builder": 1, + "print_format_type": "Server", + "show_section_headings": 0, "standard": "Yes" } \ No newline at end of file diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 2df10899800..75cdd0842b3 100755 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -591,4 +591,5 @@ erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019 erpnext.patches.v11_1.make_job_card_time_logs erpnext.patches.v11_1.set_variant_based_on erpnext.patches.v11_1.woocommerce_set_creation_user -erpnext.patches.v11_1.set_salary_details_submitable \ No newline at end of file +erpnext.patches.v11_1.set_salary_details_submittable +erpnext.patches.v11_1.rename_depends_on_lwp diff --git a/erpnext/patches/v11_1/rename_depends_on_lwp.py b/erpnext/patches/v11_1/rename_depends_on_lwp.py new file mode 100644 index 00000000000..20d8867e1d2 --- /dev/null +++ b/erpnext/patches/v11_1/rename_depends_on_lwp.py @@ -0,0 +1,13 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe +from frappe import scrub +from frappe.model.utils.rename_field import rename_field + +def execute(): + for doctype in ("Salary Component", "Salary Detail"): + if "depends_on_lwp" in frappe.db.get_table_columns(doctype): + frappe.reload_doc("hr", "doctype", scrub(doctype)) + rename_field(doctype, "depends_on_lwp", "depends_on_payment_days") \ No newline at end of file diff --git a/erpnext/patches/v11_1/set_salary_details_submitable.py b/erpnext/patches/v11_1/set_salary_details_submittable.py similarity index 98% rename from erpnext/patches/v11_1/set_salary_details_submitable.py rename to erpnext/patches/v11_1/set_salary_details_submittable.py index f4477d9fd6d..6d847ec3d05 100644 --- a/erpnext/patches/v11_1/set_salary_details_submitable.py +++ b/erpnext/patches/v11_1/set_salary_details_submittable.py @@ -7,5 +7,3 @@ def execute(): set sd.docstatus=1 where ss.name=sd.parent and ss.docstatus=1 and sd.parenttype='Salary Structure' """) - - diff --git a/erpnext/patches/v7_0/rename_salary_components.py b/erpnext/patches/v7_0/rename_salary_components.py index de92fc6083b..bc48e343174 100644 --- a/erpnext/patches/v7_0/rename_salary_components.py +++ b/erpnext/patches/v7_0/rename_salary_components.py @@ -5,79 +5,79 @@ from frappe.model.utils.rename_field import update_property_setters def execute(): if not frappe.db.exists("DocType", "Salary Structure Earning"): return - + frappe.reload_doc("hr", "doctype", "salary_detail") frappe.reload_doc("hr", "doctype", "salary_component") - + standard_cols = ["name", "creation", "modified", "owner", "modified_by", "parent", "parenttype", "parentfield", "idx"] - + dt_cols = { "Salary Structure Deduction": ["d_type", "d_modified_amt", "depend_on_lwp"], "Salary Structure Earning": ["e_type", "modified_value", "depend_on_lwp"], "Salary Slip Earning": ["e_type", "e_modified_amount", "e_depends_on_lwp", "e_amount"], "Salary Slip Deduction": ["d_type", "d_modified_amount", "d_depends_on_lwp", "d_amount"], } - + earning_type_exists = True if "earning_type" in frappe.db.get_table_columns("Salary Slip Earning") else False e_type_exists = True if "e_type" in frappe.db.get_table_columns("Salary Slip Earning") else False - - + + if e_type_exists and earning_type_exists: - frappe.db.sql("""update `tabSalary Slip Earning` + frappe.db.sql("""update `tabSalary Slip Earning` set e_type = earning_type, e_modified_amount = earning_amount where e_type is null and earning_type is not null""") - frappe.db.sql("""update `tabSalary Structure Earning` set e_type = earning_type + frappe.db.sql("""update `tabSalary Structure Earning` set e_type = earning_type where e_type is null and earning_type is not null""") - frappe.db.sql("""update `tabSalary Slip Deduction` set + frappe.db.sql("""update `tabSalary Slip Deduction` set d_type = deduction_type, d_modified_amount = deduction_amount where d_type is null and deduction_type is not null""") - frappe.db.sql("""update `tabSalary Structure Deduction` set d_type = deduction_type + frappe.db.sql("""update `tabSalary Structure Deduction` set d_type = deduction_type where d_type is null and deduction_type is not null""") - + if earning_type_exists and not e_type_exists: for val in dt_cols.values(): if val[0] == "e_type": val[0] = "earning_type" - + if val[0] == "d_type": val[0] = "deduction_type" - + if val[1] == "e_modified_amount": val[1] ="earning_amount" - + if val[1] == "d_modified_amount": val[1] ="deduction_amount" - - - target_cols = standard_cols + ["salary_component", "amount", "depends_on_lwp", "default_amount"] - target_cols = "`" + "`, `".join(target_cols) + "`" - - for doctype, cols in dt_cols.items(): + + + target_cols = standard_cols + ["salary_component", "amount", "depends_on_payment_days", "default_amount"] + target_cols = "`" + "`, `".join(target_cols) + "`" + + for doctype, cols in dt_cols.items(): source_cols = "`" + "`, `".join(standard_cols + cols) + "`" if len(cols) == 3: source_cols += ", 0" - - + + frappe.db.sql("""INSERT INTO `tabSalary Detail` ({0}) SELECT {1} FROM `tab{2}`""" .format(target_cols, source_cols, doctype)) - - + + dt_cols_de = { "Deduction Type": ["deduction_name", "description"], "Earning Type": ["earning_name", "description"], } - + standard_cols_de = standard_cols - + target_cols = standard_cols_de + ["salary_component", "description"] - target_cols = "`" + "`, `".join(target_cols) + "`" - - for doctype, cols in dt_cols_de.items(): + target_cols = "`" + "`, `".join(target_cols) + "`" + + for doctype, cols in dt_cols_de.items(): source_cols = "`" + "`, `".join(standard_cols_de + cols) + "`" try: frappe.db.sql("""INSERT INTO `tabSalary Component` ({0}) SELECT {1} FROM `tab{2}`""" @@ -85,10 +85,10 @@ def execute(): except Exception as e: if e.args[0]==1062: pass - + update_customizations() - - for doctype in ["Salary Structure Deduction", "Salary Structure Earning", "Salary Slip Earning", + + for doctype in ["Salary Structure Deduction", "Salary Structure Earning", "Salary Slip Earning", "Salary Slip Deduction", "Deduction Type", "Earning Type"] : frappe.delete_doc("DocType", doctype) @@ -96,35 +96,35 @@ def execute(): def update_customizations(): dt_cols = { "Salary Structure Deduction": { - "d_type": "salary_component", - "deduction_type": "salary_component", + "d_type": "salary_component", + "deduction_type": "salary_component", "d_modified_amt": "amount", - "depend_on_lwp": "depends_on_lwp" + "depend_on_lwp": "depends_on_payment_days" }, "Salary Structure Earning": { - "e_type": "salary_component", - "earning_type": "salary_component", + "e_type": "salary_component", + "earning_type": "salary_component", "modified_value": "amount", - "depend_on_lwp": "depends_on_lwp" + "depend_on_lwp": "depends_on_payment_days" }, "Salary Slip Earning": { - "e_type": "salary_component", - "earning_type": "salary_component", + "e_type": "salary_component", + "earning_type": "salary_component", "e_modified_amount": "amount", "e_amount" : "default_amount", - "e_depends_on_lwp": "depends_on_lwp" + "e_depends_on_lwp": "depends_on_payment_days" }, "Salary Slip Deduction": { - "d_type": "salary_component", - "deduction_type": "salary_component", + "d_type": "salary_component", + "deduction_type": "salary_component", "d_modified_amount": "amount", "d_amount" : "default_amount", - "d_depends_on_lwp": "depends_on_lwp" + "d_depends_on_lwp": "depends_on_payment_days" } } - + update_property_setters_and_custom_fields("Salary Detail", dt_cols) - + dt_cols = { "Earning Type": { "earning_name": "salary_component" @@ -133,17 +133,17 @@ def update_customizations(): "deduction_name": "salary_component" } } - + update_property_setters_and_custom_fields("Salary Component", dt_cols) - - - - + + + + def update_property_setters_and_custom_fields(new_dt, dt_cols): for doctype, cols in dt_cols.items(): frappe.db.sql("update `tabProperty Setter` set doc_type = %s where doc_type=%s", (new_dt, doctype)) frappe.db.sql("update `tabCustom Field` set dt = %s where dt=%s", (new_dt, doctype)) - - + + for old_fieldname, new_fieldname in cols.items(): update_property_setters(new_dt, old_fieldname, new_fieldname) From 8a32ad206ab2e199a1eb03a0eec05c601d989105 Mon Sep 17 00:00:00 2001 From: "hello@openetech.com" Date: Mon, 22 Apr 2019 13:58:30 +0530 Subject: [PATCH 44/56] [fix] #17324 --- erpnext/hr/doctype/leave_application/leave_application.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py index 560dd1d3bfd..88b8f77b2e0 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.py +++ b/erpnext/hr/doctype/leave_application/leave_application.py @@ -135,6 +135,7 @@ class LeaveApplication(Document): date = dt.strftime("%Y-%m-%d") doc = frappe.new_doc("Attendance") doc.employee = self.employee + doc.employee_name = self.employee_name doc.attendance_date = date doc.company = self.company doc.leave_type = self.leave_type From 32207ad722766b41e4bdc64922dfb254db33f064 Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Mon, 22 Apr 2019 14:25:43 +0550 Subject: [PATCH 45/56] bumped to version 11.1.22 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 608e6b75b6d..1c187fa01c4 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -5,7 +5,7 @@ import frappe from erpnext.hooks import regional_overrides from frappe.utils import getdate -__version__ = '11.1.21' +__version__ = '11.1.22' def get_default_company(user=None): '''Get default company for user''' From 759bb0eb628cb5414ed30d90d317841835fba9bf Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Mon, 22 Apr 2019 14:40:01 +0530 Subject: [PATCH 46/56] fix: (Patch) Removed page Bom-Browser --- erpnext/patches.txt | 6 +++++- erpnext/patches/v11_1/delete_bom_browser.py | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 erpnext/patches/v11_1/delete_bom_browser.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 2df10899800..faff5c4ffec 100755 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -591,4 +591,8 @@ erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019 erpnext.patches.v11_1.make_job_card_time_logs erpnext.patches.v11_1.set_variant_based_on erpnext.patches.v11_1.woocommerce_set_creation_user -erpnext.patches.v11_1.set_salary_details_submitable \ No newline at end of file +<<<<<<< HEAD +erpnext.patches.v11_1.set_salary_details_submitable +======= +erpnext.patches.v11_1.delete_bom_browser +>>>>>>> fix: (Patch) Removed page Bom-Browser diff --git a/erpnext/patches/v11_1/delete_bom_browser.py b/erpnext/patches/v11_1/delete_bom_browser.py new file mode 100644 index 00000000000..5b8251ca2fc --- /dev/null +++ b/erpnext/patches/v11_1/delete_bom_browser.py @@ -0,0 +1,8 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.db.sql(""" Delete from `tabPage` where name='bom-browser' """) \ No newline at end of file From 4f16d17d2181289c64885e636653cd3bc23ad187 Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Mon, 22 Apr 2019 14:48:15 +0530 Subject: [PATCH 47/56] fix: resolve conflicts --- erpnext/patches.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index faff5c4ffec..c6672e9af3b 100755 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -591,8 +591,5 @@ erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019 erpnext.patches.v11_1.make_job_card_time_logs erpnext.patches.v11_1.set_variant_based_on erpnext.patches.v11_1.woocommerce_set_creation_user -<<<<<<< HEAD erpnext.patches.v11_1.set_salary_details_submitable -======= erpnext.patches.v11_1.delete_bom_browser ->>>>>>> fix: (Patch) Removed page Bom-Browser From 7bdd27f7e2956335c6096da411221d0c30187d30 Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Mon, 22 Apr 2019 14:54:31 +0530 Subject: [PATCH 48/56] chore: used frappe.delete_doc_if_exists --- erpnext/patches/v11_1/delete_bom_browser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches/v11_1/delete_bom_browser.py b/erpnext/patches/v11_1/delete_bom_browser.py index 5b8251ca2fc..457f5116670 100644 --- a/erpnext/patches/v11_1/delete_bom_browser.py +++ b/erpnext/patches/v11_1/delete_bom_browser.py @@ -5,4 +5,4 @@ from __future__ import unicode_literals import frappe def execute(): - frappe.db.sql(""" Delete from `tabPage` where name='bom-browser' """) \ No newline at end of file + frappe.delete_doc_if_exists('Page', 'bom-browser') \ No newline at end of file From 8aeb4b04bdcba408c7637ab265ceed2b1142a596 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Apr 2019 17:39:02 +0530 Subject: [PATCH 49/56] fix: Income tax period factor considering joining and relieving date --- erpnext/hr/doctype/salary_slip/salary_slip.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 19aaba894f1..ac4e40bd6de 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -599,12 +599,11 @@ class SalarySlip(TransactionBase): annual_earning = taxable_earning["taxable_earning"] * period_factor exemption_amount = 0 if frappe.db.exists("Employee Tax Exemption Declaration", {"employee": self.employee, - "payroll_period": payroll_period.name, "docstatus": 1}): + "payroll_period": payroll_period.name, "docstatus": 1}): exemption_amount = frappe.db.get_value("Employee Tax Exemption Declaration", {"employee": self.employee, "payroll_period": payroll_period.name, "docstatus": 1}, "total_exemption_amount") annual_taxable_earning = annual_earning - exemption_amount - if self.deduct_tax_for_unclaimed_employee_benefits or self.deduct_tax_for_unsubmitted_tax_exemption_proof: tax_detail = self.get_tax_paid_in_period(payroll_period, tax_component) if tax_detail: @@ -770,13 +769,21 @@ class SalarySlip(TransactionBase): def get_period_factor(self, period_start, period_end, start_date=None, end_date=None): # TODO if both deduct checked update the factor to make tax consistent + joining_date, relieving_date = frappe.db.get_value("Employee", self.employee, ["date_of_joining", "relieving_date"]) + if getdate(joining_date) > getdate(period_start): + period_start = joining_date + if relieving_date and getdate(relieving_date) < getdate(period_end): + period_end = relieving_date + payroll_days = date_diff(period_end, period_start) + 1 if start_date and end_date: salary_days = date_diff(end_date, start_date) + 1 return flt(payroll_days)/flt(salary_days) + # if period configured for a year and monthly frequency return 12 to make tax calc consistent if 360 <= payroll_days <= 370 and self.payroll_frequency == "Monthly": return 12 + salary_days = date_diff(self.end_date, self.start_date) + 1 return flt(payroll_days)/flt(salary_days) From a5fbeaa3d34aa3e9f0db71a8842d03ad1ef6d074 Mon Sep 17 00:00:00 2001 From: Saif Date: Mon, 22 Apr 2019 17:29:36 +0500 Subject: [PATCH 50/56] fix: Remove duplicate/incorrect patch --- erpnext/patches.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index e67b6a2f215..7d015527456 100755 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -591,7 +591,6 @@ erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019 erpnext.patches.v11_1.make_job_card_time_logs erpnext.patches.v11_1.set_variant_based_on erpnext.patches.v11_1.woocommerce_set_creation_user -erpnext.patches.v11_1.set_salary_details_submitable erpnext.patches.v11_1.delete_bom_browser erpnext.patches.v11_1.set_salary_details_submittable erpnext.patches.v11_1.rename_depends_on_lwp From af6360b273caf5e61f672059c0b7931c1f5cc7bd Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Tue, 23 Apr 2019 10:44:10 +0200 Subject: [PATCH 51/56] Bank reconciliation corrections --- .../bank_transaction_upload.py | 22 +++++++++++-------- .../bank_reconciliation.py | 6 +++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction_upload.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction_upload.py index 8dd8d286729..ccee269bced 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction_upload.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction_upload.py @@ -45,15 +45,19 @@ def create_bank_entries(columns, data, bank_account): fields.update({key: d[int(value)-1]}) - bank_transaction = frappe.get_doc({ - "doctype": "Bank Transaction" - }) - bank_transaction.update(fields) - bank_transaction.date = getdate(parse_date(bank_transaction.date)) - bank_transaction.bank_account = bank_account - bank_transaction.insert() - bank_transaction.submit() - count = count + 1 + try: + bank_transaction = frappe.get_doc({ + "doctype": "Bank Transaction" + }) + bank_transaction.update(fields) + bank_transaction.date = getdate(parse_date(bank_transaction.date)) + bank_transaction.bank_account = bank_account + bank_transaction.insert() + bank_transaction.submit() + count = count + 1 + except Exception as e: + frappe.throw(e) + frappe.log_error(frappe.get_traceback()) return count diff --git a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py index 1f96bade762..e2d6b58766b 100644 --- a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py +++ b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.py @@ -33,10 +33,12 @@ def reconcile(bank_transaction, payment_doctype, payment_name): return 'reconciled' def add_payment_to_transaction(transaction, payment_entry, gl_entry): + gl_amount, transaction_amount = (gl_entry.credit, transaction.debit) if gl_entry.credit > 0 else (gl_entry.debit, transaction.credit) + allocated_amount = gl_amount if gl_amount <= transaction_amount else transaction_amount transaction.append("payment_entries", { "payment_document": payment_entry.doctype, "payment_entry": payment_entry.name, - "allocated_amount": gl_entry.credit if gl_entry.credit > 0 else gl_entry.debit + "allocated_amount": allocated_amount }) transaction.save() @@ -274,7 +276,7 @@ def check_amount_vs_description(amount_matching, description_matching): result.append(am_match) continue - if hasattr(am_match, "reference_no") and hasattr(des_match, "reference_no"): + if "reference_no" in am_match and "reference_no" in des_match: if difflib.SequenceMatcher(lambda x: x == " ", am_match["reference_no"], des_match["reference_no"]).ratio() > 70: if am_match not in result: result.append(am_match) From 05fb3f2d7573e56db48ff27fd28a7930edcd2e15 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 23 Apr 2019 15:49:38 +0530 Subject: [PATCH 52/56] fix: don't allocate advances if POS --- erpnext/accounts/doctype/sales_invoice/sales_invoice.js | 1 + erpnext/controllers/accounts_controller.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 0399cf95839..1ac69b3a180 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -356,6 +356,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte set_pos_data: function() { if(this.frm.doc.is_pos) { + this.frm.set_value("allocate_advances_automatically", this.frm.doc.is_pos ? 0 : 1); if(!this.frm.doc.company) { this.frm.set_value("is_pos", 0); frappe.msgprint(__("Please specify Company to proceed")); diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index ca24cd670bd..6d2c30abb50 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -88,7 +88,7 @@ class AccountsController(TransactionBase): self.validate_paid_amount() if self.doctype in ['Purchase Invoice', 'Sales Invoice']: - if cint(self.allocate_advances_automatically): + if cint(self.allocate_advances_automatically) and not cint(self.is_pos): self.set_advances() if self.is_return: From 17e6fce4861450424258e99de354d2081910ff25 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 23 Apr 2019 15:51:28 +0530 Subject: [PATCH 53/56] fix: Rounded tax amount in salary slip --- .../employee_tax_exemption_declaration.json | 14 ++++++++++++-- erpnext/hr/doctype/salary_slip/salary_slip.py | 16 +++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/erpnext/hr/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json b/erpnext/hr/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json index 865e8219b31..899b869b90a 100644 --- a/erpnext/hr/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json +++ b/erpnext/hr/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, @@ -20,6 +21,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "employee", "fieldtype": "Link", "hidden": 0, @@ -54,6 +56,7 @@ "collapsible": 0, "columns": 0, "fetch_from": "employee.company", + "fetch_if_empty": 0, "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -87,6 +90,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "column_break_2", "fieldtype": "Column Break", "hidden": 0, @@ -118,6 +122,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "payroll_period", "fieldtype": "Link", "hidden": 0, @@ -151,6 +156,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "total_exemption_amount", "fieldtype": "Currency", "hidden": 0, @@ -184,6 +190,7 @@ "collapsible": 0, "columns": 0, "fetch_from": "employee.department", + "fetch_if_empty": 0, "fieldname": "department", "fieldtype": "Link", "hidden": 0, @@ -217,6 +224,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -249,6 +257,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "section_break_8", "fieldtype": "Section Break", "hidden": 0, @@ -280,6 +289,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "fetch_if_empty": 0, "fieldname": "declarations", "fieldtype": "Table", "hidden": 0, @@ -300,7 +310,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0, "translatable": 0, @@ -317,7 +327,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-08-21 16:15:49.363307", + "modified": "2019-04-23 15:50:48.693555", "modified_by": "Administrator", "module": "HR", "name": "Employee Tax Exemption Declaration", diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 19aaba894f1..8e09614dfbc 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -167,7 +167,7 @@ class SalarySlip(TransactionBase): if d.amount_based_on_formula: formula = d.formula.strip() if d.formula else None if formula: - amount = frappe.safe_eval(formula, self.whitelisted_globals, data) + amount = rounded(frappe.safe_eval(formula, self.whitelisted_globals, data)) if amount: data[d.abbr] = amount @@ -736,22 +736,24 @@ class SalarySlip(TransactionBase): # less paid taxes if args.get("pro_rata_tax_paid"): tax_amount -= args.get("pro_rata_tax_paid") + tax_amount = rounded(tax_amount) struct_row = self.get_salary_slip_row(args.get("tax_component")) return [struct_row, tax_amount, benefit_tax, additional_tax] - def calculate_tax_by_tax_slab(self, payroll_period, annual_earning): + def calculate_tax_by_tax_slab(self, payroll_period, annual_taxable_earning): payroll_period_obj = frappe.get_doc("Payroll Period", payroll_period) data = self.get_data_for_eval() + data.update({"annual_taxable_earning": annual_taxable_earning}) taxable_amount = 0 for slab in payroll_period_obj.taxable_salary_slabs: if slab.condition and not self.eval_tax_slab_condition(slab.condition, data): continue - if not slab.to_amount and annual_earning > slab.from_amount: - taxable_amount += (annual_earning - slab.from_amount) * slab.percent_deduction *.01 + if not slab.to_amount and annual_taxable_earning > slab.from_amount: + taxable_amount += (annual_taxable_earning - slab.from_amount) * slab.percent_deduction *.01 continue - if annual_earning > slab.from_amount and annual_earning < slab.to_amount: - taxable_amount += (annual_earning - slab.from_amount) * slab.percent_deduction *.01 - elif annual_earning > slab.from_amount and annual_earning > slab.to_amount: + if annual_taxable_earning > slab.from_amount and annual_taxable_earning < slab.to_amount: + taxable_amount += (annual_taxable_earning - slab.from_amount) * slab.percent_deduction *.01 + elif annual_taxable_earning > slab.from_amount and annual_taxable_earning > slab.to_amount: taxable_amount += (slab.to_amount - slab.from_amount) * slab.percent_deduction * .01 return taxable_amount From cba64988df527029d995db3e333f0cd9021859bf Mon Sep 17 00:00:00 2001 From: Rohan Bansal Date: Tue, 23 Apr 2019 16:06:43 +0530 Subject: [PATCH 54/56] fix(selling): Fix method to also consider return documents --- erpnext/stock/doctype/delivery_note/delivery_note.py | 5 ++--- erpnext/stock/doctype/purchase_receipt/purchase_receipt.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index a3bda0161d0..184bf17aea8 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -407,7 +407,6 @@ def get_returned_qty_map(delivery_note): @frappe.whitelist() def make_sales_invoice(source_name, target_doc=None): doc = frappe.get_doc('Delivery Note', source_name) - sales_orders = [d.against_sales_order for d in doc.items] returned_qty_map = get_returned_qty_map(source_name) invoiced_qty_map = get_invoiced_qty_map(source_name) @@ -447,7 +446,7 @@ def make_sales_invoice(source_name, target_doc=None): returned_qty = 0 return pending_qty, returned_qty - doc = get_mapped_doc("Delivery Note", source_name, { + doc = get_mapped_doc("Delivery Note", source_name, { "Delivery Note": { "doctype": "Sales Invoice", "validation": { @@ -465,7 +464,7 @@ def make_sales_invoice(source_name, target_doc=None): "cost_center": "cost_center" }, "postprocess": update_item, - "filter": lambda d: get_pending_qty(d)[0]<=0 + "filter": lambda d: get_pending_qty(d)[0] <= 0 if not doc.get("is_return") else get_pending_qty(d)[0] > 0 }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index eb821023568..94134f1df23 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -458,7 +458,7 @@ def make_purchase_invoice(source_name, target_doc=None): "asset": "asset", }, "postprocess": update_item, - "filter": lambda d: get_pending_qty(d)[0]<=0 + "filter": lambda d: get_pending_qty(d)[0] <= 0 if not doc.get("is_return") else get_pending_qty(d)[0] > 0 }, "Purchase Taxes and Charges": { "doctype": "Purchase Taxes and Charges", From 2f4193757e18045fbc0174b2348ceeee5adf3b4e Mon Sep 17 00:00:00 2001 From: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com> Date: Tue, 23 Apr 2019 17:30:11 +0530 Subject: [PATCH 55/56] fix: Stock Ledger report fix (#17342) --- erpnext/stock/report/stock_ledger/stock_ledger.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index a6210a697a9..af5e5e9f0a0 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -151,10 +151,10 @@ def get_opening_balance(filters, columns): "posting_date": filters.from_date, "posting_time": "00:00:00" }) - row = [""]*len(columns) - row[1] = _("'Opening'") - for i, v in ((9, 'qty_after_transaction'), (11, 'valuation_rate'), (12, 'stock_value')): - row[i] = last_entry.get(v, 0) + row = {} + row["item_code"] = _("'Opening'") + for dummy, v in ((9, 'qty_after_transaction'), (11, 'valuation_rate'), (12, 'stock_value')): + row[v] = last_entry.get(v, 0) return row From 6ea108f01de904b89d07d540ec5cb1cf856e9a11 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 23 Apr 2019 18:33:01 +0530 Subject: [PATCH 56/56] feat: Get invoiced item's gross margin using API --- .../report/gross_profit/gross_profit.js | 6 ++++++ .../report/gross_profit/gross_profit.py | 6 ++++++ erpnext/accounts/report/utils.py | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/erpnext/accounts/report/gross_profit/gross_profit.js b/erpnext/accounts/report/gross_profit/gross_profit.js index 1f7d24db1e4..ba17a94e8d3 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.js +++ b/erpnext/accounts/report/gross_profit/gross_profit.js @@ -23,6 +23,12 @@ frappe.query_reports["Gross Profit"] = { "fieldtype": "Date", "default": frappe.defaults.get_user_default("year_end_date") }, + { + "fieldname":"sales_invoice", + "label": __("Sales Invoice"), + "fieldtype": "Link", + "options": "Sales Invoice" + }, { "fieldname":"group_by", "label": __("Group By"), diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index e5aaafaff49..ee5a4d28e37 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -302,6 +302,12 @@ class GrossProfitGenerator(object): sales_person_cols = "" sales_team_table = "" + if self.filters.get("sales_invoice"): + conditions += " and `tabSales Invoice`.name = %(sales_invoice)s" + + if self.filters.get("item_code"): + conditions += " and `tabSales Invoice Item`.item_code = %(item_code)s" + self.si_list = frappe.db.sql(""" select `tabSales Invoice Item`.parenttype, `tabSales Invoice Item`.parent, diff --git a/erpnext/accounts/report/utils.py b/erpnext/accounts/report/utils.py index 8500aea4159..0b17c8f964a 100644 --- a/erpnext/accounts/report/utils.py +++ b/erpnext/accounts/report/utils.py @@ -135,3 +135,22 @@ def get_appropriate_company(filters): company = get_default_company() return company + +@frappe.whitelist() +def get_invoiced_item_gross_margin(sales_invoice=None, item_code=None, company=None): + from erpnext.accounts.report.gross_profit.gross_profit import GrossProfitGenerator + + sales_invoice = sales_invoice or frappe.form_dict.get('sales_invoice') + item_code = item_code or frappe.form_dict.get('item_code') + company = company or frappe.get_cached_value("Sales Invoice", sales_invoice, 'company') + + filters = { + 'sales_invoice': sales_invoice, + 'item_code': item_code, + 'company': company, + 'group_by': 'Invoice' + } + + gross_profit_data = GrossProfitGenerator(filters) + + return gross_profit_data.grouped_data