diff --git a/tims_tevin_typec_integration/tims_tevic_type_c_integration/overrides/client/sales_invoice.js b/tims_tevin_typec_integration/tims_tevic_type_c_integration/overrides/client/sales_invoice.js index 6c48c68..9d0f283 100644 --- a/tims_tevin_typec_integration/tims_tevic_type_c_integration/overrides/client/sales_invoice.js +++ b/tims_tevin_typec_integration/tims_tevic_type_c_integration/overrides/client/sales_invoice.js @@ -7,4 +7,28 @@ frappe.ui.form.on("Sales Invoice", { frappe.throw(`Please select the Customer ${customer}'s Tax Category`); } }, + refresh: function (frm) { + if(frm.doc.docstatus === 1 && !frm.doc.custom_cu_invoice_number){ + frm.add_custom_button( + __("Submit"), + function () { + + + frappe.call({ + method: "tims_tevin_typec_integration.tims_tevic_type_c_integration.overrides.server.sales_invoice.single_invoice_submission", + args: { + doc: frm.doc, + }, + callback: function (response) { + if (response.message) { + console.log() + } + }, + }); + }, + __("eTims Actions") + ); + } + }, }); + diff --git a/tims_tevin_typec_integration/tims_tevic_type_c_integration/overrides/server/sales_invoice.py b/tims_tevin_typec_integration/tims_tevic_type_c_integration/overrides/server/sales_invoice.py index b20ef1f..a235ffd 100644 --- a/tims_tevin_typec_integration/tims_tevic_type_c_integration/overrides/server/sales_invoice.py +++ b/tims_tevin_typec_integration/tims_tevic_type_c_integration/overrides/server/sales_invoice.py @@ -6,7 +6,7 @@ import qrcode import requests - +import json import frappe from frappe.integrations.utils import create_request_log from frappe.model.document import Document @@ -21,7 +21,6 @@ def on_submit(doc: Document, method: str | None = None) -> None: """Submit hook for Sales Invoice that submits tax information to TIMS device""" company = frappe.defaults.get_user_default("Company") - # Fetch active setting tied to current company # TODO: tie in additional filters to allow fine-grained searching of setting[s] setting = frappe.db.get_value( "TIMS Settings", @@ -94,7 +93,7 @@ def on_submit(doc: Document, method: str | None = None) -> None: for item in doc.items: item_details.append( { - "HSDesc": item.description, + "HSDesc": strip_html_tags(item.description), "TaxRate": 0, "ItemAmount": abs(item.net_amount), "TaxAmount": 0, @@ -197,6 +196,11 @@ def is_valid_kra_pin(pin: str) -> bool: return bool(re.match(pattern, pin)) +def strip_html_tags(text): + clean_text = re.sub(r'<[^>]*>', '', text) + return clean_text + + def update_integration_request( integration_request: str, status: Literal["Completed", "Failed"], @@ -363,3 +367,14 @@ def validate_relevant_invoice_number(relevant_invoice_number): "The Relevant Invoice Number must be exactly 19 characters long and should be the CU number. Current length: {}.".format(len(relevant_invoice_number)) ) +@frappe.whitelist() +def single_invoice_submission(doc): + doc_name = json.loads(doc).get("name") + doc = frappe.get_doc("Sales Invoice", doc_name) + on_submit(doc) + frappe.msgprint("TIMS submission successful") + + + + + \ No newline at end of file