diff --git a/india_compliance/gst_india/client_scripts/e_invoice_actions.js b/india_compliance/gst_india/client_scripts/e_invoice_actions.js index 546684eed9..2aaaa96e3c 100644 --- a/india_compliance/gst_india/client_scripts/e_invoice_actions.js +++ b/india_compliance/gst_india/client_scripts/e_invoice_actions.js @@ -204,19 +204,17 @@ function show_mark_e_invoice_as_generated_dialog(frm) { title: __("Update e-Invoice Details"), fields: get_generated_e_invoice_dialog_fields(), primary_action_label: __("Update"), - primary_action(values) { - frappe.call({ + async primary_action(values) { + await taxpayer_api.call({ method: "india_compliance.gst_india.utils.e_invoice.mark_e_invoice_as_generated", args: { doctype: frm.doctype, docname: frm.doc.name, values, - }, - callback: () => { - d.hide(); - frm.refresh(); - }, + } }); + d.hide(); + frm.refresh(); }, }); @@ -231,17 +229,25 @@ function get_generated_e_invoice_dialog_fields() { fieldtype: "Data", reqd: 1, }, + { + label: "Fetch Invoice Details", + fieldname: "fetch_invoice_details", + fieldtype: "Check", + default: 1, + }, { label: "Acknowledgement Number", fieldname: "ack_no", fieldtype: "Data", - reqd: 1, + mandatory_depends_on: "eval: !doc.fetch_invoice_details", + depends_on: "eval: !doc.fetch_invoice_details", }, { label: "Acknowledged On", fieldname: "ack_dt", fieldtype: "Datetime", - reqd: 1, + mandatory_depends_on: "eval: !doc.fetch_invoice_details", + depends_on: "eval: !doc.fetch_invoice_details", }, ]; return fields; diff --git a/india_compliance/gst_india/doctype/e_invoice_log/e_invoice_log.js b/india_compliance/gst_india/doctype/e_invoice_log/e_invoice_log.js index f9cf744010..6adca3d1fd 100644 --- a/india_compliance/gst_india/doctype/e_invoice_log/e_invoice_log.js +++ b/india_compliance/gst_india/doctype/e_invoice_log/e_invoice_log.js @@ -1,8 +1,24 @@ // Copyright (c) 2022, Resilient Tech and contributors // For license information, please see license.txt -// frappe.ui.form.on('e-Invoice Log', { -// refresh: function(frm) { +frappe.ui.form.on('e-Invoice Log', { + refresh: function (frm) { + if (!frm.doc.invoice_data) { + frm.add_custom_button(__('Fetch e-Invoice Details'), () => fetch_e_invoice_details(frm)); + } + }, +}); -// } -// }); +function fetch_e_invoice_details(frm) { + taxpayer_api.call({ + method: "india_compliance.gst_india.utils.e_invoice.mark_e_invoice_as_generated", + args: { + "doctype": frm.doc.reference_doctype, + "docname": frm.doc.reference_name, + "values": {"irn" : frm.doc.irn, "fetch_invoice_details": 1} + }, + callback: function () { + frm.reload_doc(); + } + }); +} diff --git a/india_compliance/gst_india/utils/e_invoice.py b/india_compliance/gst_india/utils/e_invoice.py index d340e2db6c..e556417657 100644 --- a/india_compliance/gst_india/utils/e_invoice.py +++ b/india_compliance/gst_india/utils/e_invoice.py @@ -16,6 +16,9 @@ from india_compliance.exceptions import GSPServerError from india_compliance.gst_india.api_classes.e_invoice import EInvoiceAPI +from india_compliance.gst_india.api_classes.taxpayer_base import ( + otp_handler, +) from india_compliance.gst_india.api_classes.taxpayer_e_invoice import ( EInvoiceAPI as TaxpayerEInvoiceAPI, ) @@ -385,18 +388,27 @@ def log_and_process_e_invoice_cancellation(doc, values, result, message): @frappe.whitelist() +@otp_handler def mark_e_invoice_as_generated(doctype, docname, values): doc = load_doc(doctype, docname, "submit") values = frappe.parse_json(values) - result = frappe._dict( - { - "Irn": values.irn, - "AckDt": values.ack_dt, - "AckNo": values.ack_no, - "einvoice_status": "Manually Generated", - } - ) + if values.fetch_invoice_details: + api = EInvoiceAPI(doc) + result = api.get_e_invoice_by_irn(values.irn) + + if result.error_code == "2283": + result = TaxpayerEInvoiceAPI(doc).get_irn_details(values.irn) + + else: + result = frappe._dict( + { + "Irn": values.irn, + "AckDt": values.ack_dt, + "AckNo": values.ack_no, + "einvoice_status": "Manually Generated", + } + ) return log_and_process_e_invoice_generation( doc, result, message="e-Invoice updated successfully"