Merge pull request #29131 from ankush/serial_no_patch
fix(patch): serial no whitespace trimming
This commit is contained in:
		
						commit
						9d36e30ef7
					
				| @ -279,6 +279,7 @@ erpnext.patches.v13_0.add_custom_field_for_south_africa #2 | ||||
| erpnext.patches.v13_0.update_recipient_email_digest | ||||
| erpnext.patches.v13_0.shopify_deprecation_warning | ||||
| erpnext.patches.v13_0.remove_bad_selling_defaults | ||||
| erpnext.patches.v13_0.trim_whitespace_from_serial_nos | ||||
| erpnext.patches.v13_0.migrate_stripe_api | ||||
| erpnext.patches.v13_0.reset_clearance_date_for_intracompany_payment_entries | ||||
| erpnext.patches.v13_0.einvoicing_deprecation_warning | ||||
|  | ||||
							
								
								
									
										65
									
								
								erpnext/patches/v13_0/trim_whitespace_from_serial_nos.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								erpnext/patches/v13_0/trim_whitespace_from_serial_nos.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | ||||
| import frappe | ||||
| 
 | ||||
| from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos | ||||
| 
 | ||||
| 
 | ||||
| def execute(): | ||||
| 	broken_sles = frappe.db.sql(""" | ||||
| 			select name, serial_no | ||||
| 			from `tabStock Ledger Entry` | ||||
| 			where | ||||
| 				is_cancelled = 0 | ||||
| 				and (serial_no like %s or serial_no like %s or serial_no like %s or serial_no like %s) | ||||
| 			""", | ||||
| 			( | ||||
| 				" %",    # leading whitespace | ||||
| 				"% ",    # trailing whitespace | ||||
| 				"%\n %", # leading whitespace on newline | ||||
| 				"% \n%", # trailing whitespace on newline | ||||
| 			), | ||||
| 			as_dict=True, | ||||
| 		) | ||||
| 
 | ||||
| 	frappe.db.MAX_WRITES_PER_TRANSACTION += len(broken_sles) | ||||
| 
 | ||||
| 	if not broken_sles: | ||||
| 		return | ||||
| 
 | ||||
| 	broken_serial_nos = set() | ||||
| 
 | ||||
| 	# patch SLEs | ||||
| 	for sle in broken_sles: | ||||
| 		serial_no_list = get_serial_nos(sle.serial_no) | ||||
| 		correct_sr_no = "\n".join(serial_no_list) | ||||
| 
 | ||||
| 		if correct_sr_no == sle.serial_no: | ||||
| 			continue | ||||
| 
 | ||||
| 		frappe.db.set_value("Stock Ledger Entry", sle.name, "serial_no", correct_sr_no, update_modified=False) | ||||
| 		broken_serial_nos.update(serial_no_list) | ||||
| 
 | ||||
| 	if not broken_serial_nos: | ||||
| 		return | ||||
| 
 | ||||
| 	# Patch serial No documents if they don't have purchase info | ||||
| 	# Purchase info is used for fetching incoming rate | ||||
| 	broken_sr_no_records = frappe.get_list("Serial No", | ||||
| 			filters={ | ||||
| 				"status":"Active", | ||||
| 				"name": ("in", broken_serial_nos), | ||||
| 				"purchase_document_type": ("is", "not set") | ||||
| 			}, | ||||
| 			pluck="name", | ||||
| 		) | ||||
| 
 | ||||
| 	frappe.db.MAX_WRITES_PER_TRANSACTION += len(broken_sr_no_records) | ||||
| 
 | ||||
| 	patch_savepoint = "serial_no_patch" | ||||
| 	for serial_no in broken_sr_no_records: | ||||
| 		try: | ||||
| 			frappe.db.savepoint(patch_savepoint) | ||||
| 			sn = frappe.get_doc("Serial No", serial_no) | ||||
| 			sn.update_serial_no_reference() | ||||
| 			sn.db_update() | ||||
| 		except Exception: | ||||
| 			frappe.db.rollback(save_point=patch_savepoint) | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user