chore: refactor some functions to use new depr schedule
This commit is contained in:
		
							parent
							
								
									ffd41703de
								
							
						
					
					
						commit
						417180e6ba
					
				| @ -30,6 +30,7 @@ from erpnext.assets.doctype.asset.depreciation import ( | |||||||
| ) | ) | ||||||
| from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( | from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( | ||||||
| 	make_draft_asset_depreciation_schedules, | 	make_draft_asset_depreciation_schedules, | ||||||
|  | 	get_asset_depreciation_schedule_name, | ||||||
| 	convert_draft_asset_depreciation_schedules_into_active, | 	convert_draft_asset_depreciation_schedules_into_active, | ||||||
| 	update_draft_asset_depreciation_schedules, | 	update_draft_asset_depreciation_schedules, | ||||||
| ) | ) | ||||||
| @ -48,7 +49,6 @@ class Asset(AccountsController): | |||||||
| 			self.prepare_depreciation_data() | 			self.prepare_depreciation_data() | ||||||
| 			update_draft_asset_depreciation_schedules(self) | 			update_draft_asset_depreciation_schedules(self) | ||||||
| 		self.validate_gross_and_purchase_amount() | 		self.validate_gross_and_purchase_amount() | ||||||
| 		if self.get("schedules"): |  | ||||||
| 		self.validate_expected_value_after_useful_life() | 		self.validate_expected_value_after_useful_life() | ||||||
| 
 | 
 | ||||||
| 		self.status = self.get_status() | 		self.status = self.get_status() | ||||||
| @ -244,57 +244,17 @@ class Asset(AccountsController): | |||||||
| 
 | 
 | ||||||
| 		return value_after_depreciation | 		return value_after_depreciation | ||||||
| 
 | 
 | ||||||
| 	# depreciation schedules need to be cleared before modification due to increase in asset life/asset sales |  | ||||||
| 	# JE: Journal Entry, FB: Finance Book |  | ||||||
| 	def clear_depreciation_schedule(self): |  | ||||||
| 		start = [] |  | ||||||
| 		num_of_depreciations_completed = 0 |  | ||||||
| 		depr_schedule = [] |  | ||||||
| 
 |  | ||||||
| 		for schedule in self.get("schedules"): |  | ||||||
| 			# to update start when there are JEs linked with all the schedule rows corresponding to an FB |  | ||||||
| 			if len(start) == (int(schedule.finance_book_id) - 2): |  | ||||||
| 				start.append(num_of_depreciations_completed) |  | ||||||
| 				num_of_depreciations_completed = 0 |  | ||||||
| 
 |  | ||||||
| 			# to ensure that start will only be updated once for each FB |  | ||||||
| 			if len(start) == (int(schedule.finance_book_id) - 1): |  | ||||||
| 				if schedule.journal_entry: |  | ||||||
| 					num_of_depreciations_completed += 1 |  | ||||||
| 					depr_schedule.append(schedule) |  | ||||||
| 				else: |  | ||||||
| 					start.append(num_of_depreciations_completed) |  | ||||||
| 					num_of_depreciations_completed = 0 |  | ||||||
| 
 |  | ||||||
| 		# to update start when all the schedule rows corresponding to the last FB are linked with JEs |  | ||||||
| 		if len(start) == (len(self.finance_books) - 1): |  | ||||||
| 			start.append(num_of_depreciations_completed) |  | ||||||
| 
 |  | ||||||
| 		# when the Depreciation Schedule is being created for the first time |  | ||||||
| 		if start == []: |  | ||||||
| 			start = [0] * len(self.finance_books) |  | ||||||
| 		else: |  | ||||||
| 			self.schedules = depr_schedule |  | ||||||
| 
 |  | ||||||
| 		return start |  | ||||||
| 
 |  | ||||||
| 	def get_from_date(self, finance_book): | 	def get_from_date(self, finance_book): | ||||||
| 		if not self.get("schedules"): | 		asset_depr_schedule_name = get_asset_depreciation_schedule_name( | ||||||
|  | 			self.name, finance_book | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
|  | 		if not asset_depr_schedule_name: | ||||||
| 			return self.available_for_use_date | 			return self.available_for_use_date | ||||||
| 
 | 
 | ||||||
| 		if len(self.finance_books) == 1: | 		asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) | ||||||
| 			return self.schedules[-1].schedule_date |  | ||||||
| 
 | 
 | ||||||
| 		from_date = "" | 		return asset_depr_schedule.get("depreciation_schedule")[-1].schedule_date | ||||||
| 		for schedule in self.get("schedules"): |  | ||||||
| 			if schedule.finance_book == finance_book: |  | ||||||
| 				from_date = schedule.schedule_date |  | ||||||
| 
 |  | ||||||
| 		if from_date: |  | ||||||
| 			return from_date |  | ||||||
| 
 |  | ||||||
| 		# since depr for available_for_use_date is not yet booked |  | ||||||
| 		return add_days(self.available_for_use_date, -1) |  | ||||||
| 
 | 
 | ||||||
| 	# if it returns True, depreciation_amount will not be equal for the first and last rows | 	# if it returns True, depreciation_amount will not be equal for the first and last rows | ||||||
| 	def check_is_pro_rata(self, row): | 	def check_is_pro_rata(self, row): | ||||||
| @ -398,26 +358,29 @@ class Asset(AccountsController): | |||||||
| 		return depreciation_amount_for_last_row | 		return depreciation_amount_for_last_row | ||||||
| 
 | 
 | ||||||
| 	def get_depreciation_amount_for_first_row(self, finance_book): | 	def get_depreciation_amount_for_first_row(self, finance_book): | ||||||
| 		if self.has_only_one_finance_book(): | 		asset_depr_schedule_name = get_asset_depreciation_schedule_name(self.name, finance_book) | ||||||
| 			return self.schedules[0].depreciation_amount |  | ||||||
| 		else: |  | ||||||
| 			for schedule in self.schedules: |  | ||||||
| 				if schedule.finance_book == finance_book: |  | ||||||
| 					return schedule.depreciation_amount |  | ||||||
| 
 | 
 | ||||||
| 	def has_only_one_finance_book(self): | 		asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) | ||||||
| 		if len(self.finance_books) == 1: | 
 | ||||||
| 			return True | 		return asset_depr_schedule.get("depreciation_schedule")[0].depreciation_amount | ||||||
| 
 | 
 | ||||||
| 	def get_value_after_depreciation(self, idx): | 	def get_value_after_depreciation(self, idx): | ||||||
| 		return flt(self.get("finance_books")[cint(idx) - 1].value_after_depreciation) | 		return flt(self.get("finance_books")[cint(idx) - 1].value_after_depreciation) | ||||||
| 
 | 
 | ||||||
| 	def validate_expected_value_after_useful_life(self): | 	def validate_expected_value_after_useful_life(self): | ||||||
| 		for row in self.get("finance_books"): | 		for row in self.get("finance_books"): | ||||||
|  | 			asset_depr_schedule_name = get_asset_depreciation_schedule_name( | ||||||
|  | 				self.name, row.finance_book | ||||||
|  | 			) | ||||||
|  | 
 | ||||||
|  | 			if not asset_depr_schedule_name: | ||||||
|  | 				return | ||||||
|  | 
 | ||||||
|  | 			asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) | ||||||
|  | 
 | ||||||
| 			accumulated_depreciation_after_full_schedule = [ | 			accumulated_depreciation_after_full_schedule = [ | ||||||
| 				d.accumulated_depreciation_amount | 				d.accumulated_depreciation_amount | ||||||
| 				for d in self.get("schedules") | 				for d in asset_depr_schedule.get("depreciation_schedule") | ||||||
| 				if cint(d.finance_book_id) == row.idx |  | ||||||
| 			] | 			] | ||||||
| 
 | 
 | ||||||
| 			if accumulated_depreciation_after_full_schedule: | 			if accumulated_depreciation_after_full_schedule: | ||||||
| @ -466,7 +429,17 @@ class Asset(AccountsController): | |||||||
| 			movement.cancel() | 			movement.cancel() | ||||||
| 
 | 
 | ||||||
| 	def delete_depreciation_entries(self): | 	def delete_depreciation_entries(self): | ||||||
| 		for d in self.get("schedules"): | 		for row in self.get("finance_books"): | ||||||
|  | 			asset_depr_schedule_name = get_asset_depreciation_schedule_name( | ||||||
|  | 				self.name, row.finance_book | ||||||
|  | 			) | ||||||
|  | 
 | ||||||
|  | 			if not asset_depr_schedule_name: | ||||||
|  | 				return | ||||||
|  | 
 | ||||||
|  | 			asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) | ||||||
|  | 
 | ||||||
|  | 			for d in asset_depr_schedule.get("depreciation_schedule"): | ||||||
| 				if d.journal_entry: | 				if d.journal_entry: | ||||||
| 					frappe.get_doc("Journal Entry", d.journal_entry).cancel() | 					frappe.get_doc("Journal Entry", d.journal_entry).cancel() | ||||||
| 					d.db_set("journal_entry", None) | 					d.db_set("journal_entry", None) | ||||||
|  | |||||||
| @ -29,7 +29,7 @@ def make_draft_asset_depreciation_schedules(asset): | |||||||
| 
 | 
 | ||||||
| def update_draft_asset_depreciation_schedules(asset): | def update_draft_asset_depreciation_schedules(asset): | ||||||
| 	for row in asset.get("finance_books"): | 	for row in asset.get("finance_books"): | ||||||
| 		asset_depr_schedule_name = get_draft_asset_depreciation_schedule_name( | 		asset_depr_schedule_name = get_asset_depreciation_schedule_name( | ||||||
| 			asset.name, row.finance_book | 			asset.name, row.finance_book | ||||||
| 		) | 		) | ||||||
| 
 | 
 | ||||||
| @ -62,7 +62,7 @@ def set_draft_asset_depreciation_schedule_details(asset_depr_schedule, asset_nam | |||||||
| 
 | 
 | ||||||
| def convert_draft_asset_depreciation_schedules_into_active(asset): | def convert_draft_asset_depreciation_schedules_into_active(asset): | ||||||
| 	for row in asset.get("finance_books"): | 	for row in asset.get("finance_books"): | ||||||
| 		asset_depr_schedule_name = get_draft_asset_depreciation_schedule_name( | 		asset_depr_schedule_name = get_asset_depreciation_schedule_name( | ||||||
| 			asset.name, row.finance_book | 			asset.name, row.finance_book | ||||||
| 		) | 		) | ||||||
| 
 | 
 | ||||||
| @ -80,7 +80,7 @@ def make_new_active_asset_depreciation_schedules_from_existing( | |||||||
| 	asset, date_of_disposal=None, date_of_return=None | 	asset, date_of_disposal=None, date_of_return=None | ||||||
| ): | ): | ||||||
| 	for row in asset.get("finance_books"): | 	for row in asset.get("finance_books"): | ||||||
| 		old_asset_depr_schedule_name = get_active_asset_depreciation_schedule( | 		old_asset_depr_schedule_name = get_asset_depreciation_schedule_name( | ||||||
| 			asset.name, row.finance_book | 			asset.name, row.finance_book | ||||||
| 		) | 		) | ||||||
| 
 | 
 | ||||||
| @ -112,17 +112,14 @@ def make_depreciation_schedule(asset_depr_schedule, asset, row, date_of_disposal | |||||||
| 	_make_depreciation_schedule(asset_depr_schedule, asset, row, start, date_of_disposal) | 	_make_depreciation_schedule(asset_depr_schedule, asset, row, start, date_of_disposal) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_draft_asset_depreciation_schedule_name(asset_name, finance_book): | def get_asset_depreciation_schedule_name(asset_name, finance_book): | ||||||
| 	return frappe.db.get_value( | 	return frappe.db.get_value( | ||||||
| 		"Asset Depreciation Schedule", | 		doctype="Asset Depreciation Schedule", | ||||||
| 		{"asset": asset_name, "finance_book": finance_book, "status": "Draft", "docstatus": 0}, | 		filters=[ | ||||||
| 	) | 			["asset", "=", asset_name], | ||||||
| 
 | 			["finance_book", "=", finance_book], | ||||||
| 
 | 			["docstatus", "<", 2], | ||||||
| def get_active_asset_depreciation_schedule(asset_name, finance_book): | 		] | ||||||
| 	return frappe.db.get_value( |  | ||||||
| 		"Asset Depreciation Schedule", |  | ||||||
| 		{"asset": asset_name, "finance_book": finance_book, "status": "Active", "docstatus": 1}, |  | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user