From 61f05132dbd0cd3d0ed76e04f2d45a8a6ebf1c66 Mon Sep 17 00:00:00 2001 From: Dany Robert Date: Thu, 17 Nov 2022 11:00:01 +0100 Subject: [PATCH 01/38] feat: validate repost item valuation against accounts freeze date --- .../repost_item_valuation.py | 19 +++++++++++++-- .../test_repost_item_valuation.py | 23 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index d6f9bae5da..5fc0ee094f 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -5,7 +5,7 @@ import frappe from frappe import _ from frappe.exceptions import QueryDeadlockError, QueryTimeoutError from frappe.model.document import Document -from frappe.utils import cint, get_link_to_form, get_weekday, now, nowtime +from frappe.utils import cint, get_link_to_form, get_weekday, getdate, now, nowtime from frappe.utils.user import get_users_with_role from rq.timeouts import JobTimeoutException @@ -25,6 +25,21 @@ class RepostItemValuation(Document): self.set_status(write=False) self.reset_field_values() self.set_company() + self.validate_accounts_freeze() + + def validate_accounts_freeze(self): + acc_settings = frappe.db.get_value( + 'Accounts Settings', + 'Accounts Settings', + ['acc_frozen_upto', 'frozen_accounts_modifier'], + as_dict=1 + ) + if not acc_settings.acc_frozen_upto: + return + if acc_settings.frozen_accounts_modifier and self.owner in get_users_with_role(acc_settings.frozen_accounts_modifier): + return + if getdate(self.posting_date) <= getdate(acc_settings.acc_frozen_upto): + frappe.throw(_("You cannot repost item valuation before {}").format(acc_settings.acc_frozen_upto)) def reset_field_values(self): if self.based_on == "Transaction": @@ -240,7 +255,7 @@ def _get_directly_dependent_vouchers(doc): def notify_error_to_stock_managers(doc, traceback): recipients = get_users_with_role("Stock Manager") if not recipients: - get_users_with_role("System Manager") + recipients = get_users_with_role("System Manager") subject = _("Error while reposting item valuation") message = ( diff --git a/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py index e0f2479710..dc03c79b33 100644 --- a/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py @@ -327,3 +327,26 @@ class TestRepostItemValuation(FrappeTestCase, StockTestMixin): # outstanding should not be affected sinv.reload() self.assertEqual(sinv.outstanding_amount, 100) + + def test_account_freeze_validation(self): + today = nowdate() + + riv = frappe.get_doc( + doctype="Repost Item Valuation", + item_code="_Test Item", + warehouse="_Test Warehouse - _TC", + based_on="Item and Warehouse", + posting_date=today, + posting_time="00:01:00", + ) + riv.flags.dont_run_in_test = True # keep it queued + + accounts_settings = frappe.get_doc("Accounts Settings") + accounts_settings.acc_frozen_upto = today + accounts_settings.frozen_accounts_modifier = '' + accounts_settings.save() + + self.assertRaises(frappe.ValidationError, riv.save) + + accounts_settings.acc_frozen_upto = '' + accounts_settings.save() \ No newline at end of file From be15419bd5d3481dd83c7c4fedbb010d3e0e13d9 Mon Sep 17 00:00:00 2001 From: Dany Robert Date: Thu, 17 Nov 2022 11:00:34 +0100 Subject: [PATCH 02/38] chore: pre-commit --- .../repost_item_valuation.py | 16 ++++++++++------ .../test_repost_item_valuation.py | 6 +++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index 5fc0ee094f..b62933821c 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -29,17 +29,21 @@ class RepostItemValuation(Document): def validate_accounts_freeze(self): acc_settings = frappe.db.get_value( - 'Accounts Settings', - 'Accounts Settings', - ['acc_frozen_upto', 'frozen_accounts_modifier'], - as_dict=1 + "Accounts Settings", + "Accounts Settings", + ["acc_frozen_upto", "frozen_accounts_modifier"], + as_dict=1, ) if not acc_settings.acc_frozen_upto: return - if acc_settings.frozen_accounts_modifier and self.owner in get_users_with_role(acc_settings.frozen_accounts_modifier): + if acc_settings.frozen_accounts_modifier and self.owner in get_users_with_role( + acc_settings.frozen_accounts_modifier + ): return if getdate(self.posting_date) <= getdate(acc_settings.acc_frozen_upto): - frappe.throw(_("You cannot repost item valuation before {}").format(acc_settings.acc_frozen_upto)) + frappe.throw( + _("You cannot repost item valuation before {}").format(acc_settings.acc_frozen_upto) + ) def reset_field_values(self): if self.based_on == "Transaction": diff --git a/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py index dc03c79b33..f1667757a7 100644 --- a/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py @@ -343,10 +343,10 @@ class TestRepostItemValuation(FrappeTestCase, StockTestMixin): accounts_settings = frappe.get_doc("Accounts Settings") accounts_settings.acc_frozen_upto = today - accounts_settings.frozen_accounts_modifier = '' + accounts_settings.frozen_accounts_modifier = "" accounts_settings.save() self.assertRaises(frappe.ValidationError, riv.save) - accounts_settings.acc_frozen_upto = '' - accounts_settings.save() \ No newline at end of file + accounts_settings.acc_frozen_upto = "" + accounts_settings.save() From 1a1bfc8db9a592954adbcce50af6316e7cec0b2b Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:14:30 +0100 Subject: [PATCH 03/38] feat: add doctype Incoterm --- erpnext/setup/doctype/incoterm/__init__.py | 0 erpnext/setup/doctype/incoterm/incoterm.js | 8 ++ erpnext/setup/doctype/incoterm/incoterm.json | 117 ++++++++++++++++++ erpnext/setup/doctype/incoterm/incoterm.py | 24 ++++ erpnext/setup/doctype/incoterm/incoterms.csv | 12 ++ .../setup/doctype/incoterm/test_incoterm.py | 9 ++ 6 files changed, 170 insertions(+) create mode 100644 erpnext/setup/doctype/incoterm/__init__.py create mode 100644 erpnext/setup/doctype/incoterm/incoterm.js create mode 100644 erpnext/setup/doctype/incoterm/incoterm.json create mode 100644 erpnext/setup/doctype/incoterm/incoterm.py create mode 100644 erpnext/setup/doctype/incoterm/incoterms.csv create mode 100644 erpnext/setup/doctype/incoterm/test_incoterm.py diff --git a/erpnext/setup/doctype/incoterm/__init__.py b/erpnext/setup/doctype/incoterm/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/setup/doctype/incoterm/incoterm.js b/erpnext/setup/doctype/incoterm/incoterm.js new file mode 100644 index 0000000000..bc65123dc1 --- /dev/null +++ b/erpnext/setup/doctype/incoterm/incoterm.js @@ -0,0 +1,8 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Incoterm", { +// refresh(frm) { + +// }, +// }); diff --git a/erpnext/setup/doctype/incoterm/incoterm.json b/erpnext/setup/doctype/incoterm/incoterm.json new file mode 100644 index 0000000000..5e7097dcf1 --- /dev/null +++ b/erpnext/setup/doctype/incoterm/incoterm.json @@ -0,0 +1,117 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:code", + "creation": "2022-11-17 15:17:34.717467", + "default_view": "List", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "code", + "title", + "description" + ], + "fields": [ + { + "fieldname": "code", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Code", + "length": 3, + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "title", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Title", + "reqd": 1 + }, + { + "fieldname": "description", + "fieldtype": "Long Text", + "label": "Description" + } + ], + "links": [], + "modified": "2022-11-17 17:31:49.113954", + "modified_by": "Administrator", + "module": "Setup", + "name": "Incoterm", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Sales Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "share": 1, + "write": 1 + }, + { + "read": 1, + "role": "Purchase User" + }, + { + "read": 1, + "role": "Sales User" + }, + { + "read": 1, + "role": "Accounts User" + }, + { + "read": 1, + "role": "Stock User" + } + ], + "show_title_field_in_link": 1, + "sort_field": "name", + "sort_order": "ASC", + "states": [], + "title_field": "title", + "translated_doctype": 1 +} \ No newline at end of file diff --git a/erpnext/setup/doctype/incoterm/incoterm.py b/erpnext/setup/doctype/incoterm/incoterm.py new file mode 100644 index 0000000000..7e2e622c24 --- /dev/null +++ b/erpnext/setup/doctype/incoterm/incoterm.py @@ -0,0 +1,24 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe +from frappe.model.document import Document + + +class Incoterm(Document): + pass + + +def create_incoterms(): + """Create Incoterm records from incoterms.csv.""" + import os + from csv import DictReader + + with open(os.path.join(os.path.dirname(__file__), "incoterms.csv"), "r") as f: + for incoterm in DictReader(f): + if frappe.db.exists("Incoterm", incoterm["code"]): + continue + + doc = frappe.new_doc("Incoterm") + doc.update(incoterm) + doc.save() diff --git a/erpnext/setup/doctype/incoterm/incoterms.csv b/erpnext/setup/doctype/incoterm/incoterms.csv new file mode 100644 index 0000000000..af532cff16 --- /dev/null +++ b/erpnext/setup/doctype/incoterm/incoterms.csv @@ -0,0 +1,12 @@ +code,title +EXW,Ex Works +FCA,Free Carrier +FAS,Free Alongside Ship +FOB,Free On Board +CPT,Carriage Paid To +CIP,Carriage and Insurance Paid to +CFR,Cost and Freight +CIF,"Cost, Insurance and Freight" +DAP,Delivered At Place +DPU,Delivered At Place Unloaded +DDP,Delivered Duty Paid diff --git a/erpnext/setup/doctype/incoterm/test_incoterm.py b/erpnext/setup/doctype/incoterm/test_incoterm.py new file mode 100644 index 0000000000..06b8c3bda9 --- /dev/null +++ b/erpnext/setup/doctype/incoterm/test_incoterm.py @@ -0,0 +1,9 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestIncoterm(FrappeTestCase): + pass From d2563ee97388290ee0acad09148af6f853637886 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:16:43 +0100 Subject: [PATCH 04/38] feat: create incoterms and migrate shipments --- erpnext/patches.txt | 1 + .../create_incoterms_and_migrate_shipment.py | 32 +++++++++++++++++++ erpnext/stock/doctype/shipment/shipment.json | 10 +++--- 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 2624181c19..1ca3be96b1 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -318,3 +318,4 @@ erpnext.patches.v14_0.migrate_remarks_from_gl_to_payment_ledger erpnext.patches.v13_0.update_schedule_type_in_loans erpnext.patches.v14_0.create_accounting_dimensions_for_asset_capitalization erpnext.patches.v14_0.update_tds_fields +erpnext.patches.v14_0.create_incoterms_and_migrate_shipment diff --git a/erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py b/erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py new file mode 100644 index 0000000000..fd3c071edb --- /dev/null +++ b/erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py @@ -0,0 +1,32 @@ +import frappe + +from erpnext.setup.doctype.incoterm.incoterm import create_incoterms + + +def execute(): + create_incoterms() + migrate_shipments() + + +def migrate_shipments(): + if not frappe.db.count("Shipment"): + return + + OLD_VALUES = [ + # old_value: (code, title), + "EXW (Ex Works)", + "FCA (Free Carrier)", + "FOB (Free On Board)", + "FAS (Free Alongside Ship)", + "CPT (Carriage Paid To)", + "CIP (Carriage and Insurance Paid to)", + "CFR (Cost and Freight)", + "DPU (Delivered At Place Unloaded)", + "DAP (Delivered At Place)", + "DDP (Delivered Duty Paid)", + ] + shipment = frappe.qb.DocType("Shipment") + for old_value in OLD_VALUES: + frappe.qb.update(shipment).set(shipment.incoterm, old_value[:3]).where( + shipment.incoterm == old_value + ).run() diff --git a/erpnext/stock/doctype/shipment/shipment.json b/erpnext/stock/doctype/shipment/shipment.json index a33cbc288c..53b549deec 100644 --- a/erpnext/stock/doctype/shipment/shipment.json +++ b/erpnext/stock/doctype/shipment/shipment.json @@ -412,9 +412,9 @@ }, { "fieldname": "incoterm", - "fieldtype": "Select", + "fieldtype": "Link", "label": "Incoterm", - "options": "EXW (Ex Works)\nFCA (Free Carrier)\nCPT (Carriage Paid To)\nCIP (Carriage and Insurance Paid to)\nDPU (Delivered At Place Unloaded)\nDAP (Delivered At Place)\nDDP (Delivered Duty Paid)" + "options": "Incoterm" }, { "fieldname": "shipment_delivery_note", @@ -433,10 +433,11 @@ ], "is_submittable": 1, "links": [], - "modified": "2021-04-13 17:14:18.181818", + "modified": "2022-11-17 17:23:27.025802", "modified_by": "Administrator", "module": "Stock", "name": "Shipment", + "naming_rule": "Expression (old style)", "owner": "Administrator", "permissions": [ { @@ -470,5 +471,6 @@ ], "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 -} +} \ No newline at end of file From ce83f02f24e4c0c5dd41ad78eeb882a9dcf43d58 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:17:19 +0100 Subject: [PATCH 05/38] feat: create Incoterm records after install --- erpnext/setup/install.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index 2076dde519..d3b47f985d 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -10,6 +10,7 @@ from frappe.utils import cint from erpnext.accounts.doctype.cash_flow_mapper.default_cash_flow_mapper import DEFAULT_MAPPERS from erpnext.setup.default_energy_point_rules import get_default_energy_point_rules +from erpnext.setup.doctype.incoterm.incoterm import create_incoterms from .default_success_action import get_default_success_action @@ -25,6 +26,7 @@ def after_install(): create_default_cash_flow_mapper_templates() create_default_success_action() create_default_energy_point_rules() + create_incoterms() add_company_to_session_defaults() add_standard_navbar_items() add_app_name() From 029f22c5499518c640427b2a403db970a2e839f7 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:17:59 +0100 Subject: [PATCH 06/38] feat: add incoterm to sales transactions --- .../accounts/doctype/sales_invoice/sales_invoice.json | 9 ++++++++- erpnext/selling/doctype/quotation/quotation.json | 9 ++++++++- erpnext/selling/doctype/sales_order/sales_order.json | 9 ++++++++- erpnext/stock/doctype/delivery_note/delivery_note.json | 9 ++++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index dc2f9a9bc6..18d2b5c995 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -64,6 +64,7 @@ "taxes_and_charges", "column_break_38", "shipping_rule", + "incoterm", "column_break_55", "tax_category", "section_break_40", @@ -2114,6 +2115,12 @@ "label": "Repost Required", "no_copy": 1, "read_only": 1 + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-file-text", @@ -2126,7 +2133,7 @@ "link_fieldname": "consolidated_invoice" } ], - "modified": "2022-11-15 09:33:47.870616", + "modified": "2022-11-17 17:17:10.883487", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index fa64b1625b..08918f4d61 100644 --- a/erpnext/selling/doctype/quotation/quotation.json +++ b/erpnext/selling/doctype/quotation/quotation.json @@ -48,6 +48,7 @@ "tax_category", "column_break_34", "shipping_rule", + "incoterm", "section_break_36", "taxes", "section_break_39", @@ -1052,13 +1053,19 @@ { "fieldname": "column_break_108", "fieldtype": "Column Break" + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-shopping-cart", "idx": 82, "is_submittable": 1, "links": [], - "modified": "2022-10-11 13:06:33.479650", + "modified": "2022-11-17 17:20:54.984348", "modified_by": "Administrator", "module": "Selling", "name": "Quotation", diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index e6ff39d8d4..9ec32cbfc6 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -63,6 +63,7 @@ "tax_category", "column_break_49", "shipping_rule", + "incoterm", "section_break_40", "taxes", "section_break_43", @@ -1623,13 +1624,19 @@ { "fieldname": "column_break_152", "fieldtype": "Column Break" + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-file-text", "idx": 105, "is_submittable": 1, "links": [], - "modified": "2022-10-11 13:06:10.469796", + "modified": "2022-11-17 17:22:00.413878", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 0ca3e69f76..80e4bcb640 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -62,6 +62,7 @@ "tax_category", "column_break_39", "shipping_rule", + "incoterm", "section_break_41", "taxes", "section_break_44", @@ -1381,13 +1382,19 @@ { "fieldname": "column_break_18", "fieldtype": "Column Break" + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-truck", "idx": 146, "is_submittable": 1, "links": [], - "modified": "2022-10-11 13:06:58.655635", + "modified": "2022-11-17 17:22:42.860790", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", From 77105306f2a3ff88535d7260178f871eaa9c1f1a Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:18:26 +0100 Subject: [PATCH 07/38] feat: add incoterm to purchasing transactions --- .../doctype/purchase_invoice/purchase_invoice.json | 9 ++++++++- .../doctype/purchase_order/purchase_order.json | 9 ++++++++- .../request_for_quotation.json | 14 +++++++++++--- .../supplier_quotation/supplier_quotation.json | 9 ++++++++- .../doctype/purchase_receipt/purchase_receipt.json | 9 ++++++++- 5 files changed, 43 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index 370c0fc960..1c703a4d70 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -65,6 +65,7 @@ "tax_category", "column_break_49", "shipping_rule", + "incoterm", "section_break_51", "taxes", "totals", @@ -1534,13 +1535,19 @@ "oldfieldtype": "Section Break", "options": "fa fa-file-text", "print_hide": 1 + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-file-text", "idx": 204, "is_submittable": 1, "links": [], - "modified": "2022-11-04 01:02:44.544878", + "modified": "2022-11-17 17:30:45.559785", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index ded45b866e..d8a8f50483 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -65,6 +65,7 @@ "tax_category", "column_break_50", "shipping_rule", + "incoterm", "section_break_52", "taxes", "totals", @@ -1227,13 +1228,19 @@ { "fieldname": "column_break_103", "fieldtype": "Column Break" + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-file-text", "idx": 105, "is_submittable": 1, "links": [], - "modified": "2022-11-17 12:34:36.033363", + "modified": "2022-11-17 17:28:07.729943", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json index 083cab78f7..019d45b568 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json @@ -28,6 +28,7 @@ "sec_break_email_2", "message_for_supplier", "terms_section_break", + "incoterm", "tc_name", "terms", "printing_settings", @@ -271,13 +272,19 @@ "fieldname": "schedule_date", "fieldtype": "Date", "label": "Required Date" + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-shopping-cart", "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-04-06 17:47:49.909000", + "modified": "2022-11-17 17:26:33.770993", "modified_by": "Administrator", "module": "Buying", "name": "Request for Quotation", @@ -345,5 +352,6 @@ "search_fields": "status, transaction_date", "show_name_in_global_search": 1, "sort_field": "modified", - "sort_order": "DESC" -} + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json index 16365618ca..7776ab8ec8 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json @@ -45,6 +45,7 @@ "tax_category", "column_break_36", "shipping_rule", + "incoterm", "section_break_38", "taxes", "totals", @@ -823,6 +824,12 @@ { "fieldname": "column_break_85", "fieldtype": "Column Break" + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-shopping-cart", @@ -830,7 +837,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-09-27 18:20:09.462037", + "modified": "2022-11-17 17:27:32.179686", "modified_by": "Administrator", "module": "Buying", "name": "Supplier Quotation", diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json index 3141212ee5..ab91d7c8c9 100755 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json @@ -63,6 +63,7 @@ "tax_category", "column_break_53", "shipping_rule", + "incoterm", "taxes_section", "taxes", "totals", @@ -1218,13 +1219,19 @@ { "fieldname": "column_break_104", "fieldtype": "Column Break" + }, + { + "fieldname": "incoterm", + "fieldtype": "Link", + "label": "Incoterm", + "options": "Incoterm" } ], "icon": "fa fa-truck", "idx": 261, "is_submittable": 1, "links": [], - "modified": "2022-10-11 13:02:31.776256", + "modified": "2022-11-17 17:29:30.067536", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt", From ffd287d5a69796a47c77e1cd3a2173ea5121096d Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:18:53 +0100 Subject: [PATCH 08/38] feat: add german translations for incoterm titles --- erpnext/translations/de.csv | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv index 0caea25edd..0fdd3c94a1 100644 --- a/erpnext/translations/de.csv +++ b/erpnext/translations/de.csv @@ -9903,3 +9903,14 @@ Total Asset,Aktiva, Total Liability,Verbindlichkeiten, Total Equity,Eigenkapital, Warehouse wise Stock Value,Warenwert nach Lager, +Ex Works,Ab Werk, +Free Carrier,Frei Frachtführer, +Free Alongside Ship,Frei Längsseite Schiff, +Free on Board,Frei an Bord, +Carriage Paid To,Frachtfrei, +Carriage and Insurance Paid to,Frachtfrei versichert, +Cost and Freight,Kosten und Fracht, +"Cost, Insurance and Freight","Kosten, Versicherung und Fracht", +Delivered at Place,Geliefert benannter Ort, +Delivered at Place Unloaded,Geliefert benannter Ort entladen, +Delivered Duty Paid,Geliefert verzollt, From a5966b6f8456507a9d63f9bab48362a4d95a44d6 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:37:04 +0100 Subject: [PATCH 09/38] feat: add connections to Incoterm doctype --- erpnext/setup/doctype/incoterm/incoterm.json | 55 +++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/erpnext/setup/doctype/incoterm/incoterm.json b/erpnext/setup/doctype/incoterm/incoterm.json index 5e7097dcf1..c547b7c4ff 100644 --- a/erpnext/setup/doctype/incoterm/incoterm.json +++ b/erpnext/setup/doctype/incoterm/incoterm.json @@ -35,8 +35,59 @@ "label": "Description" } ], - "links": [], - "modified": "2022-11-17 17:31:49.113954", + "links": [ + { + "group": "Selling", + "link_doctype": "Quotation", + "link_fieldname": "incoterm" + }, + { + "group": "Selling", + "link_doctype": "Sales Order", + "link_fieldname": "incoterm" + }, + { + "group": "Buying", + "link_doctype": "Request for Quotation", + "link_fieldname": "incoterm" + }, + { + "group": "Buying", + "link_doctype": "Supplier Quotation", + "link_fieldname": "incoterm" + }, + { + "group": "Buying", + "link_doctype": "Purchase Order", + "link_fieldname": "incoterm" + }, + { + "group": "Stock", + "link_doctype": "Delivery Note", + "link_fieldname": "incoterm" + }, + { + "group": "Stock", + "link_doctype": "Purchase Receipt", + "link_fieldname": "incoterm" + }, + { + "group": "Stock", + "link_doctype": "Shipment", + "link_fieldname": "incoterm" + }, + { + "group": "Accounts", + "link_doctype": "Sales Invoice", + "link_fieldname": "incoterm" + }, + { + "group": "Accounts", + "link_doctype": "Purchase Invoice", + "link_fieldname": "incoterm" + } + ], + "modified": "2022-11-17 22:35:52.084553", "modified_by": "Administrator", "module": "Setup", "name": "Incoterm", From 491857b3c88a7e4031d4d38f89bff18776dbfd57 Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Fri, 18 Nov 2022 10:57:52 +0100 Subject: [PATCH 10/38] fix: remove obsolete comment --- erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py b/erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py index fd3c071edb..6e1e09ad14 100644 --- a/erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py +++ b/erpnext/patches/v14_0/create_incoterms_and_migrate_shipment.py @@ -13,7 +13,6 @@ def migrate_shipments(): return OLD_VALUES = [ - # old_value: (code, title), "EXW (Ex Works)", "FCA (Free Carrier)", "FOB (Free On Board)", From b482e3876dccb2547330b95c1c8d4f2cf7039918 Mon Sep 17 00:00:00 2001 From: Dany Robert Date: Wed, 23 Nov 2022 18:59:15 +0530 Subject: [PATCH 11/38] fix: check for session user rather than owner --- .../repost_item_valuation/repost_item_valuation.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index b62933821c..a98d16e390 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -36,11 +36,12 @@ class RepostItemValuation(Document): ) if not acc_settings.acc_frozen_upto: return - if acc_settings.frozen_accounts_modifier and self.owner in get_users_with_role( - acc_settings.frozen_accounts_modifier - ): - return if getdate(self.posting_date) <= getdate(acc_settings.acc_frozen_upto): + if acc_settings.frozen_accounts_modifier and frappe.session.user in get_users_with_role( + acc_settings.frozen_accounts_modifier + ): + frappe.msgprint(_("Caution: This might alter frozen accounts.")) + return frappe.throw( _("You cannot repost item valuation before {}").format(acc_settings.acc_frozen_upto) ) From 88a0aa4077b6cd96800a813e5ba163b573d01f47 Mon Sep 17 00:00:00 2001 From: Dany Robert Date: Wed, 23 Nov 2022 19:04:11 +0530 Subject: [PATCH 12/38] chore: pre-commit --- .../doctype/repost_item_valuation/repost_item_valuation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index a98d16e390..8e914e6b80 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -37,8 +37,9 @@ class RepostItemValuation(Document): if not acc_settings.acc_frozen_upto: return if getdate(self.posting_date) <= getdate(acc_settings.acc_frozen_upto): - if acc_settings.frozen_accounts_modifier and frappe.session.user in get_users_with_role( + if ( acc_settings.frozen_accounts_modifier + and frappe.session.user in get_users_with_role(acc_settings.frozen_accounts_modifier) ): frappe.msgprint(_("Caution: This might alter frozen accounts.")) return From 95a620a30d67e6b2ac5137d87efa97f3f149b95f Mon Sep 17 00:00:00 2001 From: Sabu Siyad Date: Thu, 24 Nov 2022 15:40:05 +0530 Subject: [PATCH 13/38] fix(pos): warehouse should be in company Signed-off-by: Sabu Siyad --- erpnext/accounts/doctype/pos_invoice/pos_invoice.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js index 15c292211c..c868d9ec7e 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js @@ -12,6 +12,8 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex company() { erpnext.accounts.dimensions.update_dimension(this.frm, this.frm.doctype); + this.frm.set_value("set_warehouse", ""); + this.frm.set_value("taxes_and_charges", ""); } onload(doc) { From 4ad0e2ed7eb925c893a84ef00964fbc1cab09cc6 Mon Sep 17 00:00:00 2001 From: Sabu Siyad Date: Thu, 24 Nov 2022 16:11:26 +0530 Subject: [PATCH 14/38] feat(pos): invoice: fitler warehouse by company Signed-off-by: Sabu Siyad --- erpnext/accounts/doctype/pos_invoice/pos_invoice.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js index c868d9ec7e..40df6187d2 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js @@ -19,11 +19,20 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex onload(doc) { super.onload(); this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log', 'POS Closing Entry']; + if(doc.__islocal && doc.is_pos && frappe.get_route_str() !== 'point-of-sale') { this.frm.script_manager.trigger("is_pos"); this.frm.refresh_fields(); } + this.frm.set_query("set_warehouse", function(doc) { + return { + filters: { + company: doc.company ? doc.company : '', + } + } + }); + erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); } From 7fd2639e68a3a2c527e5512ca318e0b2cad59897 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Fri, 25 Nov 2022 00:21:33 +0100 Subject: [PATCH 15/38] feat: german tax templates --- .../setup_wizard/data/country_wise_tax.json | 2774 +++++++++++++++-- 1 file changed, 2574 insertions(+), 200 deletions(-) diff --git a/erpnext/setup/setup_wizard/data/country_wise_tax.json b/erpnext/setup/setup_wizard/data/country_wise_tax.json index 98817253a4..45e39c5bd0 100644 --- a/erpnext/setup/setup_wizard/data/country_wise_tax.json +++ b/erpnext/setup/setup_wizard/data/country_wise_tax.json @@ -481,136 +481,461 @@ }, "Germany": { - "tax_categories": [ - "Umsatzsteuer", - "Vorsteuer" - ], + "tax_categories": [], "chart_of_accounts": { "SKR04 mit Kontonummern": { "sales_tax_templates": [ { - "title": "Umsatzsteuer", - "tax_category": "Umsatzsteuer", + "title": "Lieferung oder sonstige Leistung im Inland", "is_default": 1, "taxes": [ { "account_head": { - "account_name": "Umsatzsteuer 19%", + "account_name": "Umsatzsteuer 19 %", "account_number": "3806", "tax_rate": 19.00 }, + "description": "Umsatzsteuer 19 %", "rate": 0.00 }, { "account_head": { - "account_name": "Umsatzsteuer 7%", + "account_name": "Umsatzsteuer 7 %", "account_number": "3801", "tax_rate": 7.00 }, - "rate": 0.00 - } - ] - } - ], - "purchase_tax_templates": [ - { - "title": "Vorsteuer", - "tax_category": "Vorsteuer", - "is_default": 1, - "taxes": [ - { - "account_head": { - "account_name": "Abziehbare Vorsteuer 19%", - "account_number": "1406", - "root_type": "Asset", - "tax_rate": 19.00 - }, - "rate": 0.00 - }, - { - "account_head": { - "account_name": "Abziehbare Vorsteuer 7%", - "account_number": "1401", - "root_type": "Asset", - "tax_rate": 7.00 - }, + "description": "Umsatzsteuer 7 %", "rate": 0.00 } ] }, { - "title": "Innergemeinschaftlicher Erwerb 19% Umsatzsteuer und 19% Vorsteuer", + "title": "Lieferung an Unternehmen in der EU", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an Unternehmen in der EU", + "is_default": 0, + "taxes": [] + }, + { + "title": "Lieferung oder sonstige Leistung an nicht-Unternehmen in der EU", + "is_default": 0, "taxes": [ { "account_head": { - "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19%", - "account_number": "1407", - "root_type": "Asset", + "account_name": "Umsatzsteuer 19 %", + "account_number": "3806", "tax_rate": 19.00 }, - "add_deduct_tax": "Add" + "description": "Umsatzsteuer 19 %", + "rate": 0.00 }, { "account_head": { - "account_name": "Umsatzsteuer nach § 13b UStG 19%", + "account_name": "Umsatzsteuer 7 %", + "account_number": "3801", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung in Drittland", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an Unternehmen in Drittland", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an nicht-Unternehmen in Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Umsatzsteuer 19 %", + "account_number": "3806", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "3801", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Bauleistungen nach § 13b UStG", + "is_default": 0, + "taxes": [] + } + ], + "purchase_tax_templates": [ + { + "title": "Lieferung aus dem Inland", + "is_default": 1, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1406", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1401", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus dem Inland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1406", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1401", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung aus der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1404", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1402", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "3804", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "3802", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", "account_number": "3837", "root_type": "Liability", "tax_rate": 19.00 }, - "add_deduct_tax": "Deduct" + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "3835", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "3837", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "3835", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung aus Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1406", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1401", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1433", + "root_type": "Asset" + }, + "description": "Entstandene Einfuhrumsatzsteuer", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Bauleistungen nach § 13b UStG", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "3837", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "3835", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", + "rate": 0.00 } ] } ], "item_tax_templates": [ { - "title": "Umsatzsteuer 19%", + "title": "19 %", "taxes": [ { "tax_type": { - "account_name": "Umsatzsteuer 19%", + "account_name": "Umsatzsteuer 19 %", "account_number": "3806", + "root_type": "Liability", "tax_rate": 19.00 }, "tax_rate": 19.00 }, { "tax_type": { - "account_name": "Umsatzsteuer 7%", + "account_name": "Umsatzsteuer 7 %", "account_number": "3801", + "root_type": "Liability", "tax_rate": 7.00 }, "tax_rate": 0.00 - } - ] - }, - { - "title": "Umsatzsteuer 7%", - "taxes": [ - { - "tax_type": { - "account_name": "Umsatzsteuer 19%", - "account_number": "3806", - "tax_rate": 19.00 - }, - "tax_rate": 0.00 }, { "tax_type": { - "account_name": "Umsatzsteuer 7%", - "account_number": "3801", - "tax_rate": 7.00 + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "3804", + "root_type": "Liability", + "tax_rate": 19.00 }, - "tax_rate": 7.00 - } - ] - }, - { - "title": "Vorsteuer 19%", - "taxes": [ + "tax_rate": 19.00 + }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 19%", + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "3802", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "3837", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "3835", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", "account_number": "1406", "root_type": "Asset", "tax_rate": 19.00 @@ -619,21 +944,119 @@ }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 7%", + "account_name": "Abziehbare Vorsteuer 7 %", "account_number": "1401", "root_type": "Asset", "tax_rate": 7.00 }, "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1404", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1402", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1433", + "root_type": "Asset" + }, + "tax_rate": 19.00 } ] }, { - "title": "Vorsteuer 7%", + "title": "7 %", "taxes": [ { "tax_type": { - "account_name": "Abziehbare Vorsteuer 19%", + "account_name": "Umsatzsteuer 19 %", + "account_number": "3806", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "3801", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "3804", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "3802", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "3837", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "3835", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", "account_number": "1406", "root_type": "Asset", "tax_rate": 19.00 @@ -642,12 +1065,177 @@ }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 7%", + "account_name": "Abziehbare Vorsteuer 7 %", "account_number": "1401", "root_type": "Asset", "tax_rate": 7.00 }, "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1404", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1402", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1433", + "root_type": "Asset" + }, + "tax_rate": 7.00 + } + ] + }, + { + "title": "0 %", + "taxes": [ + { + "tax_type": { + "account_name": "Umsatzsteuer 19 %", + "account_number": "3806", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "3801", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "3804", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "3802", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "3837", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "3835", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1406", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1401", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1404", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1402", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1433", + "root_type": "Asset" + }, + "tax_rate": 0.00 } ] } @@ -656,51 +1244,390 @@ "SKR03 mit Kontonummern": { "sales_tax_templates": [ { - "title": "Umsatzsteuer", - "tax_category": "Umsatzsteuer", + "title": "Lieferung oder sonstige Leistung im Inland", "is_default": 1, "taxes": [ { "account_head": { - "account_name": "Umsatzsteuer 19%", + "account_name": "Umsatzsteuer 19 %", "account_number": "1776", "tax_rate": 19.00 }, + "description": "Umsatzsteuer 19 %", "rate": 0.00 }, { "account_head": { - "account_name": "Umsatzsteuer 7%", + "account_name": "Umsatzsteuer 7 %", "account_number": "1771", "tax_rate": 7.00 }, + "description": "Umsatzsteuer 7 %", "rate": 0.00 } ] + }, + { + "title": "Lieferung an Unternehmen in der EU", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an Unternehmen in der EU", + "is_default": 0, + "taxes": [] + }, + { + "title": "Lieferung oder sonstige Leistung an nicht-Unternehmen in der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Umsatzsteuer 19 %", + "account_number": "1776", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "1771", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung in Drittland", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an Unternehmen in Drittland", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an nicht-Unternehmen in Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Umsatzsteuer 19 %", + "account_number": "1776", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "1771", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Bauleistungen nach § 13b UStG", + "is_default": 0, + "taxes": [] } ], "purchase_tax_templates": [ { - "title": "Vorsteuer", - "tax_category": "Vorsteuer", + "title": "Lieferung aus dem Inland", "is_default": 1, "taxes": [ { "account_head": { - "account_name": "Abziehbare Vorsteuer 19%", + "account_name": "Abziehbare Vorsteuer 19 %", "account_number": "1576", "root_type": "Asset", "tax_rate": 19.00 }, + "description": "Abziehbare Vorsteuer 19 %", "rate": 0.00 }, { "account_head": { - "account_name": "Abziehbare Vorsteuer 7%", + "account_name": "Abziehbare Vorsteuer 7 %", "account_number": "1571", "root_type": "Asset", "tax_rate": 7.00 }, + "description": "Abziehbare Vorsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus dem Inland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1576", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1571", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung aus der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1574", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1572", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1774", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1772", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "1787", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "1785", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "1787", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "1785", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung aus Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1576", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1571", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1588", + "root_type": "Asset" + }, + "description": "Entstandene Einfuhrumsatzsteuer", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Bauleistungen nach § 13b UStG", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "1787", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "1785", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", "rate": 0.00 } ] @@ -708,53 +1635,65 @@ ], "item_tax_templates": [ { - "title": "Umsatzsteuer 19%", + "title": "19 %", "taxes": [ { "tax_type": { - "account_name": "Umsatzsteuer 19%", + "account_name": "Umsatzsteuer 19 %", "account_number": "1776", + "root_type": "Liability", "tax_rate": 19.00 }, "tax_rate": 19.00 }, { "tax_type": { - "account_name": "Umsatzsteuer 7%", + "account_name": "Umsatzsteuer 7 %", "account_number": "1771", + "root_type": "Liability", "tax_rate": 7.00 }, "tax_rate": 0.00 - } - ] - }, - { - "title": "Umsatzsteuer 7%", - "taxes": [ - { - "tax_type": { - "account_name": "Umsatzsteuer 19%", - "account_number": "1776", - "tax_rate": 19.00 - }, - "tax_rate": 0.00 }, { "tax_type": { - "account_name": "Umsatzsteuer 7%", - "account_number": "1771", - "tax_rate": 7.00 + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1774", + "root_type": "Liability", + "tax_rate": 19.00 }, - "tax_rate": 7.00 - } - ] - }, - { - "title": "Vorsteuer 19%", - "taxes": [ + "tax_rate": 19.00 + }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 19%", + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1772", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "1787", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "1785", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", "account_number": "1576", "root_type": "Asset", "tax_rate": 19.00 @@ -763,21 +1702,119 @@ }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 7%", + "account_name": "Abziehbare Vorsteuer 7 %", "account_number": "1571", "root_type": "Asset", "tax_rate": 7.00 }, "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1574", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1572", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1588", + "root_type": "Asset" + }, + "tax_rate": 19.00 } ] }, { - "title": "Vorsteuer 7%", + "title": "7 %", "taxes": [ { "tax_type": { - "account_name": "Abziehbare Vorsteuer 19%", + "account_name": "Umsatzsteuer 19 %", + "account_number": "1776", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "1771", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1774", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1772", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "1787", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "1785", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", "account_number": "1576", "root_type": "Asset", "tax_rate": 19.00 @@ -786,12 +1823,177 @@ }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 7%", + "account_name": "Abziehbare Vorsteuer 7 %", "account_number": "1571", "root_type": "Asset", "tax_rate": 7.00 }, "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1574", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1572", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1588", + "root_type": "Asset" + }, + "tax_rate": 7.00 + } + ] + }, + { + "title": "0 %", + "taxes": [ + { + "tax_type": { + "account_name": "Umsatzsteuer 19 %", + "account_number": "1776", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "1771", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1774", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1772", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "account_number": "1787", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "account_number": "1785", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1576", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1571", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "account_number": "1574", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "account_number": "1572", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1588", + "root_type": "Asset" + }, + "tax_rate": 0.00 } ] } @@ -800,51 +2002,390 @@ "Standard with Numbers": { "sales_tax_templates": [ { - "title": "Umsatzsteuer", - "tax_category": "Umsatzsteuer", + "title": "Lieferung oder sonstige Leistung im Inland", "is_default": 1, "taxes": [ { "account_head": { - "account_name": "Umsatzsteuer 19%", - "account_number": "2301", + "account_name": "Umsatzsteuer 19 %", + "account_number": "2320", "tax_rate": 19.00 }, + "description": "Umsatzsteuer 19 %", "rate": 0.00 }, { "account_head": { - "account_name": "Umsatzsteuer 7%", - "account_number": "2302", + "account_name": "Umsatzsteuer 7 %", + "account_number": "2321", "tax_rate": 7.00 }, + "description": "Umsatzsteuer 7 %", "rate": 0.00 } ] + }, + { + "title": "Lieferung an Unternehmen in der EU", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an Unternehmen in der EU", + "is_default": 0, + "taxes": [] + }, + { + "title": "Lieferung oder sonstige Leistung an nicht-Unternehmen in der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Umsatzsteuer 19 %", + "account_number": "2320", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "2321", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung in Drittland", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an Unternehmen in Drittland", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an nicht-Unternehmen in Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Umsatzsteuer 19 %", + "account_number": "2320", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "2321", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Bauleistungen nach § 13b UStG", + "is_default": 0, + "taxes": [] } ], "purchase_tax_templates": [ { - "title": "Vorsteuer", - "tax_category": "Vorsteuer", + "title": "Lieferung aus dem Inland", "is_default": 1, "taxes": [ { "account_head": { - "account_name": "Abziehbare Vorsteuer 19%", - "account_number": "1501", + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1520", "root_type": "Asset", "tax_rate": 19.00 }, + "description": "Abziehbare Vorsteuer 19 %", "rate": 0.00 }, { "account_head": { - "account_name": "Abziehbare Vorsteuer 7%", - "account_number": "1502", + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1521", "root_type": "Asset", "tax_rate": 7.00 }, + "description": "Abziehbare Vorsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus dem Inland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1520", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1521", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung aus der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 19 %", + "account_number": "1530", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 7 %", + "account_number": "1531", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 7 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 19 %", + "account_number": "2330", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 7 %", + "account_number": "2331", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 7 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19%", + "account_number": "2340", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19%", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 7%", + "account_number": "2341", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 7%", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19%", + "account_number": "2340", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19%", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 7%", + "account_number": "2341", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 7%", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung aus Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1520", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1521", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1550", + "root_type": "Asset" + }, + "description": "Entstandene Einfuhrumsatzsteuer", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Bauleistungen nach § 13b UStG", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19%", + "account_number": "2340", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19%", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 7%", + "account_number": "2341", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 7%", + "add_deduct_tax": "Deduct", "rate": 0.00 } ] @@ -852,54 +2393,66 @@ ], "item_tax_templates": [ { - "title": "Umsatzsteuer 19%", + "title": "19%", "taxes": [ { "tax_type": { - "account_name": "Umsatzsteuer 19%", - "account_number": "2301", + "account_name": "Umsatzsteuer 19 %", + "account_number": "2320", + "root_type": "Liability", "tax_rate": 19.00 }, "tax_rate": 19.00 }, { "tax_type": { - "account_name": "Umsatzsteuer 7%", - "account_number": "2302", + "account_name": "Umsatzsteuer 7 %", + "account_number": "2321", + "root_type": "Liability", "tax_rate": 7.00 }, "tax_rate": 0.00 - } - ] - }, - { - "title": "Umsatzsteuer 7%", - "taxes": [ - { - "tax_type": { - "account_name": "Umsatzsteuer 19%", - "account_number": "2301", - "tax_rate": 19.00 - }, - "tax_rate": 0.00 }, { "tax_type": { - "account_name": "Umsatzsteuer 7%", - "account_number": "2302", - "tax_rate": 7.00 + "account_name": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 19 %", + "account_number": "2330", + "root_type": "Liability", + "tax_rate": 19.00 }, - "tax_rate": 7.00 - } - ] - }, - { - "title": "Vorsteuer 19%", - "taxes": [ + "tax_rate": 19.00 + }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 19%", - "account_number": "1501", + "account_name": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 7 %", + "account_number": "2331", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19%", + "account_number": "2340", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 7%", + "account_number": "2341", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1520", "root_type": "Asset", "tax_rate": 19.00 }, @@ -907,22 +2460,120 @@ }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 7%", - "account_number": "1502", + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1521", "root_type": "Asset", "tax_rate": 7.00 }, "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 19 %", + "account_number": "1530", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 7 %", + "account_number": "1531", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1550", + "root_type": "Asset" + }, + "tax_rate": 19.00 } ] }, { - "title": "Vorsteuer 7%", + "title": "7%", "taxes": [ { "tax_type": { - "account_name": "Abziehbare Vorsteuer 19%", - "account_number": "1501", + "account_name": "Umsatzsteuer 19 %", + "account_number": "2320", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "2321", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 19 %", + "account_number": "2330", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 7 %", + "account_number": "2331", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19%", + "account_number": "2340", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 7%", + "account_number": "2341", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1520", "root_type": "Asset", "tax_rate": 19.00 }, @@ -930,12 +2581,177 @@ }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 7%", - "account_number": "1502", + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1521", "root_type": "Asset", "tax_rate": 7.00 }, "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 19 %", + "account_number": "1530", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 7 %", + "account_number": "1531", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1550", + "root_type": "Asset" + }, + "tax_rate": 7.00 + } + ] + }, + { + "title": "0 %", + "taxes": [ + { + "tax_type": { + "account_name": "Umsatzsteuer 19 %", + "account_number": "2320", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer 7 %", + "account_number": "2321", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 19 %", + "account_number": "2330", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichen Erwerb 7 %", + "account_number": "2331", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19%", + "account_number": "2340", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 7%", + "account_number": "2341", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", + "account_number": "1520", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 7 %", + "account_number": "1521", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 19 %", + "account_number": "1530", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichen Erwerb 7 %", + "account_number": "1531", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19%", + "account_number": "1540", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 7%", + "account_number": "1541", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "account_number": "1550", + "root_type": "Asset" + }, + "tax_rate": 0.00 } ] } @@ -944,47 +2760,361 @@ "*": { "sales_tax_templates": [ { - "title": "Umsatzsteuer", - "tax_category": "Umsatzsteuer", + "title": "Lieferung oder sonstige Leistung im Inland", "is_default": 1, "taxes": [ { "account_head": { - "account_name": "Umsatzsteuer 19%", + "account_name": "Umsatzsteuer 19 %", "tax_rate": 19.00 }, + "description": "Umsatzsteuer 19 %", "rate": 0.00 }, { "account_head": { - "account_name": "Umsatzsteuer 7%", + "account_name": "Umsatzsteuer 7 %", "tax_rate": 7.00 }, + "description": "Umsatzsteuer 7 %", "rate": 0.00 } ] + }, + { + "title": "Lieferung an Unternehmen in der EU", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an Unternehmen in der EU", + "is_default": 0, + "taxes": [] + }, + { + "title": "Lieferung oder sonstige Leistung an nicht-Unternehmen in der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Umsatzsteuer 19 %", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer 7 %", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung in Drittland", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an Unternehmen in Drittland", + "is_default": 0, + "taxes": [] + }, + { + "title": "Sonstige Leistung an nicht-Unternehmen in Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Umsatzsteuer 19 %", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer 7 %", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Bauleistungen nach § 13b UStG", + "is_default": 0, + "taxes": [] } ], "purchase_tax_templates": [ { - "title": "Vorsteuer 19%", - "tax_category": "Vorsteuer", + "title": "Lieferung aus dem Inland", "is_default": 1, "taxes": [ { "account_head": { - "account_name": "Abziehbare Vorsteuer 19%", - "tax_rate": 19.00, - "root_type": "Asset" + "account_name": "Abziehbare Vorsteuer 19 %", + "root_type": "Asset", + "tax_rate": 19.00 }, + "description": "Abziehbare Vorsteuer 19 %", "rate": 0.00 }, { "account_head": { - "account_name": "Abziehbare Vorsteuer 7%", + "account_name": "Abziehbare Vorsteuer 7 %", "root_type": "Asset", "tax_rate": 7.00 }, + "description": "Abziehbare Vorsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus dem Inland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung aus der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus der EU", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Sonstige Leistung aus Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Lieferung aus Drittland", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer 7 %", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer 7 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "root_type": "Asset" + }, + "description": "Entstandene Einfuhrumsatzsteuer", + "add_deduct_tax": "Deduct", + "rate": 0.00 + } + ] + }, + { + "title": "Bauleistungen nach § 13b UStG", + "is_default": 0, + "taxes": [ + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "description": "Abziehbare Vorsteuer nach § 13b UStG", + "add_deduct_tax": "Add", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "description": "Umsatzsteuer nach § 13b UStG 19 %", + "add_deduct_tax": "Deduct", + "rate": 0.00 + }, + { + "account_head": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "description": "Umsatzsteuer nach § 13b UStG", + "add_deduct_tax": "Deduct", "rate": 0.00 } ] @@ -992,49 +3122,59 @@ ], "item_tax_templates": [ { - "title": "Umsatzsteuer 19%", + "title": "19 %", "taxes": [ { "tax_type": { - "account_name": "Umsatzsteuer 19%", + "account_name": "Umsatzsteuer 19 %", + "root_type": "Liability", "tax_rate": 19.00 }, "tax_rate": 19.00 }, { "tax_type": { - "account_name": "Umsatzsteuer 7%", + "account_name": "Umsatzsteuer 7 %", + "root_type": "Liability", "tax_rate": 7.00 }, "tax_rate": 0.00 - } - ] - }, - { - "title": "Umsatzsteuer 7%", - "taxes": [ - { - "tax_type": { - "account_name": "Umsatzsteuer 19%", - "tax_rate": 19.00 - }, - "tax_rate": 0.00 }, { "tax_type": { - "account_name": "Umsatzsteuer 7%", - "tax_rate": 7.00 + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "root_type": "Liability", + "tax_rate": 19.00 }, - "tax_rate": 7.00 - } - ] - }, - { - "title": "Vorsteuer 19%", - "taxes": [ + "tax_rate": 19.00 + }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 19%", + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", "root_type": "Asset", "tax_rate": 19.00 }, @@ -1042,20 +3182,107 @@ }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 7%", + "account_name": "Abziehbare Vorsteuer 7 %", "root_type": "Asset", "tax_rate": 7.00 }, "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 19.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "root_type": "Asset" + }, + "tax_rate": 19.00 } ] }, { - "title": "Vorsteuer 7%", + "title": "7 %", "taxes": [ { "tax_type": { - "account_name": "Abziehbare Vorsteuer 19%", + "account_name": "Umsatzsteuer 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer 7 %", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", "root_type": "Asset", "tax_rate": 19.00 }, @@ -1063,11 +3290,158 @@ }, { "tax_type": { - "account_name": "Abziehbare Vorsteuer 7%", + "account_name": "Abziehbare Vorsteuer 7 %", "root_type": "Asset", "tax_rate": 7.00 }, "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 7.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "root_type": "Asset" + }, + "tax_rate": 7.00 + } + ] + }, + { + "title": "0%", + "taxes": [ + { + "tax_type": { + "account_name": "Umsatzsteuer 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer 7 %", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer aus innergemeinschaftlichem Erwerb", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG 19 %", + "root_type": "Liability", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Umsatzsteuer nach § 13b UStG", + "root_type": "Liability", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer 7 %", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG 19 %", + "root_type": "Asset", + "tax_rate": 19.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Abziehbare Vorsteuer nach § 13b UStG", + "root_type": "Asset", + "tax_rate": 7.00 + }, + "tax_rate": 0.00 + }, + { + "tax_type": { + "account_name": "Entstandene Einfuhrumsatzsteuer", + "root_type": "Asset" + }, + "tax_rate": 0.00 } ] } From fe87c27acdd54ac5ec1061eedcabbba148e60d5d Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Fri, 25 Nov 2022 13:20:01 +0530 Subject: [PATCH 16/38] fix: disbursable amount on currrent security price --- .../doctype/loan_disbursement/loan_disbursement.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py b/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py index b73dee26b9..51bf327c81 100644 --- a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py +++ b/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py @@ -191,7 +191,9 @@ def get_total_pledged_security_value(loan): for security, qty in pledged_securities.items(): after_haircut_percentage = 100 - hair_cut_map.get(security) - security_value += (loan_security_price_map.get(security) * qty * after_haircut_percentage) / 100 + security_value += ( + loan_security_price_map.get(security, 0) * qty * after_haircut_percentage + ) / 100 return security_value From cc63415887071b7675b95b6698884fd61847ab73 Mon Sep 17 00:00:00 2001 From: Sabu Siyad Date: Fri, 25 Nov 2022 15:06:06 +0530 Subject: [PATCH 17/38] fix(pos): filter on customer groups Signed-off-by: Sabu Siyad --- .../doctype/pos_invoice/pos_invoice.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js index 15c292211c..fa11b7d9d8 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js @@ -5,6 +5,8 @@ frappe.provide("erpnext.accounts"); erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnext.selling.SellingController { + settings = {}; + setup(doc) { this.setup_posting_date_time_check(); super.setup(doc); @@ -25,8 +27,13 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); } + onload_post_render(frm) { + this.pos_profile(frm); + } + refresh(doc) { super.refresh(); + if (doc.docstatus == 1 && !doc.is_return) { this.frm.add_custom_button(__('Return'), this.make_sales_return, __('Create')); this.frm.page.set_inner_btn_group_as_primary(__('Create')); @@ -36,6 +43,18 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex this.frm.return_print_format = "Sales Invoice Return"; this.frm.set_value('consolidated_invoice', ''); } + + this.frm.set_query("customer", (function () { + const customer_groups = this.settings?.customer_groups; + + if (!customer_groups?.length) return {}; + + return { + filters: { + customer_group: ["in", customer_groups], + } + } + }).bind(this)); } is_pos() { @@ -88,6 +107,25 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex }); } + pos_profile(frm) { + if (!frm.pos_profile || frm.pos_profile == '') { + this.update_customer_groups_settings([]); + return; + } + + frappe.call({ + method: "erpnext.selling.page.point_of_sale.point_of_sale.get_pos_profile_data", + args: { "pos_profile": frm.pos_profile }, + callback: ({ message: profile }) => { + this.update_customer_groups_settings(profile?.customer_groups); + }, + }); + } + + update_customer_groups_settings(customer_groups) { + this.settings.customer_groups = customer_groups?.map((group) => group.name) + } + amount(){ this.write_off_outstanding_amount_automatically() } From 2c18a95115baf3cbc79a2c2d7ba48b862425f159 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 25 Nov 2022 16:23:20 +0530 Subject: [PATCH 18/38] fix: remove duplicate schema --- erpnext/templates/generators/item/item.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/templates/generators/item/item.html b/erpnext/templates/generators/item/item.html index 4070d40d47..358c1c52e5 100644 --- a/erpnext/templates/generators/item/item.html +++ b/erpnext/templates/generators/item/item.html @@ -32,7 +32,7 @@
-
+
{% if show_tabs and tabs %}
From 0f87d329d616c65249e180c57011cda4955e1e23 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 25 Nov 2022 17:03:00 +0530 Subject: [PATCH 19/38] fix: only show serial no batch selector only once --- erpnext/stock/doctype/stock_entry/stock_entry.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index 266ea5f674..b9102445e0 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -1079,7 +1079,8 @@ erpnext.stock.select_batch_and_serial_no = (frm, item) => { if (frm.doc.purpose === 'Material Receipt') return; frappe.require("assets/erpnext/js/utils/serial_no_batch_selector.js", function() { - new erpnext.SerialNoBatchSelector({ + if (frm.batch_selector?.dialog?.display) return; + frm.batch_selector = new erpnext.SerialNoBatchSelector({ frm: frm, item: item, warehouse_details: get_warehouse_type_and_name(item), From 8cb7112e72b9a463b4a50bdb679e3eabfd7cc9c4 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 25 Nov 2022 23:40:05 +0530 Subject: [PATCH 20/38] fix: production plan UX --- .../material_request_plan_item.json | 5 +- .../production_plan/production_plan.js | 93 ++++++++++--------- .../production_plan/production_plan.json | 25 +++-- .../production_plan/production_plan.py | 3 + .../production_plan_item.json | 4 +- 5 files changed, 78 insertions(+), 52 deletions(-) diff --git a/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json b/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json index 27d7c4175e..8c61d545b8 100644 --- a/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json +++ b/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json @@ -47,7 +47,7 @@ "fieldtype": "Link", "in_list_view": 1, "in_standard_filter": 1, - "label": "Warehouse", + "label": "For Warehouse", "options": "Warehouse", "reqd": 1 }, @@ -173,7 +173,7 @@ ], "istable": 1, "links": [], - "modified": "2021-08-23 18:17:58.400462", + "modified": "2022-11-26 14:59:25.879631", "modified_by": "Administrator", "module": "Manufacturing", "name": "Material Request Plan Item", @@ -182,5 +182,6 @@ "quick_entry": 1, "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.js b/erpnext/manufacturing/doctype/production_plan/production_plan.js index 59ddf1f0c5..62715e6565 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.js +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.js @@ -3,13 +3,13 @@ frappe.ui.form.on('Production Plan', { - before_save: function(frm) { + before_save(frm) { // preserve temporary names on production plan item to re-link sub-assembly items frm.doc.po_items.forEach(item => { item.temporary_name = item.name; }); }, - setup: function(frm) { + setup(frm) { frm.custom_make_buttons = { 'Work Order': 'Work Order / Subcontract PO', 'Material Request': 'Material Request', @@ -70,7 +70,7 @@ frappe.ui.form.on('Production Plan', { } }, - refresh: function(frm) { + refresh(frm) { if (frm.doc.docstatus === 1) { frm.trigger("show_progress"); @@ -158,7 +158,7 @@ frappe.ui.form.on('Production Plan', { set_field_options("projected_qty_formula", projected_qty_formula); }, - close_open_production_plan: (frm, close=false) => { + close_open_production_plan(frm, close=false) { frappe.call({ method: "set_status", freeze: true, @@ -170,7 +170,7 @@ frappe.ui.form.on('Production Plan', { }); }, - make_work_order: function(frm) { + make_work_order(frm) { frappe.call({ method: "make_work_order", freeze: true, @@ -181,7 +181,7 @@ frappe.ui.form.on('Production Plan', { }); }, - make_material_request: function(frm) { + make_material_request(frm) { frappe.confirm(__("Do you want to submit the material request"), function() { @@ -193,7 +193,7 @@ frappe.ui.form.on('Production Plan', { ); }, - create_material_request: function(frm, submit) { + create_material_request(frm, submit) { frm.doc.submit_material_request = submit; frappe.call({ @@ -206,7 +206,7 @@ frappe.ui.form.on('Production Plan', { }); }, - get_sales_orders: function(frm) { + get_sales_orders(frm) { frappe.call({ method: "get_open_sales_orders", doc: frm.doc, @@ -216,7 +216,7 @@ frappe.ui.form.on('Production Plan', { }); }, - get_material_request: function(frm) { + get_material_request(frm) { frappe.call({ method: "get_pending_material_requests", doc: frm.doc, @@ -226,7 +226,7 @@ frappe.ui.form.on('Production Plan', { }); }, - get_items: function (frm) { + get_items(frm) { frm.clear_table('prod_plan_references'); frappe.call({ @@ -238,7 +238,7 @@ frappe.ui.form.on('Production Plan', { } }); }, - combine_items: function (frm) { + combine_items(frm) { frm.clear_table("prod_plan_references"); frappe.call({ @@ -254,14 +254,14 @@ frappe.ui.form.on('Production Plan', { }); }, - combine_sub_items: (frm) => { + combine_sub_items(frm) { if (frm.doc.sub_assembly_items.length > 0) { frm.clear_table("sub_assembly_items"); frm.trigger("get_sub_assembly_items"); } }, - get_sub_assembly_items: function(frm) { + get_sub_assembly_items(frm) { frm.dirty(); frappe.call({ @@ -274,9 +274,25 @@ frappe.ui.form.on('Production Plan', { }); }, - get_items_for_mr: function(frm) { + toggle_for_warehouse(frm) { + frm.toggle_reqd("for_warehouse", true); + }, + + get_items_for_mr(frm) { if (!frm.doc.for_warehouse) { - frappe.throw(__("To make material requests, 'Make Material Request for Warehouse' field is mandatory")); + frm.trigger("toggle_for_warehouse"); + frappe.throw(__("Select the Warehouse")); + } + + frm.events.get_items_for_material_requests(frm, [{ + warehouse: frm.doc.for_warehouse + }]); + }, + + transfer_materials(frm) { + if (!frm.doc.for_warehouse) { + frm.trigger("toggle_for_warehouse"); + frappe.throw(__("Select the Warehouse")); } if (frm.doc.ignore_existing_ordered_qty) { @@ -287,18 +303,10 @@ frappe.ui.form.on('Production Plan', { title: title, fields: [ { - 'label': __('Target Warehouse'), - 'fieldtype': 'Link', - 'fieldname': 'target_warehouse', - 'read_only': true, - 'default': frm.doc.for_warehouse - }, - { - 'label': __('Source Warehouses (Optional)'), + 'label': __('Transfer From Warehouses'), 'fieldtype': 'Table MultiSelect', 'fieldname': 'warehouses', 'options': 'Production Plan Material Request Warehouse', - 'description': __('If source warehouse selected then system will create the material request with type Material Transfer from Source to Target warehouse. If not selected then will create the material request with type Purchase for the target warehouse.'), get_query: function () { return { filters: { @@ -307,6 +315,13 @@ frappe.ui.form.on('Production Plan', { }; }, }, + { + 'label': __('For Warehouse'), + 'fieldtype': 'Link', + 'fieldname': 'target_warehouse', + 'read_only': true, + 'default': frm.doc.for_warehouse + } ] }); @@ -320,8 +335,8 @@ frappe.ui.form.on('Production Plan', { } }, - get_items_for_material_requests: function(frm, warehouses) { - const set_fields = ['actual_qty', 'item_code','item_name', 'description', 'uom', 'from_warehouse', + get_items_for_material_requests(frm, warehouses) { + let set_fields = ['actual_qty', 'item_code','item_name', 'description', 'uom', 'from_warehouse', 'min_order_qty', 'required_bom_qty', 'quantity', 'sales_order', 'warehouse', 'projected_qty', 'ordered_qty', 'reserved_qty_for_production', 'material_request_type']; @@ -335,13 +350,13 @@ frappe.ui.form.on('Production Plan', { callback: function(r) { if(r.message) { frm.set_value('mr_items', []); - $.each(r.message, function(i, d) { - var item = frm.add_child('mr_items'); - for (let key in d) { - if (d[key] && in_list(set_fields, key)) { - item[key] = d[key]; + r.message.forEach(row => { + let d = frm.add_child('mr_items'); + set_fields.forEach(field => { + if (row[field]) { + d[field] = row[field]; } - } + }); }); } refresh_field('mr_items'); @@ -349,13 +364,7 @@ frappe.ui.form.on('Production Plan', { }); }, - for_warehouse: function(frm) { - if (frm.doc.mr_items && frm.doc.for_warehouse) { - frm.trigger("get_items_for_mr"); - } - }, - - download_materials_required: function(frm) { + download_materials_required(frm) { const fields = [{ fieldname: 'warehouses', fieldtype: 'Table MultiSelect', @@ -381,7 +390,7 @@ frappe.ui.form.on('Production Plan', { }, __('Select Warehouses to get Stock for Materials Planning'), __('Get Stock')); }, - show_progress: function(frm) { + show_progress(frm) { var bars = []; var message = ''; var title = ''; @@ -416,7 +425,7 @@ frappe.ui.form.on('Production Plan', { }); frappe.ui.form.on("Production Plan Item", { - item_code: function(frm, cdt, cdn) { + item_code(frm, cdt, cdn) { const row = locals[cdt][cdn]; if (row.item_code) { frappe.call({ @@ -435,7 +444,7 @@ frappe.ui.form.on("Production Plan Item", { }); frappe.ui.form.on("Material Request Plan Item", { - warehouse: function(frm, cdt, cdn) { + warehouse(frm, cdt, cdn) { const row = locals[cdt][cdn]; if (row.warehouse && row.item_code && frm.doc.company) { frappe.call({ diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.json b/erpnext/manufacturing/doctype/production_plan/production_plan.json index 85f98430cd..2624daa41e 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.json +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.json @@ -38,6 +38,8 @@ "get_sub_assembly_items", "combine_sub_items", "sub_assembly_items", + "download_materials_request_plan_section_section", + "download_materials_required", "material_request_planning", "include_non_stock_items", "include_subcontracted_items", @@ -45,8 +47,8 @@ "ignore_existing_ordered_qty", "column_break_25", "for_warehouse", - "download_materials_required", "get_items_for_mr", + "transfer_materials", "section_break_27", "mr_items", "other_details", @@ -206,7 +208,7 @@ { "fieldname": "material_request_planning", "fieldtype": "Section Break", - "label": "Material Requirement Planning" + "label": "Material Request Planning" }, { "default": "1", @@ -235,12 +237,12 @@ "depends_on": "eval:!doc.__islocal", "fieldname": "download_materials_required", "fieldtype": "Button", - "label": "Download Required Materials" + "label": "Download Materials Request Plan" }, { "fieldname": "get_items_for_mr", "fieldtype": "Button", - "label": "Get Raw Materials For Production" + "label": "Get Raw Materials for Purchase" }, { "fieldname": "section_break_27", @@ -304,7 +306,7 @@ { "fieldname": "for_warehouse", "fieldtype": "Link", - "label": "Make Material Request for Warehouse", + "label": "Raw Materials Warehouse", "options": "Warehouse" }, { @@ -378,13 +380,24 @@ "fieldname": "combine_sub_items", "fieldtype": "Check", "label": "Consolidate Sub Assembly Items" + }, + { + "fieldname": "transfer_materials", + "fieldtype": "Button", + "label": "Get Raw Materials for Transfer" + }, + { + "collapsible": 1, + "fieldname": "download_materials_request_plan_section_section", + "fieldtype": "Section Break", + "label": "Download Materials Request Plan Section" } ], "icon": "fa fa-calendar", "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-03-25 09:15:25.017664", + "modified": "2022-11-26 14:51:08.774372", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan", diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index caff0a3e15..1eb82a5728 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -312,6 +312,9 @@ class ProductionPlan(Document): def add_items(self, items): refs = {} for data in items: + if not data.pending_qty: + continue + item_details = get_item_details(data.item_code) if self.combine_items: if item_details.bom_no in refs: diff --git a/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json b/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json index df5862fcac..0688278e09 100644 --- a/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json +++ b/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json @@ -83,7 +83,7 @@ "fieldname": "warehouse", "fieldtype": "Link", "in_list_view": 1, - "label": "For Warehouse", + "label": "FG Warehouse", "options": "Warehouse" }, { @@ -216,7 +216,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-03-24 04:54:09.940224", + "modified": "2022-11-25 14:15:40.061514", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Item", From 87b39f045ce2aedf0687fae355e1d14b965c58b8 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Sun, 27 Nov 2022 16:39:32 +0530 Subject: [PATCH 21/38] fix: company name with `,` in `Work Order Summary Report` --- .../report/work_order_summary/work_order_summary.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/report/work_order_summary/work_order_summary.py b/erpnext/manufacturing/report/work_order_summary/work_order_summary.py index 41ffcbb190..b69ad070e1 100644 --- a/erpnext/manufacturing/report/work_order_summary/work_order_summary.py +++ b/erpnext/manufacturing/report/work_order_summary/work_order_summary.py @@ -39,10 +39,14 @@ def get_data(filters): "lead_time", ] - for field in ["sales_order", "production_item", "status", "company"]: + for field in ["sales_order", "production_item"]: if filters.get(field): query_filters[field] = ("in", filters.get(field)) + for field in ["status", "company"]: + if filters.get(field): + query_filters[field] = filters.get(field) + query_filters["planned_start_date"] = (">=", filters.get("from_date")) query_filters["planned_end_date"] = ("<=", filters.get("to_date")) From 2e4f3e9317917dfadb3f90bb38f548f329c96025 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Sun, 27 Nov 2022 16:54:53 +0530 Subject: [PATCH 22/38] fix: `Work Order` filter typo in `Job Card Summary Report` --- .../report/job_card_summary/job_card_summary.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/manufacturing/report/job_card_summary/job_card_summary.js b/erpnext/manufacturing/report/job_card_summary/job_card_summary.js index cb771e4994..782ce8110a 100644 --- a/erpnext/manufacturing/report/job_card_summary/job_card_summary.js +++ b/erpnext/manufacturing/report/job_card_summary/job_card_summary.js @@ -54,11 +54,11 @@ frappe.query_reports["Job Card Summary"] = { options: ["", "Open", "Work In Progress", "Completed", "On Hold"] }, { - label: __("Sales Orders"), - fieldname: "sales_order", + label: __("Work Orders"), + fieldname: "work_order", fieldtype: "MultiSelectList", get_data: function(txt) { - return frappe.db.get_link_options('Sales Order', txt); + return frappe.db.get_link_options('Work Order', txt); } }, { From 481149814e4170e970a9e74aaa41968cf47b7526 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Sun, 27 Nov 2022 16:55:45 +0530 Subject: [PATCH 23/38] fix: company name with `,` in `Job Card Summary Report` --- .../report/job_card_summary/job_card_summary.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py index 63c2d97d57..f867a75882 100644 --- a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py +++ b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py @@ -36,10 +36,14 @@ def get_data(filters): "total_time_in_mins", ] - for field in ["work_order", "workstation", "operation", "status", "company"]: + for field in ["work_order"]: if filters.get(field): query_filters[field] = ("in", filters.get(field)) + for field in ["workstation", "operation", "status", "company"]: + if filters.get(field): + query_filters[field] = filters.get(field) + data = frappe.get_all("Job Card", fields=fields, filters=query_filters) if not data: From ef7fd670fcbe3b5c0ea776bfd54f73e34d57509f Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Sun, 27 Nov 2022 16:57:38 +0530 Subject: [PATCH 24/38] fix: `production_item` filter in `Job Card Summary Report` --- .../manufacturing/report/job_card_summary/job_card_summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py index f867a75882..8d72ef1f36 100644 --- a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py +++ b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py @@ -36,7 +36,7 @@ def get_data(filters): "total_time_in_mins", ] - for field in ["work_order"]: + for field in ["work_order", "production_item"]: if filters.get(field): query_filters[field] = ("in", filters.get(field)) From 4f2ece34dfc758f1971a8d5f248729c6e8123a09 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Sun, 27 Nov 2022 21:50:26 +0530 Subject: [PATCH 25/38] chore: Supplier invoice no field description --- .../accounts/doctype/accounts_settings/accounts_settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 3e0b82c561..1e2e2acd79 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -91,7 +91,7 @@ }, { "default": "0", - "description": "Enabling ensure each Sales Invoice has a unique value in Supplier Invoice No. field", + "description": "Enabling ensure each Purchase Invoice has a unique value in Supplier Invoice No. field", "fieldname": "check_supplier_invoice_uniqueness", "fieldtype": "Check", "label": "Check Supplier Invoice Number Uniqueness" @@ -354,7 +354,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2022-07-11 13:37:50.605141", + "modified": "2022-11-27 21:49:52.538655", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", From 63b9795d4101ca941cf76f6c1e68fe635313e143 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 28 Nov 2022 10:58:35 +0530 Subject: [PATCH 26/38] fix: opportunity list doesn't show assigned user (#33110) Because `db_update` is performed `_assign` property is not updated and hence lead -> opportunity conversion makes it disappear from list view. Steps to reproduce: 1. Create lead 2. Assign anyone 3. Create opportunity from lead. 4. Form view shows assigned user, list view wont. --- erpnext/crm/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/crm/utils.py b/erpnext/crm/utils.py index 433d974a44..737452021c 100644 --- a/erpnext/crm/utils.py +++ b/erpnext/crm/utils.py @@ -120,7 +120,7 @@ def link_open_tasks(ref_doctype, ref_docname, doc): todo_doc = frappe.get_doc("ToDo", todo.name) todo_doc.reference_type = doc.doctype todo_doc.reference_name = doc.name - todo_doc.db_update() + todo_doc.save() def link_open_events(ref_doctype, ref_docname, doc): From e02f35c8ff985489a033fa89bed0a59826bfa90f Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 28 Nov 2022 15:00:52 +0530 Subject: [PATCH 27/38] feat: make Material Request for sub-assembly items --- .../production_plan/production_plan.py | 19 +++++++++++++ .../production_plan/test_production_plan.py | 28 +++++++++++++++++++ .../production_plan_sub_assembly_item.json | 4 +-- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index 1eb82a5728..0cc0f80cf1 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -521,6 +521,9 @@ class ProductionPlan(Document): subcontracted_po.setdefault(row.supplier, []).append(row) continue + if row.type_of_manufacturing == "Material Request": + continue + work_order_data = { "wip_warehouse": default_warehouses.get("wip_warehouse"), "fg_warehouse": default_warehouses.get("fg_warehouse"), @@ -1161,6 +1164,7 @@ def get_bin_details(row, company, for_warehouse=None, all_warehouse=False): subquery = frappe.qb.from_(wh).select(wh.name).where(wh.company == company) + warehouse = "" if not all_warehouse: warehouse = for_warehouse or row.get("source_warehouse") or row.get("default_warehouse") @@ -1226,6 +1230,21 @@ def get_items_for_material_requests(doc, warehouses=None, get_parent_warehouse_d doc["mr_items"] = [] po_items = doc.get("po_items") if doc.get("po_items") else doc.get("items") + + if doc.get("sub_assembly_items"): + for sa_row in doc.sub_assembly_items: + sa_row = frappe._dict(sa_row) + if sa_row.type_of_manufacturing == "Material Request": + po_items.append( + frappe._dict( + { + "item_code": sa_row.production_item, + "required_qty": sa_row.qty, + "include_exploded_items": 0, + } + ) + ) + # Check for empty table or empty rows if not po_items or not [row.get("item_code") for row in po_items if row.get("item_code")]: frappe.throw( diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py index a6d034d8cb..2bf14c24cf 100644 --- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py @@ -840,6 +840,34 @@ class TestProductionPlan(FrappeTestCase): self.assertEqual(row.uom, "Nos") self.assertEqual(row.qty, 1) + def test_material_request_for_sub_assembly_items(self): + from erpnext.manufacturing.doctype.bom.test_bom import create_nested_bom + + bom_tree = { + "Fininshed Goods1 For MR": { + "SubAssembly1 For MR": {"SubAssembly1-1 For MR": {"ChildPart1 For MR": {}}} + } + } + + parent_bom = create_nested_bom(bom_tree, prefix="") + plan = create_production_plan( + item_code=parent_bom.item, planned_qty=10, ignore_existing_ordered_qty=1, do_not_submit=1 + ) + + plan.get_sub_assembly_items() + + mr_items = [] + for row in plan.sub_assembly_items: + mr_items.append(row.production_item) + row.type_of_manufacturing = "Material Request" + + plan.save() + items = get_items_for_material_requests(plan.as_dict()) + + validate_mr_items = [d.get("item_code") for d in items] + for item_code in mr_items: + self.assertTrue(item_code in validate_mr_items) + def create_production_plan(**args): """ diff --git a/erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json b/erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json index 45ea26c3a8..4eb6bf6ecf 100644 --- a/erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json +++ b/erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json @@ -169,7 +169,7 @@ "fieldtype": "Select", "in_list_view": 1, "label": "Manufacturing Type", - "options": "In House\nSubcontract" + "options": "In House\nSubcontract\nMaterial Request" }, { "fieldname": "supplier", @@ -188,7 +188,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-01-30 21:31:10.527559", + "modified": "2022-11-28 13:50:15.116082", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Sub Assembly Item", From 6ebe8ad60d62645b1604481ff6d9b2b97a0fc104 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 28 Nov 2022 17:37:41 +0530 Subject: [PATCH 28/38] fix(ux): Action buttons in Bank Reconciliation --- .../doctype/bank_clearance/bank_clearance.js | 28 ++++++++++++++---- .../bank_clearance/bank_clearance.json | 29 ++++--------------- .../doctype/bank_clearance/bank_clearance.py | 2 -- 3 files changed, 28 insertions(+), 31 deletions(-) diff --git a/erpnext/accounts/doctype/bank_clearance/bank_clearance.js b/erpnext/accounts/doctype/bank_clearance/bank_clearance.js index 7e57c2fc47..ceba99a56a 100644 --- a/erpnext/accounts/doctype/bank_clearance/bank_clearance.js +++ b/erpnext/accounts/doctype/bank_clearance/bank_clearance.js @@ -37,6 +37,14 @@ frappe.ui.form.on("Bank Clearance", { refresh: function(frm) { frm.disable_save(); + + if (frm.doc.account && frm.doc.from_date && frm.doc.to_date) { + frm.add_custom_button(__('Get Payment Entries'), () => + frm.trigger("get_payment_entries") + ); + + frm.change_custom_button_type('Get Payment Entries', null, 'primary'); + } }, update_clearance_date: function(frm) { @@ -46,22 +54,30 @@ frappe.ui.form.on("Bank Clearance", { callback: function(r, rt) { frm.refresh_field("payment_entries"); frm.refresh_fields(); + + if (!frm.doc.payment_entries.length) { + frm.change_custom_button_type('Get Payment Entries', null, 'primary'); + frm.change_custom_button_type('Update Clearance Date', null, 'default'); + } } }); }, + get_payment_entries: function(frm) { return frappe.call({ method: "get_payment_entries", doc: frm.doc, callback: function(r, rt) { frm.refresh_field("payment_entries"); - frm.refresh_fields(); - $(frm.fields_dict.payment_entries.wrapper).find("[data-fieldname=amount]").each(function(i,v){ - if (i !=0){ - $(v).addClass("text-right") - } - }) + if (frm.doc.payment_entries.length) { + frm.add_custom_button(__('Update Clearance Date'), () => + frm.trigger("update_clearance_date") + ); + + frm.change_custom_button_type('Get Payment Entries', null, 'default'); + frm.change_custom_button_type('Update Clearance Date', null, 'primary'); + } } }); } diff --git a/erpnext/accounts/doctype/bank_clearance/bank_clearance.json b/erpnext/accounts/doctype/bank_clearance/bank_clearance.json index a436d1effb..591d01949b 100644 --- a/erpnext/accounts/doctype/bank_clearance/bank_clearance.json +++ b/erpnext/accounts/doctype/bank_clearance/bank_clearance.json @@ -1,4 +1,5 @@ { + "actions": [], "allow_copy": 1, "creation": "2013-01-10 16:34:05", "doctype": "DocType", @@ -13,11 +14,8 @@ "bank_account", "include_reconciled_entries", "include_pos_transactions", - "get_payment_entries", "section_break_10", - "payment_entries", - "update_clearance_date", - "total_amount" + "payment_entries" ], "fields": [ { @@ -76,11 +74,6 @@ "fieldtype": "Check", "label": "Include POS Transactions" }, - { - "fieldname": "get_payment_entries", - "fieldtype": "Button", - "label": "Get Payment Entries" - }, { "fieldname": "section_break_10", "fieldtype": "Section Break" @@ -91,25 +84,14 @@ "fieldtype": "Table", "label": "Payment Entries", "options": "Bank Clearance Detail" - }, - { - "fieldname": "update_clearance_date", - "fieldtype": "Button", - "label": "Update Clearance Date" - }, - { - "fieldname": "total_amount", - "fieldtype": "Currency", - "label": "Total Amount", - "options": "account_currency", - "read_only": 1 } ], "hide_toolbar": 1, "icon": "fa fa-check", "idx": 1, "issingle": 1, - "modified": "2020-04-06 16:12:06.628008", + "links": [], + "modified": "2022-11-28 17:24:13.008692", "modified_by": "Administrator", "module": "Accounts", "name": "Bank Clearance", @@ -126,5 +108,6 @@ "quick_entry": 1, "read_only": 1, "sort_field": "modified", - "sort_order": "ASC" + "sort_order": "ASC", + "states": [] } \ No newline at end of file diff --git a/erpnext/accounts/doctype/bank_clearance/bank_clearance.py b/erpnext/accounts/doctype/bank_clearance/bank_clearance.py index 78c3526654..80878ac506 100644 --- a/erpnext/accounts/doctype/bank_clearance/bank_clearance.py +++ b/erpnext/accounts/doctype/bank_clearance/bank_clearance.py @@ -179,7 +179,6 @@ class BankClearance(Document): ) self.set("payment_entries", []) - self.total_amount = 0.0 default_currency = erpnext.get_default_currency() for d in entries: @@ -198,7 +197,6 @@ class BankClearance(Document): d.pop("debit") d.pop("account_currency") row.update(d) - self.total_amount += flt(amount) @frappe.whitelist() def update_clearance_date(self): From ba77da0874ef8219e57b03b3f71db84ce9953063 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Mon, 28 Nov 2022 18:01:30 +0530 Subject: [PATCH 29/38] fix: validation msg in stock entry --- erpnext/stock/stock_ledger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index cdf6e89fcb..fb50b46003 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -264,7 +264,7 @@ def repost_future_sle( def validate_item_warehouse(args): for field in ["item_code", "warehouse", "posting_date", "posting_time"]: if not args.get(field): - validation_msg = f"The field {frappe.unscrub(args.get(field))} is required for the reposting" + validation_msg = f"The field {frappe.unscrub(field)} is required for the reposting" frappe.throw(_(validation_msg)) From fa152214552e37236ff927e35ed09d016933a26c Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 28 Nov 2022 19:22:35 +0530 Subject: [PATCH 30/38] fix: Auto repeat date validations --- erpnext/controllers/accounts_controller.py | 4 ++++ erpnext/controllers/buying_controller.py | 1 + erpnext/controllers/selling_controller.py | 1 + 3 files changed, 6 insertions(+) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 1849e8b3b5..dc42a89df7 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -239,6 +239,10 @@ class AccountsController(TransactionBase): else: item.set(field_map.get(self.doctype), default_deferred_account) + def validate_auto_repeat_subscription_dates(self): + if getdate(self.from_date) > getdate(self.to_date): + frappe.throw(_("To Date cannot be before From Date"), title=_("Invalid Auto Repeat Date")) + def validate_deferred_start_and_end_date(self): for d in self.items: if d.get("enable_deferred_revenue") or d.get("enable_deferred_expense"): diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 48fe7cb083..051460474a 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -41,6 +41,7 @@ class BuyingController(SubcontractingController): self.validate_from_warehouse() self.set_supplier_address() self.validate_asset_return() + self.validate_auto_repeat_subscription_dates() if self.doctype == "Purchase Invoice": self.validate_purchase_receipt_if_update_stock() diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index e8e9076975..f4276802b7 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -40,6 +40,7 @@ class SellingController(StockController): self.set_customer_address() self.validate_for_duplicate_items() self.validate_target_warehouse() + self.validate_auto_repeat_subscription_dates() def set_missing_values(self, for_validate=False): From eeda264eb6b53cf4e463f8de121d9c5b3371faa8 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 12 Jan 2022 20:55:30 +0530 Subject: [PATCH 31/38] fix: reposting error `AttributeError: 'datetime.timedelta' object has no attribute 'replace'` --- erpnext/stock/stock_ledger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index fb50b46003..e7f55e9b35 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -263,7 +263,7 @@ def repost_future_sle( def validate_item_warehouse(args): for field in ["item_code", "warehouse", "posting_date", "posting_time"]: - if not args.get(field): + if args.get(field) in [None, ""]: validation_msg = f"The field {frappe.unscrub(field)} is required for the reposting" frappe.throw(_(validation_msg)) From eeec00854700ca18197a91e8705ce8e528cb4cd6 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Tue, 29 Nov 2022 15:56:37 +0530 Subject: [PATCH 32/38] fix: reset `voucher_type` and `voucher_no` if `based_on` is set to `Item and Warehouse` --- .../repost_item_valuation.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.js b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.js index d595a80b20..8aec532847 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.js +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.js @@ -34,6 +34,22 @@ frappe.ui.form.on('Repost Item Valuation', { frm.trigger('setup_realtime_progress'); }, + based_on: function(frm) { + var fields_to_reset = []; + + if (frm.doc.based_on == 'Transaction') { + fields_to_reset = ['item_code', 'warehouse']; + } else if (frm.doc.based_on == 'Item and Warehouse') { + fields_to_reset = ['voucher_type', 'voucher_no']; + } + + if (fields_to_reset) { + fields_to_reset.forEach(field => { + frm.set_value(field, undefined); + }); + } + }, + setup_realtime_progress: function(frm) { frappe.realtime.on('item_reposting_progress', data => { if (frm.doc.name !== data.name) { From 4e10352b487303b42f21253a8c692e9d664de984 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 30 Nov 2022 16:07:13 +0530 Subject: [PATCH 33/38] chore: make `posting_date` and `posting_time` read-only if `based_on` is set to `Transaction` --- .../repost_item_valuation/repost_item_valuation.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json index e093933829..8a5309c348 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json @@ -50,13 +50,15 @@ "fieldname": "posting_date", "fieldtype": "Date", "label": "Posting Date", + "read_only_depends_on": "eval: doc.based_on == \"Transaction\"", "reqd": 1 }, { "fetch_from": "voucher_no.posting_time", "fieldname": "posting_time", "fieldtype": "Time", - "label": "Posting Time" + "label": "Posting Time", + "read_only_depends_on": "eval: doc.based_on == \"Transaction\"" }, { "default": "Queued", @@ -195,7 +197,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-06-13 12:20:22.182322", + "modified": "2022-11-28 16:00:05.637440", "modified_by": "Administrator", "module": "Stock", "name": "Repost Item Valuation", From 6a47fb6c9e9e93553b622a795217f3a15ded1eb9 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 28 Nov 2022 22:47:44 +0530 Subject: [PATCH 34/38] chore: Update condition --- erpnext/controllers/accounts_controller.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index dc42a89df7..b7a80c1019 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -240,7 +240,11 @@ class AccountsController(TransactionBase): item.set(field_map.get(self.doctype), default_deferred_account) def validate_auto_repeat_subscription_dates(self): - if getdate(self.from_date) > getdate(self.to_date): + if ( + self.get("from_date") + and self.get("to_date") + and getdate(self.from_date) > getdate(self.to_date) + ): frappe.throw(_("To Date cannot be before From Date"), title=_("Invalid Auto Repeat Date")) def validate_deferred_start_and_end_date(self): From b2105a8be7ba3891df1253a94c8322632db22956 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 28 Nov 2022 22:51:35 +0530 Subject: [PATCH 35/38] fix: incorrect balance qty --- .../stock/doctype/stock_reconciliation/stock_reconciliation.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index d92d0f1686..260c1344b1 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -348,6 +348,9 @@ class StockReconciliation(StockController): if row.qty: args = self.get_sle_for_items(row) + if row.serial_no and row.batch_no: + args["qty_after_transaction"] = row.qty + args.update( { "actual_qty": row.qty, From b606a9684beb7a7f3256fad25c9389dc7e763d4f Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 29 Nov 2022 00:08:07 +0530 Subject: [PATCH 36/38] test: test case for serialized batched item --- .../stock_reconciliation.py | 6 ++-- .../test_stock_reconciliation.py | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 260c1344b1..3a0b38a0fc 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -230,7 +230,7 @@ class StockReconciliation(StockController): if item.has_serial_no or item.has_batch_no: has_serial_no = True - self.get_sle_for_serialized_items(row, sl_entries) + self.get_sle_for_serialized_items(row, sl_entries, item) else: if row.serial_no or row.batch_no: frappe.throw( @@ -282,7 +282,7 @@ class StockReconciliation(StockController): if has_serial_no and sl_entries: self.update_valuation_rate_for_serial_no() - def get_sle_for_serialized_items(self, row, sl_entries): + def get_sle_for_serialized_items(self, row, sl_entries, item): from erpnext.stock.stock_ledger import get_previous_sle serial_nos = get_serial_nos(row.serial_no) @@ -348,7 +348,7 @@ class StockReconciliation(StockController): if row.qty: args = self.get_sle_for_items(row) - if row.serial_no and row.batch_no: + if item.has_serial_no and item.has_batch_no: args["qty_after_transaction"] = row.qty args.update( diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 7b984d3847..eaea301432 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -644,6 +644,38 @@ class TestStockReconciliation(FrappeTestCase, StockTestMixin): ) self.assertEqual(len(active_sr_no), 0) + def test_serial_no_batch_no_item(self): + item = self.make_item( + "Test Serial No Batch No Item", + { + "is_stock_item": 1, + "has_serial_no": 1, + "has_batch_no": 1, + "serial_no_series": "SRS9.####", + "batch_number_series": "BNS9.####", + "create_new_batch": 1, + }, + ) + + warehouse = "_Test Warehouse - _TC" + + sr = create_stock_reconciliation( + item_code=item.name, + warehouse=warehouse, + qty=1, + rate=100, + ) + + sl_entry = frappe.db.get_value( + "Stock Ledger Entry", + {"voucher_type": "Stock Reconciliation", "voucher_no": sr.name}, + ["actual_qty", "qty_after_transaction"], + as_dict=1, + ) + + self.assertEqual(flt(sl_entry.actual_qty), 1.0) + self.assertEqual(flt(sl_entry.qty_after_transaction), 1.0) + def create_batch_item_with_batch(item_name, batch_id): batch_item_doc = create_item(item_name, is_stock_item=1) From 3eb1ed19a19a0e26e9814d70267530769bf8b274 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Tue, 29 Nov 2022 13:10:31 +0530 Subject: [PATCH 37/38] fix: Tax withholding net total for PI in reports --- .../purchase_invoice_item.json | 12 ++-- .../tds_computation_summary.py | 12 +++- .../tds_payable_monthly.py | 65 ++++++++++++------- .../purchase_order_item.json | 4 +- 4 files changed, 61 insertions(+), 32 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index 5c1cb0dcc6..1fa7e7f3fc 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -40,7 +40,6 @@ "discount_amount", "base_rate_with_margin", "sec_break2", - "apply_tds", "rate", "amount", "item_tax_template", @@ -50,6 +49,7 @@ "pricing_rules", "stock_uom_rate", "is_free_item", + "apply_tds", "section_break_22", "net_rate", "net_amount", @@ -871,16 +871,16 @@ "read_only": 1 }, { - "default": "1", - "fieldname": "apply_tds", - "fieldtype": "Check", - "label": "Apply TDS" + "default": "1", + "fieldname": "apply_tds", + "fieldtype": "Check", + "label": "Apply TDS" } ], "idx": 1, "istable": 1, "links": [], - "modified": "2022-10-26 16:05:37.304788", + "modified": "2022-11-29 13:01:20.438217", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py index db3d5d44a0..c6aa21cc86 100644 --- a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py +++ b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py @@ -14,9 +14,17 @@ def execute(filters=None): filters.naming_series = frappe.db.get_single_value("Buying Settings", "supp_master_name") columns = get_columns(filters) - tds_docs, tds_accounts, tax_category_map, journal_entry_party_map = get_tds_docs(filters) + ( + tds_docs, + tds_accounts, + tax_category_map, + journal_entry_party_map, + invoice_total_map, + ) = get_tds_docs(filters) - res = get_result(filters, tds_docs, tds_accounts, tax_category_map, journal_entry_party_map) + res = get_result( + filters, tds_docs, tds_accounts, tax_category_map, journal_entry_party_map, invoice_total_map + ) final_result = group_by_supplier_and_category(res) return columns, final_result diff --git a/erpnext/accounts/report/tds_payable_monthly/tds_payable_monthly.py b/erpnext/accounts/report/tds_payable_monthly/tds_payable_monthly.py index f2809a99c5..98838907be 100644 --- a/erpnext/accounts/report/tds_payable_monthly/tds_payable_monthly.py +++ b/erpnext/accounts/report/tds_payable_monthly/tds_payable_monthly.py @@ -8,11 +8,19 @@ from frappe import _ def execute(filters=None): validate_filters(filters) - tds_docs, tds_accounts, tax_category_map, journal_entry_party_map = get_tds_docs(filters) + ( + tds_docs, + tds_accounts, + tax_category_map, + journal_entry_party_map, + invoice_net_total_map, + ) = get_tds_docs(filters) columns = get_columns(filters) - res = get_result(filters, tds_docs, tds_accounts, tax_category_map, journal_entry_party_map) + res = get_result( + filters, tds_docs, tds_accounts, tax_category_map, journal_entry_party_map, invoice_net_total_map + ) return columns, res @@ -22,7 +30,9 @@ def validate_filters(filters): frappe.throw(_("From Date must be before To Date")) -def get_result(filters, tds_docs, tds_accounts, tax_category_map, journal_entry_party_map): +def get_result( + filters, tds_docs, tds_accounts, tax_category_map, journal_entry_party_map, invoice_net_total_map +): supplier_map = get_supplier_pan_map() tax_rate_map = get_tax_rate_map(filters) gle_map = get_gle_map(tds_docs) @@ -50,7 +60,10 @@ def get_result(filters, tds_docs, tds_accounts, tax_category_map, journal_entry_ if entry.account in tds_accounts: tds_deducted += entry.credit - entry.debit - total_amount_credited += entry.credit + if invoice_net_total_map.get(name): + total_amount_credited = invoice_net_total_map.get(name) + else: + total_amount_credited += entry.credit if tds_deducted: row = { @@ -179,9 +192,10 @@ def get_tds_docs(filters): purchase_invoices = [] payment_entries = [] journal_entries = [] - tax_category_map = {} - or_filters = {} - journal_entry_party_map = {} + tax_category_map = frappe._dict() + invoice_net_total_map = frappe._dict() + or_filters = frappe._dict() + journal_entry_party_map = frappe._dict() bank_accounts = frappe.get_all("Account", {"is_group": 0, "account_type": "Bank"}, pluck="name") tds_accounts = frappe.get_all( @@ -218,16 +232,22 @@ def get_tds_docs(filters): tds_documents.append(d.voucher_no) if purchase_invoices: - get_tax_category_map(purchase_invoices, "Purchase Invoice", tax_category_map) + get_doc_info(purchase_invoices, "Purchase Invoice", tax_category_map, invoice_net_total_map) if payment_entries: - get_tax_category_map(payment_entries, "Payment Entry", tax_category_map) + get_doc_info(payment_entries, "Payment Entry", tax_category_map) if journal_entries: journal_entry_party_map = get_journal_entry_party_map(journal_entries) - get_tax_category_map(journal_entries, "Journal Entry", tax_category_map) + get_doc_info(journal_entries, "Journal Entry", tax_category_map) - return tds_documents, tds_accounts, tax_category_map, journal_entry_party_map + return ( + tds_documents, + tds_accounts, + tax_category_map, + journal_entry_party_map, + invoice_net_total_map, + ) def get_journal_entry_party_map(journal_entries): @@ -244,17 +264,18 @@ def get_journal_entry_party_map(journal_entries): return journal_entry_party_map -def get_tax_category_map(vouchers, doctype, tax_category_map): - tax_category_map.update( - frappe._dict( - frappe.get_all( - doctype, - filters={"name": ("in", vouchers)}, - fields=["name", "tax_withholding_category"], - as_list=1, - ) - ) - ) +def get_doc_info(vouchers, doctype, tax_category_map, invoice_net_total_map=None): + if doctype == "Purchase Invoice": + fields = ["name", "tax_withholding_category", "base_tax_withholding_net_total"] + else: + fields = ["name", "tax_withholding_category"] + + entries = frappe.get_all(doctype, filters={"name": ("in", vouchers)}, fields=fields) + + for entry in entries: + tax_category_map.update({entry.name: entry.tax_withholding_category}) + if doctype == "Purchase Invoice": + invoice_net_total_map.update({entry.name: entry.base_tax_withholding_net_total}) def get_tax_rate_map(filters): diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json index d471783ab9..c645b04e12 100644 --- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json +++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json @@ -44,7 +44,6 @@ "discount_amount", "base_rate_with_margin", "sec_break2", - "apply_tds", "rate", "amount", "item_tax_template", @@ -54,6 +53,7 @@ "pricing_rules", "stock_uom_rate", "is_free_item", + "apply_tds", "section_break_29", "net_rate", "net_amount", @@ -902,7 +902,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-10-26 16:47:41.364387", + "modified": "2022-11-29 16:47:41.364387", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order Item", From ca0485a503aacb7d96700a060bd2367a9d03366a Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Wed, 12 Jan 2022 10:03:36 +0530 Subject: [PATCH 38/38] fix: add company filter in RFQ Items --- .../doctype/request_for_quotation/request_for_quotation.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js index 31a4837d46..98c7dc9bd3 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js @@ -22,6 +22,13 @@ frappe.ui.form.on("Request for Quotation",{ } }; } + + frm.set_query('warehouse', 'items', () => ({ + filters: { + company: frm.doc.company, + is_group: 0 + } + })); }, onload: function(frm) {