Merge pull request #16375 from deepeshgarg007/company_address

feat: Company address and GST field addition in sales order, purchase order, purchase receipt
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py
index 7ecc695..01211a9 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.py
+++ b/erpnext/accounts/report/gross_profit/gross_profit.py
@@ -184,7 +184,7 @@
 	def get_returned_invoice_items(self):
 		returned_invoices = frappe.db.sql("""
 			select
-				si.name, si_item.item_code, si_item.qty, si_item.base_amount, si.return_against
+				si.name, si_item.item_code, si_item.stock_qty as qty, si_item.base_net_amount as base_amount, si.return_against
 			from
 				`tabSales Invoice` si, `tabSales Invoice Item` si_item
 			where
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 1568a7a..491ddeb 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -302,6 +302,9 @@
 	if sn.warehouse:
 		return True
 
+	if sn.company != sle.company:
+		return False
+
 	status = False
 	if sn.purchase_document_no:
 		if sle.voucher_type in ['Purchase Receipt', 'Stock Entry', "Purchase Invoice"] and \
@@ -357,6 +360,7 @@
 			sr.warehouse = args.get('warehouse') if args.get('actual_qty', 0) > 0 else None
 			sr.batch_no = args.get('batch_no')
 			sr.location = args.get('location')
+			sr.company = args.get('company')
 			if sr.sales_order and args.get('voucher_type') == "Stock Entry" \
 				and not args.get('actual_qty', 0) > 0:
 				sr.sales_order = None
diff --git a/erpnext/stock/doctype/serial_no/test_serial_no.py b/erpnext/stock/doctype/serial_no/test_serial_no.py
index 89062f9..ed70790 100644
--- a/erpnext/stock/doctype/serial_no/test_serial_no.py
+++ b/erpnext/stock/doctype/serial_no/test_serial_no.py
@@ -7,6 +7,12 @@
 from __future__ import unicode_literals
 import frappe, unittest
 
+from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
+from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
+from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
+from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
+
 test_dependencies = ["Item"]
 test_records = frappe.get_test_records('Serial No')
 
@@ -29,3 +35,21 @@
 
 		sr.warehouse = "_Test Warehouse - _TC"
 		self.assertTrue(SerialNoCannotCannotChangeError, sr.save)
+
+	def test_inter_company_transfer(self):
+		se = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
+		serial_nos = get_serial_nos(se.get("items")[0].serial_no)
+
+		create_delivery_note(item_code="_Test Serialized Item With Series", qty=1, serial_no=serial_nos[0])
+
+		wh = create_warehouse("_Test Warehouse", company="_Test Company 1")
+		make_purchase_receipt(item_code="_Test Serialized Item With Series", qty=1, serial_no=serial_nos[0],
+			company="_Test Company 1", warehouse=wh)
+
+		serial_no = frappe.db.get_value("Serial No", serial_nos[0], ["warehouse", "company"], as_dict=1)
+
+		self.assertEqual(serial_no.warehouse, wh)
+		self.assertEqual(serial_no.company, "_Test Company 1")
+
+	def tearDown(self):
+		frappe.db.rollback()
\ No newline at end of file
diff --git a/erpnext/stock/doctype/warehouse/test_warehouse.py b/erpnext/stock/doctype/warehouse/test_warehouse.py
index b033f86..dc39e10 100644
--- a/erpnext/stock/doctype/warehouse/test_warehouse.py
+++ b/erpnext/stock/doctype/warehouse/test_warehouse.py
@@ -8,6 +8,7 @@
 from frappe.test_runner import make_test_records
 from erpnext.accounts.doctype.account.test_account import get_inventory_account, create_account
 
+import erpnext
 import frappe
 import unittest
 test_records = frappe.get_test_records('Warehouse')
@@ -90,17 +91,24 @@
 		self.assertTrue(frappe.db.get_value("Warehouse",
 			filters={"account": "Test Warehouse for Merging 2 - _TC"}))
 
-def create_warehouse(warehouse_name, properties=None):
-	if not frappe.db.exists("Warehouse", warehouse_name + " - _TC"):
+def create_warehouse(warehouse_name, properties=None, company=None):
+	if not company:
+		company = "_Test Company"
+
+	warehouse_id = erpnext.encode_company_abbr(warehouse_name, company)
+	if not frappe.db.exists("Warehouse", warehouse_id):
 		w = frappe.new_doc("Warehouse")
 		w.warehouse_name = warehouse_name
 		w.parent_warehouse = "_Test Warehouse Group - _TC"
-		w.company = "_Test Company"
+		w.company = company
 		make_account_for_warehouse(warehouse_name, w)
-		w.account = warehouse_name + " - _TC"
+		w.account = warehouse_id
 		if properties:
 			w.update(properties)
 		w.save()
+		return w.name
+	else:
+		return warehouse_id
 
 def make_account_for_warehouse(warehouse_name, warehouse_obj):
 	if not frappe.db.exists("Account", warehouse_name + " - _TC"):