* add new fields: check: use naming series data: series prefix * refactor autoname: use new function - get_name_from_hash * add new function - get_name_from_naming_series * refactor autoname to generate name from naming series * PEP 8 compliance
This commit is contained in:
		
							parent
							
								
									df023bff7f
								
							
						
					
					
						commit
						e1e38a4bb9
					
				| @ -5,23 +5,43 @@ from __future__ import unicode_literals | ||||
| import frappe | ||||
| from frappe import _ | ||||
| from frappe.model.document import Document | ||||
| from frappe.model.naming import make_autoname | ||||
| from frappe.utils import flt, cint | ||||
| 
 | ||||
| 
 | ||||
| class UnableToSelectBatchError(frappe.ValidationError): pass | ||||
| 
 | ||||
| 
 | ||||
| def get_name_from_naming_series(): | ||||
| 	naming_series_prefix = frappe.db.get_single_value('Stock Settings', 'naming_series_prefix') | ||||
| 	if not naming_series_prefix: | ||||
| 		naming_series_prefix = 'BATCH-' | ||||
| 
 | ||||
| 	name = make_autoname(naming_series_prefix + '.#####') | ||||
| 
 | ||||
| 	return name | ||||
| 
 | ||||
| 
 | ||||
| def get_name_from_hash(): | ||||
| 	temp = None | ||||
| 	while not temp: | ||||
| 		temp = frappe.generate_hash()[:7].upper() | ||||
| 		if frappe.db.exists('Batch', temp): | ||||
| 			temp = None | ||||
| 
 | ||||
| 	return temp | ||||
| 
 | ||||
| 
 | ||||
| class Batch(Document): | ||||
| 	def autoname(self): | ||||
| 		'''Generate random ID for batch if not specified''' | ||||
| 		"""Generate random ID for batch if not specified""" | ||||
| 		if not self.batch_id: | ||||
| 			if frappe.db.get_value('Item', self.item, 'create_new_batch'): | ||||
| 				temp = None | ||||
| 				while not temp: | ||||
| 					temp = frappe.generate_hash()[:7].upper() | ||||
| 					if frappe.db.exists('Batch', temp): | ||||
| 						temp = None | ||||
| 
 | ||||
| 				self.batch_id = temp | ||||
| 				use_naming_series = frappe.db.get_single_value('Stock Settings', 'use_naming_series') | ||||
| 				if use_naming_series: | ||||
| 					self.batch_id = get_name_from_naming_series() | ||||
| 				else: | ||||
| 					self.batch_id = get_name_from_hash() | ||||
| 			else: | ||||
| 				frappe.throw(_('Batch ID is mandatory'), frappe.MandatoryError) | ||||
| 
 | ||||
| @ -39,14 +59,14 @@ class Batch(Document): | ||||
| 
 | ||||
| @frappe.whitelist() | ||||
| def get_batch_qty(batch_no=None, warehouse=None, item_code=None): | ||||
| 	'''Returns batch actual qty if warehouse is passed, | ||||
| 	"""Returns batch actual qty if warehouse is passed, | ||||
| 		or returns dict of qty by warehouse if warehouse is None | ||||
| 
 | ||||
| 	The user must pass either batch_no or batch_no + warehouse or item_code + warehouse | ||||
| 
 | ||||
| 	:param batch_no: Optional - give qty for this batch no | ||||
| 	:param warehouse: Optional - give qty for this warehouse | ||||
| 	:param item_code: Optional - give qty for this item''' | ||||
| 	:param item_code: Optional - give qty for this item""" | ||||
| 	frappe.has_permission('Batch', throw=True) | ||||
| 	out = 0 | ||||
| 	if batch_no and warehouse: | ||||
| @ -71,7 +91,7 @@ def get_batch_qty(batch_no=None, warehouse=None, item_code=None): | ||||
| 
 | ||||
| @frappe.whitelist() | ||||
| def get_batches_by_oldest(item_code, warehouse): | ||||
| 	'''Returns the oldest batch and qty for the given item_code and warehouse''' | ||||
| 	"""Returns the oldest batch and qty for the given item_code and warehouse""" | ||||
| 	batches = get_batch_qty(item_code = item_code, warehouse = warehouse) | ||||
| 	batches_dates = [[batch, frappe.get_value('Batch', batch.batch_no, 'expiry_date')] for batch in batches] | ||||
| 	batches_dates.sort(key=lambda tup: tup[1]) | ||||
| @ -79,7 +99,7 @@ def get_batches_by_oldest(item_code, warehouse): | ||||
| 
 | ||||
| @frappe.whitelist() | ||||
| def split_batch(batch_no, item_code, warehouse, qty, new_batch_id = None): | ||||
| 	'''Split the batch into a new batch''' | ||||
| 	"""Split the batch into a new batch""" | ||||
| 	batch = frappe.get_doc(dict(doctype='Batch', item=item_code, batch_id=new_batch_id)).insert() | ||||
| 	stock_entry = frappe.get_doc(dict( | ||||
| 		doctype='Stock Entry', | ||||
| @ -105,7 +125,7 @@ def split_batch(batch_no, item_code, warehouse, qty, new_batch_id = None): | ||||
| 	return batch.name | ||||
| 
 | ||||
| def set_batch_nos(doc, warehouse_field, throw = False): | ||||
| 	'''Automatically select `batch_no` for outgoing items in item table''' | ||||
| 	"""Automatically select `batch_no` for outgoing items in item table""" | ||||
| 	for d in doc.items: | ||||
| 		qty = d.get('stock_qty') or d.get('transfer_qty') or d.get('qty') or 0 | ||||
| 		has_batch_no = frappe.db.get_value('Item', d.item_code, 'has_batch_no') | ||||
|  | ||||
| @ -3,6 +3,7 @@ | ||||
|  "allow_guest_to_view": 0,  | ||||
|  "allow_import": 0,  | ||||
|  "allow_rename": 0,  | ||||
|  "autoname": "",  | ||||
|  "beta": 0,  | ||||
|  "creation": "2013-06-24 16:37:54",  | ||||
|  "custom": 0,  | ||||
| @ -666,6 +667,99 @@ | ||||
|    "search_index": 0,  | ||||
|    "set_only_once": 0,  | ||||
|    "unique": 0 | ||||
|   },  | ||||
|   { | ||||
|    "allow_bulk_edit": 0,  | ||||
|    "allow_on_submit": 0,  | ||||
|    "bold": 0,  | ||||
|    "collapsible": 0,  | ||||
|    "columns": 0,  | ||||
|    "fieldname": "batch_id_sb",  | ||||
|    "fieldtype": "Section Break",  | ||||
|    "hidden": 0,  | ||||
|    "ignore_user_permissions": 0,  | ||||
|    "ignore_xss_filter": 0,  | ||||
|    "in_filter": 0,  | ||||
|    "in_global_search": 0,  | ||||
|    "in_list_view": 0,  | ||||
|    "in_standard_filter": 0,  | ||||
|    "label": "Batch Identification",  | ||||
|    "length": 0,  | ||||
|    "no_copy": 0,  | ||||
|    "permlevel": 0,  | ||||
|    "precision": "",  | ||||
|    "print_hide": 0,  | ||||
|    "print_hide_if_no_value": 0,  | ||||
|    "read_only": 0,  | ||||
|    "remember_last_selected_value": 0,  | ||||
|    "report_hide": 0,  | ||||
|    "reqd": 0,  | ||||
|    "search_index": 0,  | ||||
|    "set_only_once": 0,  | ||||
|    "unique": 0 | ||||
|   },  | ||||
|   { | ||||
|    "allow_bulk_edit": 0,  | ||||
|    "allow_on_submit": 0,  | ||||
|    "bold": 0,  | ||||
|    "collapsible": 0,  | ||||
|    "columns": 0,  | ||||
|    "default": "0",  | ||||
|    "fieldname": "use_naming_series",  | ||||
|    "fieldtype": "Check",  | ||||
|    "hidden": 0,  | ||||
|    "ignore_user_permissions": 0,  | ||||
|    "ignore_xss_filter": 0,  | ||||
|    "in_filter": 0,  | ||||
|    "in_global_search": 0,  | ||||
|    "in_list_view": 0,  | ||||
|    "in_standard_filter": 0,  | ||||
|    "label": "Use Naming Series",  | ||||
|    "length": 0,  | ||||
|    "no_copy": 0,  | ||||
|    "permlevel": 0,  | ||||
|    "precision": "",  | ||||
|    "print_hide": 0,  | ||||
|    "print_hide_if_no_value": 0,  | ||||
|    "read_only": 0,  | ||||
|    "remember_last_selected_value": 0,  | ||||
|    "report_hide": 0,  | ||||
|    "reqd": 0,  | ||||
|    "search_index": 0,  | ||||
|    "set_only_once": 0,  | ||||
|    "unique": 0 | ||||
|   },  | ||||
|   { | ||||
|    "allow_bulk_edit": 0,  | ||||
|    "allow_on_submit": 0,  | ||||
|    "bold": 0,  | ||||
|    "collapsible": 0,  | ||||
|    "columns": 0,  | ||||
|    "default": "BATCH-",  | ||||
|    "depends_on": "eval:doc.use_naming_series==1",  | ||||
|    "fieldname": "naming_series_prefix",  | ||||
|    "fieldtype": "Data",  | ||||
|    "hidden": 0,  | ||||
|    "ignore_user_permissions": 0,  | ||||
|    "ignore_xss_filter": 0,  | ||||
|    "in_filter": 0,  | ||||
|    "in_global_search": 0,  | ||||
|    "in_list_view": 0,  | ||||
|    "in_standard_filter": 0,  | ||||
|    "label": "Naming Series Prefix",  | ||||
|    "length": 0,  | ||||
|    "no_copy": 0,  | ||||
|    "permlevel": 0,  | ||||
|    "precision": "",  | ||||
|    "print_hide": 0,  | ||||
|    "print_hide_if_no_value": 0,  | ||||
|    "read_only": 0,  | ||||
|    "remember_last_selected_value": 0,  | ||||
|    "report_hide": 0,  | ||||
|    "reqd": 0,  | ||||
|    "search_index": 0,  | ||||
|    "set_only_once": 0,  | ||||
|    "unique": 0 | ||||
|   } | ||||
|  ],  | ||||
|  "has_web_view": 0,  | ||||
| @ -679,7 +773,7 @@ | ||||
|  "issingle": 1,  | ||||
|  "istable": 0,  | ||||
|  "max_attachments": 0,  | ||||
|  "modified": "2017-11-17 01:35:49.562613",  | ||||
|  "modified": "2018-01-12 09:38:58.200950",  | ||||
|  "modified_by": "Administrator",  | ||||
|  "module": "Stock",  | ||||
|  "name": "Stock Settings",  | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user