Merge branch 'develop' into fix/supplier-portal/make-pi-btn
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index 4f8b5c7..8eae0a0 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -212,21 +212,15 @@
 	meta = frappe.get_meta(doctype, cached=True)
 	searchfields = meta.get_search_fields()
 
-	# these are handled separately
-	ignored_search_fields = ("item_name", "description")
-	for ignored_field in ignored_search_fields:
-		if ignored_field in searchfields:
-			searchfields.remove(ignored_field)
-
 	columns = ""
-	extra_searchfields = [
-		field
-		for field in searchfields
-		if not field in ["name", "item_group", "description", "item_name"]
-	]
+	extra_searchfields = [field for field in searchfields if not field in ["name", "description"]]
 
 	if extra_searchfields:
-		columns = ", " + ", ".join(extra_searchfields)
+		columns += ", " + ", ".join(extra_searchfields)
+
+	if "description" in searchfields:
+		columns += """, if(length(tabItem.description) > 40, \
+			concat(substr(tabItem.description, 1, 40), "..."), description) as description"""
 
 	searchfields = searchfields + [
 		field
@@ -266,12 +260,10 @@
 	if frappe.db.count(doctype, cache=True) < 50000:
 		# scan description only if items are less than 50000
 		description_cond = "or tabItem.description LIKE %(txt)s"
+
 	return frappe.db.sql(
 		"""select
-			tabItem.name, tabItem.item_name, tabItem.item_group,
-		if(length(tabItem.description) > 40, \
-			concat(substr(tabItem.description, 1, 40), "..."), description) as description
-		{columns}
+			tabItem.name {columns}
 		from tabItem
 		where tabItem.docstatus < 2
 			and tabItem.disabled=0
diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py
index 202a880..6bc88d1 100644
--- a/erpnext/controllers/subcontracting_controller.py
+++ b/erpnext/controllers/subcontracting_controller.py
@@ -841,7 +841,7 @@
 			for fg_item_code in fg_item_code_list:
 				for rm_item in rm_items:
 
-					if rm_item.get("main_item_code") or rm_item.get("item_code") == fg_item_code:
+					if rm_item.get("main_item_code") == fg_item_code or rm_item.get("item_code") == fg_item_code:
 						rm_item_code = rm_item.get("rm_item_code")
 
 						items_dict = {
diff --git a/erpnext/patches/v13_0/update_old_loans.py b/erpnext/patches/v13_0/update_old_loans.py
index a1d40b7..0bd3fcd 100644
--- a/erpnext/patches/v13_0/update_old_loans.py
+++ b/erpnext/patches/v13_0/update_old_loans.py
@@ -100,6 +100,7 @@
 					"mode_of_payment": loan.mode_of_payment,
 					"loan_account": loan.loan_account,
 					"payment_account": loan.payment_account,
+					"disbursement_account": loan.payment_account,
 					"interest_income_account": loan.interest_income_account,
 					"penalty_income_account": loan.penalty_income_account,
 				},
@@ -190,6 +191,7 @@
 	loan_type_doc.company = loan.company
 	loan_type_doc.mode_of_payment = loan.mode_of_payment
 	loan_type_doc.payment_account = loan.payment_account
+	loan_type_doc.disbursement_account = loan.payment_account
 	loan_type_doc.loan_account = loan.loan_account
 	loan_type_doc.interest_income_account = loan.interest_income_account
 	loan_type_doc.penalty_income_account = penalty_account
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
index 1cee553..e35c8bf 100644
--- a/erpnext/stock/doctype/item/test_item.py
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -5,6 +5,7 @@
 import json
 
 import frappe
+from frappe.custom.doctype.property_setter.property_setter import make_property_setter
 from frappe.test_runner import make_test_objects
 from frappe.tests.utils import FrappeTestCase, change_settings
 from frappe.utils import add_days, today
@@ -816,6 +817,30 @@
 		item.reload()
 		self.assertEqual(item.is_stock_item, 1)
 
+	def test_serach_fields_for_item(self):
+		from erpnext.controllers.queries import item_query
+
+		make_property_setter("Item", None, "search_fields", "item_name", "Data", for_doctype="Doctype")
+
+		item = make_item(properties={"item_name": "Test Item", "description": "Test Description"})
+		data = item_query(
+			"Item", "Test Item", "", 0, 20, filters={"item_name": "Test Item"}, as_dict=True
+		)
+		self.assertEqual(data[0].name, item.name)
+		self.assertEqual(data[0].item_name, item.item_name)
+		self.assertTrue("description" not in data[0])
+
+		make_property_setter(
+			"Item", None, "search_fields", "item_name, description", "Data", for_doctype="Doctype"
+		)
+		data = item_query(
+			"Item", "Test Item", "", 0, 20, filters={"item_name": "Test Item"}, as_dict=True
+		)
+		self.assertEqual(data[0].name, item.name)
+		self.assertEqual(data[0].item_name, item.item_name)
+		self.assertEqual(data[0].description, item.description)
+		self.assertTrue("description" in data[0])
+
 
 def set_item_variant_settings(fields):
 	doc = frappe.get_doc("Item Variant Settings")
diff --git a/erpnext/www/book_appointment/index.html b/erpnext/www/book_appointment/index.html
index 207175f..ad964d9 100644
--- a/erpnext/www/book_appointment/index.html
+++ b/erpnext/www/book_appointment/index.html
@@ -12,8 +12,8 @@
     <!-- title: Book an appointment -->
     <div id="select-date-time">
         <div class="text-center mt-5">
-            <h3>Book an appointment</h3>
-            <p class="lead text-muted" id="lead-text">Select the date and your timezone</p>
+            <h3>{{ _("Book an appointment") }}</h3>
+            <p class="lead text-muted" id="lead-text">{{ _("Select the date and your timezone") }}</p>
         </div>
         <div class="row justify-content-center mt-3">
             <div class="col-md-6 align-self-center ">
@@ -31,7 +31,7 @@
         </div>
         <div class="row justify-content-center mt-3">
             <div class="col-md-4 mb-3">
-                <button class="btn btn-primary form-control" id="next-button">Next</button>
+                <button class="btn btn-primary form-control" id="next-button">{{ _("Next") }}</button>
             </div>
         </div>
     </div>
@@ -39,24 +39,24 @@
 <!--Enter Details-->
 <div id="enter-details" class="mb-5">
     <div class="text-center mt-5">
-        <h3>Add details</h3>
-        <p class="lead text-muted">Selected date is <span class="date-span"></span> at <span class="time-span">
+        <h3>{{ _("Add details") }}</h3>
+        <p class="lead text-muted">{{ _("Selected date is") }} <span class="date-span"></span> {{ _("at") }} <span class="time-span">
             </span></p>
     </div>
     <div class="row justify-content-center mt-3">
         <div class="col-md-4 align-items-center">
             <form id="customer-form" action='#'>
-            <input class="form-control mt-3" type="text" name="customer_name" id="customer_name" placeholder="Your Name (required)" required>
+            <input class="form-control mt-3" type="text" name="customer_name" id="customer_name" placeholder="{{ _('Your Name (required)') }}" required>
             <input class="form-control mt-3" type="tel" name="customer_number" id="customer_number" placeholder="+910000000000">
             <input class="form-control mt-3" type="text" name="customer_skype" id="customer_skype" placeholder="Skype">
-            <input class="form-control mt-3"type="email" name="customer_email" id="customer_email" placeholder="Email Address (required)" required>
+            <input class="form-control mt-3"type="email" name="customer_email" id="customer_email" placeholder="{{ _('Email Address (required)') }}" required>
 
             <textarea class="form-control mt-3" name="customer_notes" id="customer_notes" cols="30" rows="10"
-                placeholder="Notes"></textarea>
+                placeholder="{{ _('Notes') }}"></textarea>
             </form>
             <div class="row mt-3 " id="submit-button-area">
-                <div class="col-md mt-3" style="grid-area: back;"><button class="btn btn-dark form-control" onclick="initialise_select_date()">Go back</button></div>
-                <div class="col-md mt-3" style="grid-area: submit;"><button class="btn btn-primary form-control " onclick="submit()" id="submit-button">Submit</button></div>
+                <div class="col-md mt-3" style="grid-area: back;"><button class="btn btn-dark form-control" onclick="initialise_select_date()">{{ _("Go back") }}</button></div>
+                <div class="col-md mt-3" style="grid-area: submit;"><button class="btn btn-primary form-control " onclick="submit()" id="submit-button">{{ _("Submit") }}</button></div>
             </div>
         </div>
     </div>
diff --git a/erpnext/www/book_appointment/index.js b/erpnext/www/book_appointment/index.js
index 5562cbd..46ac155 100644
--- a/erpnext/www/book_appointment/index.js
+++ b/erpnext/www/book_appointment/index.js
@@ -69,7 +69,7 @@
     window.selected_timezone = timezone.value;
     update_time_slots(date_picker.value, timezone.value);
     let lead_text = document.getElementById('lead-text');
-    lead_text.innerHTML = "Select Time"
+    lead_text.innerHTML = __("Select Time")
 }
 
 async function get_time_slots(date, timezone) {
@@ -89,7 +89,7 @@
     clear_time_slots();
     if (window.slots.length <= 0) {
         let message_div = document.createElement('p');
-        message_div.innerHTML = "There are no slots available on this date";
+        message_div.innerHTML = __("There are no slots available on this date");
         timeslot_container.appendChild(message_div);
         return
     }
@@ -128,7 +128,7 @@
     let start_time_string = moment(time).tz(timezone).format("LT");
     let end_time = moment(time).tz(timezone).add(window.appointment_settings.appointment_duration, 'minutes');
     let end_time_string = end_time.format("LT");
-    return `<span style="font-size: 1.2em;">${start_time_string}</span><br><span class="text-muted small">to ${end_time_string}</span>`;
+    return `<span style="font-size: 1.2em;">${start_time_string}</span><br><span class="text-muted small">${__("to") } ${end_time_string}</span>`;
 }
 
 function select_time() {
@@ -227,9 +227,9 @@
         },
         callback: (response)=>{
             if (response.message.status == "Unverified") {
-                frappe.show_alert("Please check your email to confirm the appointment")
+                frappe.show_alert(__("Please check your email to confirm the appointment"))
             } else {
-                frappe.show_alert("Appointment Created Successfully");
+                frappe.show_alert(__("Appointment Created Successfully"));
             }
             setTimeout(()=>{
                 let redirect_url = "/";
@@ -239,7 +239,7 @@
                 window.location.href = redirect_url;},5000)
         },
         error: (err)=>{
-            frappe.show_alert("Something went wrong please try again");
+            frappe.show_alert(__("Something went wrong please try again"));
             button.disabled = false;
         }
     });
diff --git a/erpnext/www/book_appointment/verify/index.html b/erpnext/www/book_appointment/verify/index.html
index 9bcd3d2..58c07e8 100644
--- a/erpnext/www/book_appointment/verify/index.html
+++ b/erpnext/www/book_appointment/verify/index.html
@@ -8,11 +8,11 @@
 
     {% if success==True %}
         <div class="alert alert-success">
-            Your email has been verified and your appointment has been scheduled
+            {{ _("Your email has been verified and your appointment has been scheduled") }}
         </div>
     {% else %}
         <div class="alert alert-danger">
-            Verification failed please check the link
+            {{ _("Verification failed please check the link") }}
         </div>
     {% endif %}
 {% endblock%}