deprecate sales and purchase return tool
This commit is contained in:
		
							parent
							
								
									080f9098c0
								
							
						
					
					
						commit
						5afe037a5b
					
				| @ -32,209 +32,3 @@ def get_default_bank_account(): | |||||||
| 		WHERE name=%s AND docstatus<2""", company) | 		WHERE name=%s AND docstatus<2""", company) | ||||||
| 	 | 	 | ||||||
| 	if res: return res[0][0] | 	if res: return res[0][0] | ||||||
| 
 |  | ||||||
| @webnotes.whitelist() |  | ||||||
| def get_new_jv_details(): |  | ||||||
| 	""" |  | ||||||
| 		Get details which will help create new jv on sales/purchase return |  | ||||||
| 	""" |  | ||||||
| 	doclist = webnotes.form_dict.get('doclist') |  | ||||||
| 	fiscal_year = webnotes.form_dict.get('fiscal_year') |  | ||||||
| 	if not (isinstance(doclist, basestring) and isinstance(fiscal_year, basestring)): return |  | ||||||
| 
 |  | ||||||
| 	import json |  | ||||||
| 	doclist = json.loads(doclist) |  | ||||||
| 	doc, children = doclist[0], doclist[1:] |  | ||||||
| 
 |  | ||||||
| 	if doc.get('return_type')=='Sales Return': |  | ||||||
| 		if doc.get('sales_invoice_no'): |  | ||||||
| 			return get_invoice_details(doc, children, fiscal_year) |  | ||||||
| 		elif doc.get('delivery_note_no'): |  | ||||||
| 			return get_delivery_note_details(doc, children, fiscal_year) |  | ||||||
| 
 |  | ||||||
| 	elif doc.get('purchase_receipt_no'): |  | ||||||
| 		return get_purchase_receipt_details(doc, children, fiscal_year) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def get_invoice_details(doc, children, fiscal_year): |  | ||||||
| 	""" |  | ||||||
| 		Gets details from an invoice to make new jv |  | ||||||
| 		Returns [{ |  | ||||||
| 			'account': , |  | ||||||
| 			'balance': , |  | ||||||
| 			'debit': , |  | ||||||
| 			'credit': , |  | ||||||
| 			'against_invoice': , |  | ||||||
| 			'against_payable':  |  | ||||||
| 		}, { ... }, ...] |  | ||||||
| 	""" |  | ||||||
| 	if doc.get('return_type')=='Sales Return': |  | ||||||
| 		obj = get_obj('Sales Invoice', doc.get('sales_invoice_no'), with_children=1) |  | ||||||
| 	else: |  | ||||||
| 		obj = get_obj('Purchase Invoice', doc.get('purchase_invoice_no'), with_children=1) |  | ||||||
| 	if not obj.doc.docstatus==1: return |  | ||||||
| 
 |  | ||||||
| 	# Build invoice account jv detail record |  | ||||||
| 	invoice_rec = get_invoice_account_jv_record(doc, children, fiscal_year, obj) |  | ||||||
| 
 |  | ||||||
| 	# Build item accountwise jv detail records |  | ||||||
| 	item_accountwise_list = get_item_accountwise_jv_record(doc, children, fiscal_year, obj) |  | ||||||
| 
 |  | ||||||
| 	return [invoice_rec] + item_accountwise_list |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def get_invoice_account_jv_record(doc, children, fiscal_year, obj): |  | ||||||
| 	""" |  | ||||||
| 		Build customer/supplier account jv detail record |  | ||||||
| 	""" |  | ||||||
| 	# Calculate total return amount |  | ||||||
| 	total_amt = sum([(flt(ch.get('rate')) * flt(ch.get('returned_qty'))) for ch in children]) |  | ||||||
| 
 |  | ||||||
| 	ret = {} |  | ||||||
| 
 |  | ||||||
| 	if doc.get('return_type')=='Sales Return': |  | ||||||
| 		account = obj.doc.debit_to |  | ||||||
| 		ret['against_invoice'] = doc.get('sales_invoice_no') |  | ||||||
| 		ret['credit'] = total_amt |  | ||||||
| 	else: |  | ||||||
| 		account = obj.doc.credit_to |  | ||||||
| 		ret['against_voucher'] = doc.get('purchase_invoice_no') |  | ||||||
| 		ret['debit'] = total_amt |  | ||||||
| 	 |  | ||||||
| 	ret.update({ |  | ||||||
| 		'account': account, |  | ||||||
| 		'balance': get_balance_on(account, doc.get("return_date")) |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	return ret |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def get_item_accountwise_jv_record(doc, children, fiscal_year, obj): |  | ||||||
| 	""" |  | ||||||
| 		Build item accountwise jv detail records |  | ||||||
| 	""" |  | ||||||
| 	if doc.get('return_type')=='Sales Return': |  | ||||||
| 		amt_field = 'debit' |  | ||||||
| 		ac_field = 'income_account' |  | ||||||
| 	else: |  | ||||||
| 		amt_field = 'credit' |  | ||||||
| 		ac_field = 'expense_head' |  | ||||||
| 	 |  | ||||||
| 	inv_children = dict([[ic.fields.get('item_code'), ic] for ic in obj.doclist if ic.fields.get('item_code')]) |  | ||||||
| 
 |  | ||||||
| 	accwise_list = [] |  | ||||||
| 	 |  | ||||||
| 	for ch in children: |  | ||||||
| 		inv_ch = inv_children.get(ch.get('item_code')) |  | ||||||
| 		if not inv_ch: continue |  | ||||||
| 
 |  | ||||||
| 		amount = flt(ch.get('rate')) * flt(ch.get('returned_qty')) |  | ||||||
| 
 |  | ||||||
| 		accounts = [[jvd['account'], jvd['cost_center']] for jvd in accwise_list] |  | ||||||
| 		 |  | ||||||
| 		if [inv_ch.fields.get(ac_field), inv_ch.fields.get('cost_center')] not in accounts: |  | ||||||
| 			rec = { |  | ||||||
| 				'account': inv_ch.fields.get(ac_field), |  | ||||||
| 				'cost_center': inv_ch.fields.get('cost_center'), |  | ||||||
| 				'balance': get_balance_on(inv_ch.fields.get(ac_field), |  | ||||||
| 					doc.get("return_date")) |  | ||||||
| 			} |  | ||||||
| 			rec[amt_field] = amount |  | ||||||
| 			accwise_list.append(rec) |  | ||||||
| 		else: |  | ||||||
| 			rec = accwise_list[accounts.index([inv_ch.fields.get(ac_field), inv_ch.fields.get('cost_center')])] |  | ||||||
| 			rec[amt_field] = rec[amt_field] + amount |  | ||||||
| 		 |  | ||||||
| 	return accwise_list |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def get_jv_details_from_inv_list(doc, children, fiscal_year, inv_list, jv_details_list): |  | ||||||
| 	""" |  | ||||||
| 		Get invoice details and make jv detail records |  | ||||||
| 	""" |  | ||||||
| 	for inv in inv_list: |  | ||||||
| 		if not inv[0]: continue |  | ||||||
| 
 |  | ||||||
| 		if doc.get('return_type')=='Sales Return': |  | ||||||
| 			doc['sales_invoice_no'] = inv[0] |  | ||||||
| 		else: |  | ||||||
| 			doc['purchase_invoice_no'] = inv[0] |  | ||||||
| 		 |  | ||||||
| 		jv_details = get_invoice_details(doc, children, fiscal_year) |  | ||||||
| 		 |  | ||||||
| 		if jv_details and len(jv_details)>1: jv_details_list.extend(jv_details) |  | ||||||
| 
 |  | ||||||
| 	return jv_details_list |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def get_prev_doc_list(obj, prev_doctype): |  | ||||||
| 	""" |  | ||||||
| 		Returns a list of previous doc's names |  | ||||||
| 	""" |  | ||||||
| 	prevdoc_list = [] |  | ||||||
| 	for ch in obj.doclist: |  | ||||||
| 		if ch.fields.get('prevdoc_docname') and ch.fields.get('prevdoc_doctype')==prev_doctype: |  | ||||||
| 			prevdoc_list.append(ch.fields.get('prevdoc_docname')) |  | ||||||
| 	return prevdoc_list |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def get_inv_list(table, field, value): |  | ||||||
| 	""" |  | ||||||
| 		Returns invoice list |  | ||||||
| 	""" |  | ||||||
| 	if isinstance(value, basestring): |  | ||||||
| 		return webnotes.conn.sql("""\ |  | ||||||
| 			SELECT DISTINCT parent FROM `%s` |  | ||||||
| 			WHERE %s='%s' AND docstatus=1""" % (table, field, value)) |  | ||||||
| 	elif isinstance(value, list): |  | ||||||
| 		return webnotes.conn.sql("""\ |  | ||||||
| 			SELECT DISTINCT parent FROM `%s` |  | ||||||
| 			WHERE %s IN ("%s") AND docstatus=1""" % (table, field, '", "'.join(value))) |  | ||||||
| 	else: |  | ||||||
| 		return [] |  | ||||||
| 	 |  | ||||||
| 
 |  | ||||||
| def get_delivery_note_details(doc, children, fiscal_year): |  | ||||||
| 	""" |  | ||||||
| 		Gets sales invoice numbers from delivery note details |  | ||||||
| 		and returns detail records for jv |  | ||||||
| 	""" |  | ||||||
| 	jv_details_list = [] |  | ||||||
| 	 |  | ||||||
| 	dn_obj = get_obj('Delivery Note', doc['delivery_note_no'], with_children=1) |  | ||||||
| 	 |  | ||||||
| 	inv_list = get_inv_list('tabSales Invoice Item', 'delivery_note', doc['delivery_note_no']) |  | ||||||
| 
 |  | ||||||
| 	if inv_list: |  | ||||||
| 		jv_details_list = get_jv_details_from_inv_list(doc, children, fiscal_year, inv_list, jv_details_list) |  | ||||||
| 	 |  | ||||||
| 	if not (inv_list and jv_details_list): |  | ||||||
| 		so_list = get_prev_doc_list(dn_obj, 'Sales Order') |  | ||||||
| 		inv_list = get_inv_list('tabSales Invoice Item', 'sales_order', so_list) |  | ||||||
| 		if inv_list: |  | ||||||
| 			jv_details_list = get_jv_details_from_inv_list(doc, children, fiscal_year, inv_list, jv_details_list) |  | ||||||
| 
 |  | ||||||
| 	return jv_details_list |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def get_purchase_receipt_details(doc, children, fiscal_year): |  | ||||||
| 	""" |  | ||||||
| 		Gets purchase invoice numbers from purchase receipt details |  | ||||||
| 		and returns detail records for jv |  | ||||||
| 	""" |  | ||||||
| 	jv_details_list = [] |  | ||||||
| 	 |  | ||||||
| 	pr_obj = get_obj('Purchase Receipt', doc['purchase_receipt_no'], with_children=1) |  | ||||||
| 	 |  | ||||||
| 	inv_list = get_inv_list('tabPurchase Invoice Item', 'purchase_receipt', doc['purchase_receipt_no']) |  | ||||||
| 
 |  | ||||||
| 	if inv_list: |  | ||||||
| 		jv_details_list = get_jv_details_from_inv_list(doc, children, fiscal_year, inv_list, jv_details_list) |  | ||||||
| 	 |  | ||||||
| 	if not (inv_list and jv_details_list): |  | ||||||
| 		po_list = get_prev_doc_list(pr_obj, 'Purchase Order') |  | ||||||
| 		inv_list = get_inv_list('tabPurchase Invoice Item', 'purchase_order', po_list) |  | ||||||
| 		if inv_list: |  | ||||||
| 			jv_details_list = get_jv_details_from_inv_list(doc, children, fiscal_year, inv_list, jv_details_list) |  | ||||||
| 
 |  | ||||||
| 	return jv_details_list |  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user