Merge pull request #17522 from rohitwaghchaure/invoiced_items_gross_margin_api_develop

feat: Get invoiced item's gross margin using API
diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
index 7faabf4..01da810 100644
--- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
+++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py
@@ -227,18 +227,18 @@
 
 		for d in inter_state_supply.get("Unregistered", []):
 			self.report_dict["inter_sup"]["unreg_details"].append(d)
-			self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
-			self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
+			self.report_dict["sup_details"]["osup_det"]["txval"] += flt(d["txval"], 2)
+			self.report_dict["sup_details"]["osup_det"]["iamt"] += flt(d["iamt"], 2)
 
 		for d in inter_state_supply.get("Registered Composition", []):
 			self.report_dict["inter_sup"]["comp_details"].append(d)
-			self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
-			self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
+			self.report_dict["sup_details"]["osup_det"]["txval"] += flt(d["txval"], 2)
+			self.report_dict["sup_details"]["osup_det"]["iamt"] += flt(d["iamt"], 2)
 
 		for d in inter_state_supply.get("UIN Holders", []):
 			self.report_dict["inter_sup"]["uin_details"].append(d)
-			self.report_dict["sup_details"]["osup_det"]["txval"] += d["txval"]
-			self.report_dict["sup_details"]["osup_det"]["iamt"] += d["iamt"]
+			self.report_dict["sup_details"]["osup_det"]["txval"] += flt(d["txval"], 2)
+			self.report_dict["sup_details"]["osup_det"]["iamt"] += flt(d["iamt"], 2)
 
 	def get_total_taxable_value(self, doctype, reverse_charge):
 
diff --git a/erpnext/regional/report/gstr_1/gstr_1.py b/erpnext/regional/report/gstr_1/gstr_1.py
index a29d5b4..f6c4782 100644
--- a/erpnext/regional/report/gstr_1/gstr_1.py
+++ b/erpnext/regional/report/gstr_1/gstr_1.py
@@ -29,10 +29,10 @@
 			place_of_supply,
 			ecommerce_gstin,
 			reverse_charge,
-			gst_category,
+			invoice_type,
 			return_against,
 			is_return,
-			gst_category,
+			invoice_type,
 			export_type,
 			port_code,
 			shipping_bill_number,
@@ -324,8 +324,8 @@
 					"fieldtype": "Data"
 				},
 				{
-					"fieldname": "gst_category",
-					"label": "GST Category",
+					"fieldname": "invoice_type",
+					"label": "Invoice Type",
 					"fieldtype": "Data"
 				},
 				{
@@ -577,7 +577,7 @@
 	download_json_file(report_name, filters["type_of_business"], gst_json)
 
 def get_b2b_json(res, gstin):
-	inv_type, out = {"Registered Regular": "R", "Deemed Export": "DE", "URD": "URD", "SEZ": "SEZ"}, []
+	inv_type, out = {"Regular": "R", "Deemed Export": "DE", "URD": "URD", "SEZ": "SEZ"}, []
 	for gst_in in res:
 		b2b_item, inv = {"ctin": gst_in, "inv": []}, []
 		if not gst_in: continue
@@ -586,7 +586,7 @@
 			inv_item = get_basic_invoice_detail(invoice[0])
 			inv_item["pos"] = "%02d" % int(invoice[0]["place_of_supply"].split('-')[0])
 			inv_item["rchrg"] = invoice[0]["reverse_charge"]
-			inv_item["inv_typ"] = inv_type.get(invoice[0].get("gst_category", ""),"")
+			inv_item["inv_typ"] = inv_type.get(invoice[0].get("invoice_type", ""),"")
 
 			if inv_item["pos"]=="00": continue
 			inv_item["itms"] = []
diff --git a/erpnext/utilities/activation.py b/erpnext/utilities/activation.py
index 5f261fa..63c36b3 100644
--- a/erpnext/utilities/activation.py
+++ b/erpnext/utilities/activation.py
@@ -5,50 +5,35 @@
 import frappe, erpnext
 
 from frappe import _
+from six import iteritems
 
 def get_level():
 	activation_level = 0
+	sales_data = []
+	min_count = 0
+	doctypes = {"Item": 5, "Customer": 5, "Sales Order": 2, "Sales Invoice": 2, "Purchase Order": 2, "Employee": 3, "Lead": 3, "Quotation": 3,
+					"Payment Entry": 2, "User": 5, "Student": 5, "Instructor": 5, "BOM": 3, "Journal Entry": 3, "Stock Entry": 3}
+	for doctype, min_count in iteritems(doctypes):
+		count = frappe.db.count(doctype)
+		if count > min_count:
+			activation_level += 1
+		sales_data.append({doctype: count})
+
 	if frappe.db.get_single_value('System Settings', 'setup_complete'):
-		activation_level = 1
-
-	if frappe.db.count('Item') > 5:
 		activation_level += 1
 
-	if frappe.db.count('Customer') > 5:
+	communication_number = frappe.db.count('Communication', dict(communication_medium='Email'))
+	if communication_number > 10:
 		activation_level += 1
-
-	if frappe.db.count('Sales Order') > 2:
-		activation_level += 1
-
-	if frappe.db.count('Purchase Order') > 2:
-		activation_level += 1
-
-	if frappe.db.count('Employee') > 3:
-		activation_level += 1
-
-	if frappe.db.count('Lead') > 3:
-		activation_level += 1
-
-	if frappe.db.count('Payment Entry') > 2:
-		activation_level += 1
-
-	if frappe.db.count('Communication', dict(communication_medium='Email')) > 10:
-		activation_level += 1
-
-	if frappe.db.count('User') > 5:
-		activation_level += 1
-
-	if frappe.db.count('Student') > 5:
-		activation_level += 1
-
-	if frappe.db.count('Instructor') > 5:
-		activation_level += 1
+	sales_data.append({"Communication": communication_number})
 
 	# recent login
 	if frappe.db.sql('select name from tabUser where last_login > date_sub(now(), interval 2 day) limit 1'):
 		activation_level += 1
 
-	return activation_level
+	level = {"activation_level": activation_level, "sales_data": sales_data}
+
+	return level
 
 def get_help_messages():
 	'''Returns help messages to be shown on Desktop'''