From 7157f40831867d4c17e761097ce733ec48c3349e Mon Sep 17 00:00:00 2001 From: Beate Trzensiok Date: Tue, 27 Sep 2022 11:29:47 +0200 Subject: [PATCH] Sales Invoice Item Group Separation --- msp/billing_tools.py | 78 +++++++++++++++++++ .../__init__.py | 0 .../sales_invoice_item_group_separation.js | 8 ++ .../sales_invoice_item_group_separation.json | 61 +++++++++++++++ .../sales_invoice_item_group_separation.py | 8 ++ ...est_sales_invoice_item_group_separation.py | 8 ++ .../__init__.py | 0 ...nvoice_item_group_separation_customer.json | 43 ++++++++++ ..._invoice_item_group_separation_customer.py | 8 ++ .../__init__.py | 0 ...s_invoice_item_group_separation_entry.json | 42 ++++++++++ ...les_invoice_item_group_separation_entry.py | 8 ++ 12 files changed, 264 insertions(+) create mode 100644 msp/billing_tools.py create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation/__init__.py create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.js create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.json create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.py create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation/test_sales_invoice_item_group_separation.py create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation_customer/__init__.py create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation_customer/sales_invoice_item_group_separation_customer.json create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation_customer/sales_invoice_item_group_separation_customer.py create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation_entry/__init__.py create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation_entry/sales_invoice_item_group_separation_entry.json create mode 100644 msp/msp/doctype/sales_invoice_item_group_separation_entry/sales_invoice_item_group_separation_entry.py diff --git a/msp/billing_tools.py b/msp/billing_tools.py new file mode 100644 index 0000000..4003c25 --- /dev/null +++ b/msp/billing_tools.py @@ -0,0 +1,78 @@ + +import frappe +from pprint import pprint + +#ssigss = Sales Invoice Item Group Separation + + +def get_sales_invoice_item_group_separation(customer): + #check, that we have exactly one Sales Invoice Item Group Separation Entry for this customer, and return it Parent Name + ssigss = frappe.get_all( + "Sales Invoice Item Group Separation Customer", + filters={"customer": customer}, + fields=["name", "parent"]) + if not ssigss: + frappe.throw("No Sales Invoice Item Group Separation Customer.") + if len(ssigss) > 1: + frappe.throw("More then one Sales Invoice Item Group Separation Customer.") + return ssigss[0]["parent"] + + +def get_item_group_separation_dict(ssigs): + """get item groups to concider from ssigss, should return something like: + {1: {'filter': ['Anwendungsentwicklung'], + 'idx': 1, + 'item_group': 'Anwendungsentwicklung', + 'recursive': 0}, + 2: {'filter': ['Dienstleistungen', + 'Zuschläge', + 'Anwendungsentwicklung', + 'Arbeitszeiten Techniker'], + 'idx': 2, + 'item_group': 'Dienstleistungen', + 'recursive': 1}} + """ + item_group_separation_dict = frappe.get_all( + "Sales Invoice Item Group Separation Entry", + filters={"parent": ssigs}, + fields=["idx", "item_group", "recursive"], + order_by="idx") + ordered_filters_dict = {} + + for item_group_separation in item_group_separation_dict: + ordered_filters_dict[item_group_separation["idx"]] = item_group_separation + if item_group_separation["recursive"]: + ordered_filters_dict[item_group_separation["idx"]]["filter"] = search_child_item_groups(item_group_separation["item_group"]) + else: + ordered_filters_dict[item_group_separation["idx"]]["filter"] = [item_group_separation["item_group"]] + + return ordered_filters_dict + + +def search_child_item_groups(item_group, item_groups_to_filter = None): + #get all child item groups, return list with childs and parent + if not item_groups_to_filter: + item_groups_to_filter = [] + + item_groups_to_filter.append(item_group) + + child_locations = frappe.get_all( + "Item Group", + filters = {"parent_item_group": item_group}) + + if child_locations: + for child_location in child_locations: + search_child_item_groups(child_location['name'], item_groups_to_filter) + + return item_groups_to_filter + +def get_item_group_assignment_table(customer): + ssigs = get_sales_invoice_item_group_separation(customer) + item_group_separation_dict = get_item_group_separation_dict(ssigs) + return item_group_separation_dict +# for idx in range(1, len(item_group_separation_dict) + 1): +# print("prüfe artikel auf prio " + str(idx)) +# print(item_group_separation_dict[idx]) + + + diff --git a/msp/msp/doctype/sales_invoice_item_group_separation/__init__.py b/msp/msp/doctype/sales_invoice_item_group_separation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.js b/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.js new file mode 100644 index 0000000..1cf9a9f --- /dev/null +++ b/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.js @@ -0,0 +1,8 @@ +// Copyright (c) 2022, itsdave GmbH and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Sales Invoice Item Group Separation', { + // refresh: function(frm) { + + // } +}); diff --git a/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.json b/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.json new file mode 100644 index 0000000..55c9cc3 --- /dev/null +++ b/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.json @@ -0,0 +1,61 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "SIIGS-.#####", + "creation": "2022-09-20 14:17:11.567012", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "active", + "customers", + "item_groups" + ], + "fields": [ + { + "default": "0", + "description": "Legt fest, ob diese Regel aktiv ist. Es darf immer nur eine aktive Regel per Kunde geben.", + "fieldname": "active", + "fieldtype": "Check", + "label": "Active" + }, + { + "description": "Es wird nach folgenden Item-Groups getrennt. Die Priorisierung erfolgt gem. der Reihenfolge innerhalb der Liste. Nur wenn die Option \"recursive\" aktiv ist, werden alle Child Item-Groups unterhalb der genannten Item-Group ber\u00fccksichtigt. ( Ermitteln und immer \"in\" - Filter verwenden) ", + "fieldname": "item_groups", + "fieldtype": "Table", + "label": "Item Groups", + "options": "Sales Invoice Item Group Separation Entry" + }, + { + "description": "Diese Regel ist f\u00fcr die folgenden Kunden anzuwenden, solange eine der Abrechungsmethoden mit Item-Group Bezug beim Customer hinterlegt ist.", + "fieldname": "customers", + "fieldtype": "Table", + "label": "Customers", + "options": "Sales Invoice Item Group Separation Customer" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2022-09-20 14:34:09.246244", + "modified_by": "Administrator", + "module": "MSP", + "name": "Sales Invoice Item Group Separation", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.py b/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.py new file mode 100644 index 0000000..b9afc67 --- /dev/null +++ b/msp/msp/doctype/sales_invoice_item_group_separation/sales_invoice_item_group_separation.py @@ -0,0 +1,8 @@ +# Copyright (c) 2022, itsdave GmbH and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class SalesInvoiceItemGroupSeparation(Document): + pass diff --git a/msp/msp/doctype/sales_invoice_item_group_separation/test_sales_invoice_item_group_separation.py b/msp/msp/doctype/sales_invoice_item_group_separation/test_sales_invoice_item_group_separation.py new file mode 100644 index 0000000..ac7b7c7 --- /dev/null +++ b/msp/msp/doctype/sales_invoice_item_group_separation/test_sales_invoice_item_group_separation.py @@ -0,0 +1,8 @@ +# Copyright (c) 2022, itsdave GmbH and Contributors +# See license.txt + +# import frappe +import unittest + +class TestSalesInvoiceItemGroupSeparation(unittest.TestCase): + pass diff --git a/msp/msp/doctype/sales_invoice_item_group_separation_customer/__init__.py b/msp/msp/doctype/sales_invoice_item_group_separation_customer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/msp/msp/doctype/sales_invoice_item_group_separation_customer/sales_invoice_item_group_separation_customer.json b/msp/msp/doctype/sales_invoice_item_group_separation_customer/sales_invoice_item_group_separation_customer.json new file mode 100644 index 0000000..caf72e6 --- /dev/null +++ b/msp/msp/doctype/sales_invoice_item_group_separation_customer/sales_invoice_item_group_separation_customer.json @@ -0,0 +1,43 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2022-09-20 14:22:26.303420", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "customer", + "customer_name" + ], + "fields": [ + { + "fieldname": "customer", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Customer", + "options": "Customer" + }, + { + "fetch_from": "customer.customer_name", + "fieldname": "customer_name", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Customer Name", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2022-09-20 14:23:31.490359", + "modified_by": "Administrator", + "module": "MSP", + "name": "Sales Invoice Item Group Separation Customer", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/msp/msp/doctype/sales_invoice_item_group_separation_customer/sales_invoice_item_group_separation_customer.py b/msp/msp/doctype/sales_invoice_item_group_separation_customer/sales_invoice_item_group_separation_customer.py new file mode 100644 index 0000000..a498a8b --- /dev/null +++ b/msp/msp/doctype/sales_invoice_item_group_separation_customer/sales_invoice_item_group_separation_customer.py @@ -0,0 +1,8 @@ +# Copyright (c) 2022, itsdave GmbH and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class SalesInvoiceItemGroupSeparationCustomer(Document): + pass diff --git a/msp/msp/doctype/sales_invoice_item_group_separation_entry/__init__.py b/msp/msp/doctype/sales_invoice_item_group_separation_entry/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/msp/msp/doctype/sales_invoice_item_group_separation_entry/sales_invoice_item_group_separation_entry.json b/msp/msp/doctype/sales_invoice_item_group_separation_entry/sales_invoice_item_group_separation_entry.json new file mode 100644 index 0000000..6ad24f2 --- /dev/null +++ b/msp/msp/doctype/sales_invoice_item_group_separation_entry/sales_invoice_item_group_separation_entry.json @@ -0,0 +1,42 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2022-09-20 14:19:56.912230", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item_group", + "recursive" + ], + "fields": [ + { + "fieldname": "item_group", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Item Group", + "options": "Item Group" + }, + { + "default": "0", + "fieldname": "recursive", + "fieldtype": "Check", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Recursive" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2022-09-20 14:37:16.713669", + "modified_by": "Administrator", + "module": "MSP", + "name": "Sales Invoice Item Group Separation Entry", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/msp/msp/doctype/sales_invoice_item_group_separation_entry/sales_invoice_item_group_separation_entry.py b/msp/msp/doctype/sales_invoice_item_group_separation_entry/sales_invoice_item_group_separation_entry.py new file mode 100644 index 0000000..a327096 --- /dev/null +++ b/msp/msp/doctype/sales_invoice_item_group_separation_entry/sales_invoice_item_group_separation_entry.py @@ -0,0 +1,8 @@ +# Copyright (c) 2022, itsdave GmbH and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class SalesInvoiceItemGroupSeparationEntry(Document): + pass