From 4b969a5b9b45c01dde60c386c41ff624a25c64b7 Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Wed, 30 Sep 2020 18:24:24 +0530 Subject: [PATCH] feat: e-way bill details in e-invoice --- erpnext/regional/india/e_invoice_utils.py | 37 +++++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/erpnext/regional/india/e_invoice_utils.py b/erpnext/regional/india/e_invoice_utils.py index 001e9ac358e..f597e329621 100644 --- a/erpnext/regional/india/e_invoice_utils.py +++ b/erpnext/regional/india/e_invoice_utils.py @@ -238,7 +238,11 @@ def get_trans_details(invoice): )) def get_doc_details(invoice): - invoice_type = 'CRN' if invoice.is_return else 'INV' + if invoice.doctype == 'Purchase Invoice' and invoice.is_return: + invoice_type = 'DBN' + else: + invoice_type = 'CRN' if invoice.is_return else 'INV' + invoice_name = invoice.name invoice_date = format_date(invoice.posting_date, 'dd/mm/yyyy') @@ -367,6 +371,24 @@ def get_return_doc_reference(invoice): invoice_name=invoice.return_against, invoice_date=invoice_date )) +def get_eway_bill_details(invoice): + if not invoice.distance: + frappe.throw(_("Distance is mandatory for E-Way Bill generation"), title=_("Missing Values")) + + mode_of_transport = { 'Road': '1', 'Air': '2', 'Rail': '3', 'Ship': '4' } + vehicle_type = { 'Regular': 'R', 'Over Dimensional Cargo (ODC)': 'O' } + + return frappe._dict(dict( + gstin=invoice.gst_transporter_id, + name=invoice.transporter_name, + mode_of_transport=mode_of_transport[invoice.mode_of_transport], + distance=invoice.distance, + document_name=invoice.lr_no, + document_date=format_date(invoice.lr_date, 'dd/mm/yyyy'), + vehicle_no=invoice.vehicle_no, + vehicle_type=vehicle_type[invoice.gst_vehicle_type] + )) + def make_e_invoice(invoice): schema = read_json("einv_template") validations = read_json("einv_validation") @@ -385,12 +407,8 @@ def make_e_invoice(invoice): item_list = get_item_list(invoice) value_details = get_value_details(invoice) - - dispatch_details = frappe._dict({}) - period_details = frappe._dict({}) + shipping_details = frappe._dict({}) - export_details = frappe._dict({}) - eway_bill_details = frappe._dict({}) if invoice.shipping_address_name and invoice.customer_address != invoice.shipping_address_name: shipping_details = get_party_gstin_details(invoice.shipping_address_name) @@ -401,6 +419,13 @@ def make_e_invoice(invoice): prev_doc_details = frappe._dict({}) if invoice.is_return and invoice.return_against: prev_doc_details = get_return_doc_reference(invoice) + + dispatch_details = frappe._dict({}) + period_details = frappe._dict({}) + export_details = frappe._dict({}) + eway_bill_details = frappe._dict({}) + if invoice.transporter: + eway_bill_details = get_eway_bill_details(invoice) e_invoice = schema.format( trans_details=trans_details, doc_details=doc_details, dispatch_details=dispatch_details,