From 1d8860ec8cebe30b1c4b0f449ca874ca2010fd8a Mon Sep 17 00:00:00 2001 From: Beate Trzensiok Date: Tue, 20 Feb 2024 10:15:40 +0100 Subject: [PATCH] Employee Target Agreement --- .../employee_target_agreement/__init__.py | 0 .../employee_target_agreement.js | 8 +++ .../employee_target_agreement.json | 60 ++++++++++++++++ .../employee_target_agreement.py | 8 +++ .../test_employee_target_agreement.py | 8 +++ .../doctype/it_contract_invoice_generator.py | 68 +++++++++++++++++++ 6 files changed, 152 insertions(+) create mode 100644 msp/msp/doctype/employee_target_agreement/__init__.py create mode 100644 msp/msp/doctype/employee_target_agreement/employee_target_agreement.js create mode 100644 msp/msp/doctype/employee_target_agreement/employee_target_agreement.json create mode 100644 msp/msp/doctype/employee_target_agreement/employee_target_agreement.py create mode 100644 msp/msp/doctype/employee_target_agreement/test_employee_target_agreement.py create mode 100644 msp/msp/doctype/it_contract_invoice_generator.py diff --git a/msp/msp/doctype/employee_target_agreement/__init__.py b/msp/msp/doctype/employee_target_agreement/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/msp/msp/doctype/employee_target_agreement/employee_target_agreement.js b/msp/msp/doctype/employee_target_agreement/employee_target_agreement.js new file mode 100644 index 0000000..420f01c --- /dev/null +++ b/msp/msp/doctype/employee_target_agreement/employee_target_agreement.js @@ -0,0 +1,8 @@ +// Copyright (c) 2023, itsdave GmbH and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Employee Target Agreement', { + // refresh: function(frm) { + + // } +}); diff --git a/msp/msp/doctype/employee_target_agreement/employee_target_agreement.json b/msp/msp/doctype/employee_target_agreement/employee_target_agreement.json new file mode 100644 index 0000000..ff9fcaa --- /dev/null +++ b/msp/msp/doctype/employee_target_agreement/employee_target_agreement.json @@ -0,0 +1,60 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2023-12-07 10:42:48.367768", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "from_date", + "to_date", + "employee", + "daily_hours" + ], + "fields": [ + { + "fieldname": "from_date", + "fieldtype": "Date", + "label": "From date" + }, + { + "fieldname": "to_date", + "fieldtype": "Date", + "label": "To date" + }, + { + "fieldname": "employee", + "fieldtype": "Link", + "label": "Employee", + "options": "Employee" + }, + { + "fieldname": "daily_hours", + "fieldtype": "Float", + "label": "Daily hours" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2023-12-07 10:42:48.367768", + "modified_by": "Administrator", + "module": "MSP", + "name": "Employee Target Agreement", + "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" +} \ No newline at end of file diff --git a/msp/msp/doctype/employee_target_agreement/employee_target_agreement.py b/msp/msp/doctype/employee_target_agreement/employee_target_agreement.py new file mode 100644 index 0000000..ffaaf42 --- /dev/null +++ b/msp/msp/doctype/employee_target_agreement/employee_target_agreement.py @@ -0,0 +1,8 @@ +# Copyright (c) 2023, itsdave GmbH and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + +class EmployeeTargetAgreement(Document): + pass diff --git a/msp/msp/doctype/employee_target_agreement/test_employee_target_agreement.py b/msp/msp/doctype/employee_target_agreement/test_employee_target_agreement.py new file mode 100644 index 0000000..7874db6 --- /dev/null +++ b/msp/msp/doctype/employee_target_agreement/test_employee_target_agreement.py @@ -0,0 +1,8 @@ +# Copyright (c) 2023, itsdave GmbH and Contributors +# See license.txt + +# import frappe +import unittest + +class TestEmployeeTargetAgreement(unittest.TestCase): + pass diff --git a/msp/msp/doctype/it_contract_invoice_generator.py b/msp/msp/doctype/it_contract_invoice_generator.py new file mode 100644 index 0000000..f54d707 --- /dev/null +++ b/msp/msp/doctype/it_contract_invoice_generator.py @@ -0,0 +1,68 @@ +import frappe +from frappe.model.document import Document +from erpnext.accounts.party import set_taxes as party_st +from datetime import datetime + +@frappe.whitelist() +def get_invoices(doc): + contract_list = frappe.get_all("IT Contract", filter ={"status":"active"}) + for contr in contract_list: + contract= frappe.get_doc("IT Contract",contr.name) + billing_month = doc.billing_month + customer = contract.customer + items = contract.items + introduction = "Lestungszeitraum " + billing_month + title = contract.it_contract_type + billing_month + contract.customer_name + inv_title_list = frappe.get_all("Invoice", filters = {"title":title}) + if len(inv_title_list) > 0: + invoice_items = [create_invoice_doc_item(el) for el in items] + invoice_doc = create_invoice(doc,customer,invoice_items,title, introduction) + +def create_invoice_doc_item(self, item): + #Funktion kreiert Invoice Item aus den gegebenen IT Contract Items + invoice_doc_item = frappe.get_doc({ + "doctype": "Sales Invoice Item", + "item_code": item.item_code, + "description": item.item_name, + "qty": item.qty, + "uom" : "Stk", + "rate": item.rate, + + }) + return invoice_doc_item + +def create_invoice(self,cust,invoice_doc_items,title, introduction): + invoice_doc = frappe.get_doc({ + "doctype": "Sales Invoice", + "title": title, + "customer": cust, + "company": frappe.get_doc("Global Defaults").default_company, + "items": invoice_doc_items, + "introduction_text":introduction + }) + if len(invoice_doc_items)>0: + + settings_doc = frappe.get_single("Auto Invoice Generator Settings") + customer_doc = frappe.get_doc("Customer", cust ) + + if customer_doc.payment_terms: + invoice_doc.payment_terms_template = customer_doc.payment_terms + else: + invoice_doc.payment_terms_template = settings_doc.payment_terms_template + invoice_doc.tc_name = settings_doc.tc_name + tac_doc = frappe.get_doc("Terms and Conditions", settings_doc.tc_name) + invoice_doc.terms = tac_doc.terms + + invoice_doc.taxes_and_charges = party_st(invoice_doc.customer, "Customer", invoice_doc.posting_date, invoice_doc.company) + taxes = frappe.get_doc("Sales Taxes and Charges Template", settings_doc.taxes_and_charges).taxes + + for tax in taxes: + new_tax = frappe.get_doc({ + "doctype": "Sales Taxes and Charges", + "charge_type": tax.charge_type, + "account_head": tax.account_head, + "rate": tax.rate, + "description": tax.description + }) + invoice_doc.append("taxes", new_tax) + invoice_doc.save()