diff --git a/erpnext/accounts/doctype/sales_invoice/regional/india.js b/erpnext/accounts/doctype/sales_invoice/regional/india.js index 1ed4b92e7a4..f54bce8aac7 100644 --- a/erpnext/accounts/doctype/sales_invoice/regional/india.js +++ b/erpnext/accounts/doctype/sales_invoice/regional/india.js @@ -1,6 +1,8 @@ {% include "erpnext/regional/india/taxes.js" %} +{% include "erpnext/regional/india/e_invoice/einvoice.js" %} erpnext.setup_auto_gst_taxation('Sales Invoice'); +erpnext.setup_einvoice_actions('Sales Invoice') frappe.ui.form.on("Sales Invoice", { setup: function(frm) { @@ -46,8 +48,6 @@ frappe.ui.form.on("Sales Invoice", { }, __("Create")); } - }, + } }); - - diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index d4d40653e77..498f7097293 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -225,9 +225,9 @@ class SalesInvoice(SellingController): frappe.throw(_("At least one mode of payment is required for POS invoice.")) def before_cancel(self): + super(SalesInvoice, self).before_cancel() self.update_time_sheet(None) - def on_cancel(self): super(SalesInvoice, self).on_cancel() diff --git a/erpnext/accounts/print_format/gst_e_invoice/__init__.py b/erpnext/accounts/print_format/gst_e_invoice/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.html b/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.html new file mode 100644 index 00000000000..b4255038d39 --- /dev/null +++ b/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.html @@ -0,0 +1,147 @@ +{%- from "templates/print_formats/standard_macros.html" import add_header, render_field, print_value -%} +{%- set einvoice = json.loads(doc.signed_einvoice) -%} + +
{{ seller.Gstin }}
+{{ seller.LglNm }}
+{{ seller.Addr1 }}
+ {%- if seller.Addr2 -%}{{ seller.Addr2 }}
{% endif %} +{{ seller.Loc }}
+{{ frappe.db.get_value("Address", doc.company_address, "gst_state") }} - {{ seller.Pin }}
+ + {%- if einvoice.ShipDtls -%} + {%- set shipping = einvoice.ShipDtls -%} +{{ shipping.Gstin }}
+{{ shipping.LglNm }}
+{{ shipping.Addr1 }}
+ {%- if shipping.Addr2 -%}{{ shipping.Addr2 }}
{% endif %} +{{ shipping.Loc }}
+{{ frappe.db.get_value("Address", doc.shipping_address_name, "gst_state") }} - {{ shipping.Pin }}
+ {% endif %} +{{ buyer.Gstin }}
+{{ buyer.LglNm }}
+{{ buyer.Addr1 }}
+ {%- if buyer.Addr2 -%}{{ buyer.Addr2 }}
{% endif %} +{{ buyer.Loc }}
+{{ frappe.db.get_value("Address", doc.customer_address, "gst_state") }} - {{ buyer.Pin }}
+| Sr. No. | +Item | +HSN Code | +Qty | +UOM | +Rate | +Discount | +Taxable Amount | +Tax Rate | +Other Charges | +Total | +
|---|---|---|---|---|---|---|---|---|---|---|
| {{ item.SlNo }} | +{{ item.PrdDesc }} | +{{ item.HsnCd }} | +{{ item.Qty }} | +{{ item.Unit }} | +{{ frappe.utils.fmt_money(item.UnitPrice, None, "INR") }} | +{{ frappe.utils.fmt_money(item.Discount, None, "INR") }} | +{{ frappe.utils.fmt_money(item.AssAmt, None, "INR") }} | +{{ item.GstRt + item.CesRt }} % | +{{ frappe.utils.fmt_money(0, None, "INR") }} | +{{ frappe.utils.fmt_money(item.TotItemVal, None, "INR") }} | +
| Taxable Amount | +CGST | +SGST | +IGST | +CESS | +State CESS | +Discount | +Other Charges | +Round Off | +Total Value | +
|---|---|---|---|---|---|---|---|---|---|
| {{ frappe.utils.fmt_money(value_details.AssVal, None, "INR") }} | +{{ frappe.utils.fmt_money(value_details.CgstVal, None, "INR") }} | +{{ frappe.utils.fmt_money(value_details.SgstVal, None, "INR") }} | +{{ frappe.utils.fmt_money(value_details.IgstVal, None, "INR") }} | +{{ frappe.utils.fmt_money(value_details.CesVal, None, "INR") }} | +{{ frappe.utils.fmt_money(0, None, "INR") }} | +{{ frappe.utils.fmt_money(value_details.Discount, None, "INR") }} | +{{ frappe.utils.fmt_money(0, None, "INR") }} | +{{ frappe.utils.fmt_money(value_details.RndOffAmt, None, "INR") }} | +{{ frappe.utils.fmt_money(value_details.TotInvVal, None, "INR") }} | +