Sales Invoice Item Group Separation

This commit is contained in:
Beate Trzensiok 2022-09-27 11:29:47 +02:00
parent d251f7e783
commit 7157f40831
12 changed files with 264 additions and 0 deletions

78
msp/billing_tools.py Normal file
View File

@ -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])

View File

@ -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) {
// }
});

View File

@ -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
}

View File

@ -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

View File

@ -0,0 +1,8 @@
# Copyright (c) 2022, itsdave GmbH and Contributors
# See license.txt
# import frappe
import unittest
class TestSalesInvoiceItemGroupSeparation(unittest.TestCase):
pass

View File

@ -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
}

View File

@ -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

View File

@ -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
}

View File

@ -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