I am using below code to check the serial number in Sales Invoice and updating value as ’ 1’ if the serial number exsisted in sales invoice .In my case it fetches the value perfectly but checking and updating is performing only once at time .How to get previous value (status) along with current value.
from future import unicode_literals
import frappe
from frappe.model.document import Document
from frappe.utils import cint,cstr
class SerialVerification(Document):
def validate(self):
value_dict = []
value = frappe.db.sql("""SELECT serial_no from `tabSales Invoice Item` where parent = %s and docstatus = 1""",(self.name1))
y= []
for i in value:
for j in i:
data = j
if '\n' in data:
val = data .replace('\n',',')
val = cstr(val)
val = val.split(',')
for val1 in val:
y = val1
value_dict.append(y)
else:
value_dict.append(j)
self.set('item', {})
last_idx = max([cint(d.idx) for d in self.get("item")] or [0,])
for i, d in enumerate(value_dict):
ch = self.append('item', {})
ch.data = d
ch.rows = 0
if ch.data:
if(self.invoice == ch.data):
ch.status = 1
frappe.db.sql(""" update `tabSerial Item` t1, `tabSerial Verification`t2 set t1.status = %s where t1.parent = t2.name and t1.parent = %s""",(ch.status,self.name))
else:
ch.status = 0
ch.idx = last_idx + i + 1