fix: don't reset rates in Timesheet Detail when Activity Type is cleared (#28056)

* fix: don't reset rates when activity type is cleared

* refactor: suggestions from review

Co-authored-by: Sagar Vora <sagar@resilient.tech>

* refactor: suggestions from review (fix)

* style: fix sider

* fix: sider issue

Co-authored-by: Sagar Vora <sagar@resilient.tech>
diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js
index 65a8566..f615f05 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.js
+++ b/erpnext/projects/doctype/timesheet/timesheet.js
@@ -283,7 +283,9 @@
 		calculate_time_and_amount(frm);
 	},
 
-	activity_type: function(frm, cdt, cdn) {
+	activity_type: function (frm, cdt, cdn) {
+		if (!frappe.get_doc(cdt, cdn).activity_type) return;
+
 		frappe.call({
 			method: "erpnext.projects.doctype.timesheet.timesheet.get_activity_cost",
 			args: {
@@ -291,10 +293,10 @@
 				activity_type: frm.selected_doc.activity_type,
 				currency: frm.doc.currency
 			},
-			callback: function(r){
-				if(r.message){
-					frappe.model.set_value(cdt, cdn, 'billing_rate', r.message['billing_rate']);
-					frappe.model.set_value(cdt, cdn, 'costing_rate', r.message['costing_rate']);
+			callback: function (r) {
+				if (r.message) {
+					frappe.model.set_value(cdt, cdn, "billing_rate", r.message["billing_rate"]);
+					frappe.model.set_value(cdt, cdn, "costing_rate", r.message["costing_rate"]);
 					calculate_billing_costing_amount(frm, cdt, cdn);
 				}
 			}