fix: refactor asset depr schedule and remove unnecessary depr method (#34434)
* fix: remove depr method from depr schedule and refactor assetdeprsch * chore: use assetdeprsch's depr method, not deprschedule's * fix: use default 0 value for NDB and OAD * chore: fix rounded numbers * chore: correct rounding in test_website_item_price_for_logged_in_user
This commit is contained in:
		| @@ -828,8 +828,8 @@ class TestDepreciationMethods(AssetSetup): | ||||
| 		expected_schedules = [ | ||||
| 			["2030-12-31", 28630.14, 28630.14], | ||||
| 			["2031-12-31", 35684.93, 64315.07], | ||||
| 			["2032-12-31", 17842.47, 82157.54], | ||||
| 			["2033-06-06", 5342.46, 87500.0], | ||||
| 			["2032-12-31", 17842.46, 82157.53], | ||||
| 			["2033-06-06", 5342.47, 87500.0], | ||||
| 		] | ||||
|  | ||||
| 		schedules = [ | ||||
|   | ||||
| @@ -140,8 +140,8 @@ class AssetDepreciationSchedule(Document): | ||||
| 		self.asset = asset_doc.name | ||||
| 		self.finance_book = row.finance_book | ||||
| 		self.finance_book_id = row.idx | ||||
| 		self.opening_accumulated_depreciation = asset_doc.opening_accumulated_depreciation | ||||
| 		self.number_of_depreciations_booked = asset_doc.number_of_depreciations_booked | ||||
| 		self.opening_accumulated_depreciation = asset_doc.opening_accumulated_depreciation or 0 | ||||
| 		self.number_of_depreciations_booked = asset_doc.number_of_depreciations_booked or 0 | ||||
| 		self.gross_purchase_amount = asset_doc.gross_purchase_amount | ||||
| 		self.depreciation_method = row.depreciation_method | ||||
| 		self.total_number_of_depreciations = row.total_number_of_depreciations | ||||
| @@ -185,14 +185,14 @@ class AssetDepreciationSchedule(Document): | ||||
| 	): | ||||
| 		asset_doc.validate_asset_finance_books(row) | ||||
|  | ||||
| 		value_after_depreciation = _get_value_after_depreciation_for_making_schedule(asset_doc, row) | ||||
| 		value_after_depreciation = self._get_value_after_depreciation_for_making_schedule(asset_doc, row) | ||||
| 		row.value_after_depreciation = value_after_depreciation | ||||
|  | ||||
| 		if update_asset_finance_book_row: | ||||
| 			row.db_update() | ||||
|  | ||||
| 		number_of_pending_depreciations = cint(row.total_number_of_depreciations) - cint( | ||||
| 			asset_doc.number_of_depreciations_booked | ||||
| 			self.number_of_depreciations_booked | ||||
| 		) | ||||
|  | ||||
| 		has_pro_rata = asset_doc.check_is_pro_rata(row) | ||||
| @@ -235,13 +235,12 @@ class AssetDepreciationSchedule(Document): | ||||
| 					self.add_depr_schedule_row( | ||||
| 						date_of_disposal, | ||||
| 						depreciation_amount, | ||||
| 						row.depreciation_method, | ||||
| 					) | ||||
|  | ||||
| 				break | ||||
|  | ||||
| 			# For first row | ||||
| 			if has_pro_rata and not asset_doc.opening_accumulated_depreciation and n == 0: | ||||
| 			if has_pro_rata and not self.opening_accumulated_depreciation and n == 0: | ||||
| 				from_date = add_days( | ||||
| 					asset_doc.available_for_use_date, -1 | ||||
| 				)  # needed to calc depr amount for available_for_use_date too | ||||
| @@ -260,7 +259,7 @@ class AssetDepreciationSchedule(Document): | ||||
| 					# In case of increase_in_asset_life, the asset.to_date is already set on asset_repair submission | ||||
| 					asset_doc.to_date = add_months( | ||||
| 						asset_doc.available_for_use_date, | ||||
| 						(n + asset_doc.number_of_depreciations_booked) * cint(row.frequency_of_depreciation), | ||||
| 						(n + self.number_of_depreciations_booked) * cint(row.frequency_of_depreciation), | ||||
| 					) | ||||
|  | ||||
| 				depreciation_amount_without_pro_rata = depreciation_amount | ||||
| @@ -298,7 +297,6 @@ class AssetDepreciationSchedule(Document): | ||||
| 				self.add_depr_schedule_row( | ||||
| 					schedule_date, | ||||
| 					depreciation_amount, | ||||
| 					row.depreciation_method, | ||||
| 				) | ||||
|  | ||||
| 	# to ensure that final accumulated depreciation amount is accurate | ||||
| @@ -325,14 +323,12 @@ class AssetDepreciationSchedule(Document): | ||||
| 		self, | ||||
| 		schedule_date, | ||||
| 		depreciation_amount, | ||||
| 		depreciation_method, | ||||
| 	): | ||||
| 		self.append( | ||||
| 			"depreciation_schedule", | ||||
| 			{ | ||||
| 				"schedule_date": schedule_date, | ||||
| 				"depreciation_amount": depreciation_amount, | ||||
| 				"depreciation_method": depreciation_method, | ||||
| 			}, | ||||
| 		) | ||||
|  | ||||
| @@ -346,7 +342,7 @@ class AssetDepreciationSchedule(Document): | ||||
| 		straight_line_idx = [ | ||||
| 			d.idx | ||||
| 			for d in self.get("depreciation_schedule") | ||||
| 			if d.depreciation_method == "Straight Line" or d.depreciation_method == "Manual" | ||||
| 			if self.depreciation_method == "Straight Line" or self.depreciation_method == "Manual" | ||||
| 		] | ||||
|  | ||||
| 		accumulated_depreciation = flt(self.opening_accumulated_depreciation) | ||||
| @@ -377,16 +373,15 @@ class AssetDepreciationSchedule(Document): | ||||
| 				accumulated_depreciation, d.precision("accumulated_depreciation_amount") | ||||
| 			) | ||||
|  | ||||
| 	def _get_value_after_depreciation_for_making_schedule(self, asset_doc, fb_row): | ||||
| 		if asset_doc.docstatus == 1 and fb_row.value_after_depreciation: | ||||
| 			value_after_depreciation = flt(fb_row.value_after_depreciation) | ||||
| 		else: | ||||
| 			value_after_depreciation = flt(self.gross_purchase_amount) - flt( | ||||
| 				self.opening_accumulated_depreciation | ||||
| 			) | ||||
|  | ||||
| def _get_value_after_depreciation_for_making_schedule(asset_doc, fb_row): | ||||
| 	if asset_doc.docstatus == 1 and fb_row.value_after_depreciation: | ||||
| 		value_after_depreciation = flt(fb_row.value_after_depreciation) | ||||
| 	else: | ||||
| 		value_after_depreciation = flt(asset_doc.gross_purchase_amount) - flt( | ||||
| 			asset_doc.opening_accumulated_depreciation | ||||
| 		) | ||||
|  | ||||
| 	return value_after_depreciation | ||||
| 		return value_after_depreciation | ||||
|  | ||||
|  | ||||
| def make_draft_asset_depr_schedules_if_not_present(asset_doc): | ||||
|   | ||||
| @@ -12,8 +12,7 @@ | ||||
|   "column_break_3", | ||||
|   "accumulated_depreciation_amount", | ||||
|   "journal_entry", | ||||
|   "make_depreciation_entry", | ||||
|   "depreciation_method" | ||||
|   "make_depreciation_entry" | ||||
|  ], | ||||
|  "fields": [ | ||||
|   { | ||||
| @@ -58,20 +57,11 @@ | ||||
|    "fieldname": "make_depreciation_entry", | ||||
|    "fieldtype": "Button", | ||||
|    "label": "Make Depreciation Entry" | ||||
|   }, | ||||
|   { | ||||
|    "fieldname": "depreciation_method", | ||||
|    "fieldtype": "Select", | ||||
|    "hidden": 1, | ||||
|    "label": "Depreciation Method", | ||||
|    "options": "\nStraight Line\nDouble Declining Balance\nWritten Down Value\nManual", | ||||
|    "print_hide": 1, | ||||
|    "read_only": 1 | ||||
|   } | ||||
|  ], | ||||
|  "istable": 1, | ||||
|  "links": [], | ||||
|  "modified": "2022-12-06 20:35:50.264281", | ||||
|  "modified": "2023-03-13 23:17:15.849950", | ||||
|  "modified_by": "Administrator", | ||||
|  "module": "Assets", | ||||
|  "name": "Depreciation Schedule", | ||||
|   | ||||
| @@ -226,11 +226,11 @@ class TestWebsiteItem(unittest.TestCase): | ||||
| 		self.assertTrue(bool(data.product_info["price"])) | ||||
|  | ||||
| 		price_object = data.product_info["price"] | ||||
| 		self.assertEqual(price_object.get("discount_percent"), 25) | ||||
| 		self.assertEqual(price_object.get("discount_percent"), 25.0) | ||||
| 		self.assertEqual(price_object.get("price_list_rate"), 750) | ||||
| 		self.assertEqual(price_object.get("formatted_mrp"), "₹ 1,000.00") | ||||
| 		self.assertEqual(price_object.get("formatted_price"), "₹ 750.00") | ||||
| 		self.assertEqual(price_object.get("formatted_discount_percent"), "25%") | ||||
| 		self.assertEqual(price_object.get("formatted_discount_percent"), "25.0%") | ||||
|  | ||||
| 		# switch to admin and disable show price | ||||
| 		frappe.set_user("Administrator") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Anand Baburajan
					Anand Baburajan