def create_invoice(auth_key,invoice_type,customer,serial_number,dattime,_type='POST'): login =[] loginObj = {} if len(auth_key[1:-1])<=0 or len(dattime[1:-1])<=0 or len(customer[1:-1])<=0 or len(serial_number[1:-1])<=0 : loginObj['status']='401' loginObj['error']='Incomplete data to generate Sales Invoice , Please provide token no , Datetime,customer and serial no' return loginObj qr="select name from `tabauth keys` where auth_key="+auth_key res=webnotes.conn.sql(qr) rgn=webnotes.conn.sql("select region from `tabFranchise` where contact_email='"+res[0][0]+"'") zz=serial_number[1:-1].count(' ') xx=serial_number[1:-1].replace('[','').split(' ') #xxx=xx.replace(' ','\n') yy="select item_code,item_name,description from `tabSerial No` where name='"+cstr(xx[0])+"'" zzz=webnotes.conn.sql(yy) if not zzz: loginObj['status']='402' loginObj['error']='Invalid serails no, please try againg' return loginObj pp="select ref_rate from `tabItem Price` where price_list='Standard Selling' and item_code='"+zzz[0][0]+"'" ppp=webnotes.conn.sql(pp) if res: from webnotes.model.doc import Document d = Document('Sales Invoice') d.customer=customer[1:-1] d.customer_name=customer[1:-1] d.region=rgn[0][0] d.posting_date=dattime[1:-1] d.due_date=dattime[1:-1] d.selling_price_list='Standard Selling' d.currency='INR' d.territory='India' if ppp: d.net_total_export=ppp[0][0]*zz d.grand_total_export=ppp[0][0]*zz d.rounded_total_export=ppp[0][0]*zz d.outstanding_amount=ppp[0][0]*zz d.plc_conversion_rate=1 from webnotes.utils import nowdate from accounts.utils import get_fiscal_year today = nowdate() d.fiscal_year=get_fiscal_year(today)[0] d.debit_to=customer[1:-1]+" - P" d.is_pos=1 d.cash_bank_account='Cash - P' d.save() webnotes.conn.commit() e=Document('Sales Invoice Item') e.item_code=zzz[0][0] e.item_name=zzz[0][1] e.description=zzz[0][2] e.qty=zz e.stock_uom='Nos' if ppp: e.ref_rate=ppp[0][0] e.export_rate=ppp[0][0] e.export_amount='0' e.income_account='Sales - P' e.cost_center='Main - P' e.serial_no_=serial_number[1:-1].replace('[','').replace(']','') e.parent=d.name e.parenttype='Sales Invoice' e.parentfield='entries' e.save() webnotes.conn.commit() key={} key['invoice_id_id']=d.name login.append(key) loginObj['status']='200' loginObj['invoice']=login return loginObj else: loginObj['status']='401' loginObj['error']='invalid token please contact administrator' return loginObj
def create_in(data,_type='POST'): from webnotes.model.doc import Document from webnotes.utils import nowdate,add_months data1=json.loads(data) auth_key=data1['token'] invoice_type=data1['invoice_type'] customer=data1['customer'] dattime=data1['datetime'] item_details=data1['item_details'] login =[] loginObj = {} amt=0 qt=0 srl='' cc='' zz='' #return data if len(auth_key[1:-1]) <=0 or len(dattime[1:-1]) <=0 or len(customer[1:-1])<=0 : loginObj['status']='401' loginObj['error']='Incomplete data to generate Sales Invoice , Please provide token no , Datetime,customer and serial no' return loginObj for ff in item_details: a=ff['barcode'] c="select item_code,warehouse from `tabSerial No` where name='"+a[:-1]+"'" cc=webnotes.conn.sql(c) #webnotes.errprint(c) #webnotes.errprint(cc) amt=cint(amt)+cint(ff['rate']) qt+=1 srl+=a[:-2].replace(',','\n') #return cc if cc : qr="select name from `tabauth keys` where auth_key='"+auth_key+"'" #return qr res=webnotes.conn.sql(qr) if res : rr="select region from `tabFranchise` where contact_email='"+res[0][0]+"'" r1=webnotes.conn.sql(rr) if r1[0][0]==cc[0][1] : #webnotes.errprint("same") pass else: #webnotes.errprint("different warehouse") pass zz+="'"+a[:-1].replace(',','')+"'," else: if invoice_type=='CUSTOMER': l = Document('Customer Details',customer) l.customer_name=customer l.save() webnotes.conn.commit() for ll in item_details: m = Document('Customer Data') m.serial_no=a[:-1] m.parent=l.name m.parenttype='Customer Details' m.parentfield='customer_data' m.save(new=1) webnotes.conn.commit() qrt="select name from `tabauth keys` where auth_key='"+auth_key+"'" res=webnotes.conn.sql(qrt) net=0 if res: a="select name from tabCustomer where name='"+customer+"'" b=webnotes.conn.sql(a) if b: a='' else: d = Document('Customer') d.customer_name=customer d.name=customer d.save(new=1) webnotes.conn.commit() qr="select name from `tabauth keys` where auth_key='"+auth_key+"'" #webnotes.errprint(qr) res=webnotes.conn.sql(qr) rgn='' if res : rr="select region from `tabFranchise` where contact_email='"+res[0][0]+"'" #webnotes.errprint(qr) r1=webnotes.conn.sql(rr,as_list=1) #webnotes.errprint(r1[0][0]) d = Document('Sales Invoice') d.customer=customer d.customer_name=customer d.posting_date=dattime[1:-1] d.due_date=dattime[1:-1] d.remarks='Invalid QR code' d.selling_price_list='Standard Selling' d.currency='INR' if r1: d.territory=r1[0][0] d.region=r1[0][0] d.net_total_export=0 d.grand_total_export=0 d.rounded_total_export=0 d.plc_conversion_rate=1 from webnotes.utils import nowdate from accounts.utils import get_fiscal_year today = nowdate() d.fiscal_year=get_fiscal_year(today)[0] d.debit_to=customer[1:-1]+" - P" d.is_pos=1 d.cash_bank_account='Cash - P' d.docstatus=1 d.save(new=1) webnotes.conn.commit() e=Document('Sales Invoice Item') e.description="Invalid QR code" e.qty='1' e.stock_uom='Nos' e.serial_no_=a[:-1] e.parent=d.name e.parenttype='Sales Invoice' e.parentfield='entries' e.save(new=1) webnotes.conn.commit() key={} key['invoice_id']=d.name login.append(key) loginObj['status']='200' loginObj['invoice']=login return loginObj #loginObj['status']='400' #loginObj['error']='invalid serial no (QR Code) please contact administrator' #return loginObj z=zz[:-1] u="select distinct item_code from `tabSerial No` where name in ("+z+")" s=webnotes.conn.sql(u,as_list=1) qty_dict={} rate_dict={} srl_dict={} for key in s: qty_dict.setdefault(key[0],0) rate_dict.setdefault(key[0],0) srl_dict.setdefault(key[0],'') for sss in item_details: a=sss['barcode'] c="select item_code from `tabSerial No` where name='"+a[:-1]+"'" cc=webnotes.conn.sql(c) d=cc and cc[0][0] or '' qty_dict[d]=cint(qty_dict[d])+1 rate_dict[d]=cint(rate_dict[d])+cint(sss['rate']) srl_dict[d]=srl_dict[d]+a[:-1]+"\n" if invoice_type=='CUSTOMER': #a="select name from `tabCustomer Details`where name like '"+customer+"-%'" #b=webnotes.conn.sql(a) #webnotes.errprint(a) #if b: #a='' #else: #webnotes.errprint("else "+a) l = Document('Customer Details',customer) l.customer_name=customer l.save() webnotes.conn.commit() for ll in item_details: m = Document('Customer Data') #.serial_no=ll['barcode'] #webnotes.errprint(a[:-1]) m.serial_no=a[:-1] #m.start_date=nowdate() m.parent=l.name m.parenttype='Customer Details' m.parentfield='customer_data' m.save(new=1) #webnotes.errprint("before g1") g1="update `tabSerial No` set warehouse='',delivery_date=CURDATE(),status='Delivered',customer='"+customer+"' where name='"+cstr(ll['barcode']).replace(',','')+"'" webnotes.conn.sql(g1) webnotes.conn.commit() else: for gg in item_details: g=gg['barcode'] #webnotes.errprint("in else gg") #webnotes.errprint(g[:-2]) g1="update `tabSerial No` set warehouse='',delivery_date=CURDATE(),status='Delivered',customer='"+customer+"' where name='"+g[:-1]+"'" webnotes.conn.sql(g1) webnotes.conn.commit() for hh in item_details: h=hh['barcode'] g=h[:-2] i="select item_code from `tabSerial No` where name='"+g+"'" ii=webnotes.conn.sql(i) qrt="select name from `tabauth keys` where auth_key='"+auth_key+"'" res=webnotes.conn.sql(qrt) net=0 if res: a="select name from tabCustomer where name='"+customer+"'" #webnotes.errprint(a) b=webnotes.conn.sql(a) #webnotes.errprint(b) if b: a='' else: #webnotes.errprint("else") d = Document('Customer') d.customer_name=customer d.name=customer d.save(new=1) webnotes.conn.commit() d = Document('Sales Invoice') d.customer=customer d.customer_name=customer d.posting_date=dattime[1:-1] d.due_date=dattime[1:-1] d.selling_price_list='Standard Selling' d.currency='INR' d.territory=r1[0][0] d.net_total_export=0 d.grand_total_export=0 d.rounded_total_export=0 d.plc_conversion_rate=1 d.region=r1[0][0] from webnotes.utils import nowdate from accounts.utils import get_fiscal_year today = nowdate() d.fiscal_year=get_fiscal_year(today)[0] d.debit_to=customer[1:-1]+" - P" d.is_pos=1 d.cash_bank_account='Cash - P' d.save(new=1) webnotes.conn.commit() for x in qty_dict.keys(): e=Document('Sales Invoice Item') e.item_code=x e.item_name=x e.description=x e.qty=qty_dict[x] e.stock_uom='Nos' e.ref_rate=cint(rate_dict[x])/cint(qty_dict[x]) e.export_rate=cint(rate_dict[x])/cint(qty_dict[x]) e.export_amount=cint(rate_dict[x]) e.income_account='Sales - P' e.cost_center='Main - P' e.serial_no_=srl_dict[x] e.parent=d.name e.parenttype='Sales Invoice' e.parentfield='entries' e.save(new=1) net+=cint(rate_dict[x]) qrs="select warranty_period from tabItem where name='"+x+"'" #webnotes.errprint(qrs) ress=webnotes.conn.sql(qrs) #webnotes.errprint(ress[0][0]) if ress: exdt=add_months(cstr(nowdate()),cint(ress[0][0])) else: exdt='null' #webnotes.errprint(cstr(srl_dict[x])) #webnotes.errprint(g) g2="update `tabSerial No` set warehouse='', warranty_expiry_date='"+cstr(exdt)+"',delivery_date=CURDATE(),status='Delivered',customer='"+customer+"' where name='"+cstr(h[:-1])+"'" #webnotes.errprint(g2) #webnotes.errprint("in x in qty dict") webnotes.conn.sql(g2) webnotes.conn.commit() d = Document('Sales Invoice',d.name) d.net_total_export=net d.net_total=net d.grand_total_export=net d.rounded_total_export=net d.outstanding_amount=net d.docstatus=1 d.save() webnotes.conn.commit() key={} key['invoice_id']=d.name login.append(key) loginObj['status']='200' loginObj['invoice']=login return loginObj else: loginObj['status']='401' loginObj['error']='invalid token please contact administrator' return loginObj
def create_dn(self): ''' import urllib.request import json json_dict=[] ''' dn=Document('Delivery Note') dn.customer=self.doc.customer dn.customer_name=webnotes.conn.get_value("Customer",self.doc.customer,"customer_name") dn.company='InnoWorth' dn.conversion_rate=1.00 dn.posting_date=nowdate() dn.posting_time=nowtime() dn.customer_address=webnotes.conn.get_value("Address",{"customer":self.doc.customer},"name") dn.address_display=get_address_display(dn.customer_address) dn.price_list_currency='INR' dn.currency='INR' dn.docstatus=1 dn.status="Submitted" dn.selling_price_list='Standard Selling' dn.fiscal_year=webnotes.conn.get_value("Global Defaults", None, "current_fiscal_year") dn.save() j=0 html="" net_tot=0.00 for s in getlist(self.doclist,"purchase_receipt_details"): j=j+1 dni=Document("Delivery Note Item") dni.item_code=s.item_code dni.item_name=s.item_name dni.description=s.description dni.qty=s.qty dni.docstatus=1 dni.ref_rate=webnotes.conn.get_value("Item Price",{"item_code":dni.item_code,"price_list":"Standard Selling"},"ref_rate") dni.export_rate=webnotes.conn.get_value("Item Price",{"item_code":dni.item_code,"price_list":"Standard Selling"},"ref_rate") dni.export_amount=cstr(flt(s.qty)*flt(dni.ref_rate)) net_tot=cstr(flt(net_tot)+flt(dni.export_amount)) dni.warehouse=s.warehouse dni.stock_uom=s.uom dni.serial_no=s.serial_no dni.parent=dn.name dni.save() update_bin=("update tabBin set actual_qty=actual_qty-"+cstr(dni.qty)+" and projected_qty=projected_qty-"+cstr(dni.qty)+" where item_code='"+dni.item_code+"' and warehouse='"+dni.warehouse+"'") html+=("<tr><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(j)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(dni.item_code)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(dni.description)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;text-align:right;'><div>"+cstr(dni.qty)+"</div></td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(dni.stock_uom)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'><div style='text-align:right'>₹ "+cstr(dni.ref_rate)+"</div></td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'><div style='text-align: right'>₹ "+cstr(dni.export_amount)+"</div></td></tr>") stl=Document("Stock Ledger Entry") stl.item_code=s.item_code stl.stock_uom=s.uom stl.serial_no=s.serial_no stl.warehouse=s.warehouse stl.posting_date=nowdate() stl.voucher_type="Delivery Note" stl.voucher_no=dn.name stl.voucher_detail_no=dni.name stl.is_cancelled="No" stl.fiscal_year=webnotes.conn.get_value("Global Defaults", None, "current_fiscal_year") stl.actual_qty=cstr(s.qty) qty=webnotes.conn.sql("select qty_after_transaction from `tabStock Ledger Entry` where item_code='"+s.item_code+"' and warehouse='"+s.warehouse+"' order by name desc limit 1",as_list=1) stl.qty_after_transaction=cstr(flt(qty[0][0])-flt(s.qty)) stl.save() if dni.serial_no: for se in dni.serial_no: update=webnotes.conn.sql("update `tabSerial No` set status='Delivered', warehouse=(select name from tabCustomer where 1=2) where name='"+se+"'") #json_dict.append({"serial_no":se,"supplier_name":self.doc.supplier_name,"item_code":s.item_code}) dn_=Document("Delivery Note",dn.name) dn_.net_total_export=cstr(net_tot) dn_.grand_total_export=cstr(net_tot) dn_.rounded_total_export=cstr(net_tot) a=html_data({"posting_date":datetime.datetime.strptime(nowdate(),'%Y-%m-%d').strftime('%d/%m/%Y'),"due_date":"","customer_name":dn.customer_name,"net_total":dn_.net_total_export,"grand_total":dn_.grand_total_export,"rounded_total":dn_.rounded_total_export,"table_data":html,"date_1":"Posting Date","date_2":"","doctype":"Delivery Note","doctype_no":dn.name,"company":dn.company,"addr_name":"Address","address":dn.address_display,"tax_detail":""}) attach_file(a,[dn.name,"Selling/Kirana","Delivery Note"]) '''
def service_si(self,s): total_amt=0.00 si=Document("Sales Invoice") si.customer=webnotes.conn.get_value("Customer",{"innoworth_id":(s['Customer Id']).strip()},"name") si.customer_name=webnotes.conn.get_value("Customer",{"innoworth_id":(s['Customer Id']).strip()},"name") si.posting_date=nowdate() si.due_date=nowdate() si.company='InnoWorth' si.conversion_rate=1.00 si.customer_group='Individual' si.territory=s['Territory'] si.charge=webnotes.conn.get_value("Applicable Territory",{"territory":s['Territory']},"parent") si.debit_to=webnotes.conn.get_value('Account',{"master_name":si.customer},'name') si.price_list_currency='INR' si.currency='INR' si.selling_price_list='Standard Selling' si.fiscal_year=webnotes.conn.get_value("Global Defaults", None, "current_fiscal_year") si.docstatus=1 si.save() html="" j=0 item_list=[] for r in s['Child']: j=j+1 child_data=sql("select name,item_name,item_group,description,stock_uom from `tabItem` where name='"+(r['Item Name']).strip()+"'",as_list=1) sic=Document("Sales Invoice Item") sic.parent=si.name sic.item_code=child_data[0][0] sic.item_name=child_data[0][1] sic.item_group=child_data[0][2] sic.description=child_data[0][3] sic.qty=(r['Qty']).strip() sic.stock_uom=child_data[0][4] sic.ref_rate=webnotes.conn.get_value("Item Price",{"item_code":(r['Item Name']).strip(),"price_list":"Standard Selling"},"ref_rate") sic.export_rate=webnotes.conn.get_value("Item Price",{"item_code":(r['Item Name']).strip(),"price_list":"Standard Selling"},"ref_rate") if child_data[0][1]: sic.export_amount=cstr(flt(sic.ref_rate)*flt((r['Qty']).strip())) else: sic.export_amount=cstr((r['Qty']).strip()) total_amt=cstr(flt(total_amt)+flt(sic.export_amount)) sic.income_account='Sales - innow' sic.cost_center='Main - innow' sic.docstatus=1 item_list.append({"item_code":sic.item_code,"export_amt":sic.export_amount}) sic.save() html+=("<tr><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(j)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(sic.item_code)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(sic.description)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;text-align:right;'><div>"+cstr(sic.qty)+"</div></td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(sic.stock_uom)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'><div style='text-align:right'>₹ "+cstr(sic.ref_rate)+"</div></td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'><div style='text-align: right'>₹ "+cstr(sic.export_amount)+"</div></td></tr>") tax_total=0.00 tax_html="" if si.charge: tax_total=self.create_tax(si.charge,si.name,item_list,'Sales Invoice','Sales Taxes and Charges',total_amt) tax_html=self.sales_tax_html(si.name,None,0) si_=Document('Sales Invoice',si.name) si_.net_total_export=cstr(total_amt) si_.other_charges_total_export=cstr(tax_total) si_.grand_total_export=cstr(flt(si_.net_total_export)+flt(si_.other_charges_total_export)) si_.grand_total=cstr(si_.grand_total_export) si_.rounded_total_export=cstr(round(flt(si_.grand_total_export))) adv=c_amt=0.00 flag=False check=0 total=si_.grand_total_export parent_jv=[] advance_payment=sql("select credit,parent,name,against_account from `tabJournal Voucher Detail` where account='"+si.debit_to+"' and is_advance='Yes' and credit<>0 and ifnull(against_invoice,'')='' and docstatus=1 order by name asc",as_list=1) if advance_payment: for s in advance_payment: if s[1] not in parent_jv: parent_jv.append(s[1]) if flt(total) < flt(s[0]) and flag==False: adv=cstr(si_.grand_total_export) update_jv=sql("update `tabJournal Voucher Detail` set against_invoice='"+si.name+"', credit='"+cstr(total)+"' where name='"+s[2]+"'") jv = Document("Journal Voucher Detail") jv.account=si.debit_to jv.cost_center= "Main - Frsh" jv.credit= cstr(flt(s[0])-flt(total)) jv.is_advance= "Yes" jv.parent=s[1] jv.against_account=s[3] jv.docstatus=1 jv.save() flag=True elif flag==False: adv=cstr(flt(adv)+flt(s[0])) total=cstr(flt(total)-flt(s[0])) update_jv=sql("update `tabJournal Voucher Detail` set against_invoice='"+si.name+"' where name='"+s[2]+"'") if flt(total)==0: flag=True else: flag=False si_.total_advance=cstr(adv) si_.outstanding_amount=cstr(flt(si_.grand_total_export)-flt(adv)) si_.docstatus=1 si_.save() if parent_jv: self.make_adv_payment_gl(parent_jv) data=[{"against_voucher":si.name,"account":si.debit_to,"debit":cstr(si_.grand_total_export),"credit":"0","against":"Sales - innow","against_voucher_type":"Sales Invoice","voucher_type":"Sales Invoice","voucher_no":si.name,"cost_center":""},{"against_voucher":"","account":'Sales - innow',"debit":"0","credit":cstr(total_amt),"against":si.debit_to,"against_voucher_type":"","voucher_type":"Sales Invoice","voucher_no":si.name,"cost_center":"Main - innow"}] self.create_gl(data) a=html_data({"posting_date":datetime.datetime.strptime(nowdate(),'%Y-%m-%d').strftime('%d/%m/%Y'),"due_date":datetime.datetime.strptime(nowdate(),'%Y-%m-%d').strftime('%d/%m/%Y'),"customer_name":si.customer_name,"net_total":si_.net_total_export,"grand_total":si_.grand_total_export,"rounded_total":si_.rounded_total_export,"table_data":html,"date_1":"Posting Date","date_2":"Due Date","doctype":"Sales Invoice","doctype_no":si.name,"company":si.company,"addr_name":"","address":"","tax_detail":tax_html}) file_path_=attach_file(a,[si.name,"Account/Kirana","Sales Invoice"]) return {"Sales Invoice":si.name,"File Copy":file_path_}
def make_so(self,args): # coding: utf-8 net_tot=0.00 so=Document('Sales Order') so.transaction_date=nowdate() so.price_list_currency='INR' so.currency='INR' so.selling_price_list='Standard Selling' so.customer=webnotes.conn.get_value("Customer",{"innoworth_id":(args['Customer Id']).strip()},"name") so.customer_name=webnotes.conn.get_value("Customer",{"innoworth_id":(args['Customer Id']).strip()},"customer_name") so.delivery_date=(args['Required Date']).strip() so.company='InnoWorth' so.conversion_rate=1.00 so.customer_group='Individual' if (args['Territory']).strip(): so.territory=(args['Territory']).strip() so.charge=webnotes.conn.get_value("Applicable Territory",{"territory":so.territory},"parent") so.fiscal_year=webnotes.conn.get_value("Global Defaults", None, "current_fiscal_year") so.customer_address=webnotes.conn.get_value("Address",{"customer":so.customer},"name") so.address_display=get_address_display(so.customer_address) so.contact_person=webnotes.conn.get_value("Contact",{"customer":so.customer},"name") so.docstatus=1 so.status='Submitted' so.plc_conversion_rate=1 so.save() html="" sr=0 item_list=[] for j in args['Child']: sr=sr+1 soi=Document('Sales Order Item') soi.item_code=(j['Item Name']).strip() soi.qty=(j['Qty']).strip() item_details=webnotes.conn.sql("select default_warehouse,item_name,stock_uom,description from tabItem where name='"+(j['Item Name']).strip()+"'",as_list=1) soi.reserved_warehouse=item_details[0][0] soi.item_name=item_details[0][1] soi.stock_uom=item_details[0][2] soi.description=item_details[0][3] rate=webnotes.conn.sql("select ref_rate from `tabItem Price` where price_list='Standard Selling' and item_code='"+(j['Item Name']).strip()+"'",as_list=1) if rate: soi.ref_rate=rate[0][0] soi.export_rate=rate[0][0] else: soi.ref_rate=1 soi.export_rate=1 soi.export_amount=cstr(flt(soi.ref_rate)*flt((j['Qty']).strip())) item_list.append({"item_code":soi.item_code,"export_amt":soi.export_amount}) net_tot=cstr(flt(net_tot)+flt(soi.export_amount)) soi.parentfield='sales_order_details' soi.parenttype='Sales Order' soi.docstatus=1 soi.parent=so.name soi.save(new=1) html+=("<tr><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(sr)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(soi.item_code)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(soi.description)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;text-align:right;'><div>"+cstr(soi.qty)+"</div></td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(soi.stock_uom)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'><div style='text-align:right'>₹ "+cstr(soi.ref_rate)+"</div></td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'><div style='text-align: right'>₹ "+cstr(soi.export_amount)+"</div></td></tr>") data=[] data.append({"item_code":soi.item_code,"so_qty":soi.qty,"proj_qty":(0-flt(soi.qty)),"warehouse":soi.reserved_warehouse,"bin_iqty":"","bin_pqty":"Bin.projected_qty","type":"so"}) self.update_bin(data) tax_total=0.00 if so.charge: tax_total=self.create_tax(so.charge,so.name,item_list,'Sales Order','Sales Taxes and Charges',net_tot) so_=Document("Sales Order",so.name) so_.net_total_export=net_tot so_.other_charges_total_export=cstr(tax_total) so_.grand_total_export=cstr(flt(so_.net_total_export)+flt(so_.other_charges_total_export)) so_.rounded_total_export=cstr(round(flt(so_.grand_total_export))) so_.save() a=html_data({"posting_date":datetime.datetime.strptime(nowdate(),'%Y-%m-%d').strftime('%d/%m/%Y'),"due_date":datetime.datetime.strptime(so.delivery_date,'%Y-%m-%d').strftime('%d/%m/%Y'),"customer_name":so.customer_name,"net_total":net_tot,"grand_total":net_tot,"rounded_total":net_tot,"table_data":html,"date_1":"Sales Order Date","date_2":"Expected Delivery Date","doctype":"Sales Order","doctype_no":so.name,"company":so.company,"addr_name":"Customer Address","address":so.address_display,"tax_detail":""}) file_path_=attach_file(a,[so.name,"Selling/Kirana","Sales Order"]) return {"Sales Order":so.name,"File Copy":file_path_}
def make_si(self,args): parent=sql("select * from `tabSales Order` where name='"+(args['Sales Order No']).strip()+"'",as_dict=1) if parent: for r in parent: si=Document("Sales Invoice") si.customer=r['customer'] si.customer_name=r['customer_name'] si.posting_date=nowdate() si.due_date=nowdate() si.charge=r['charge'] si.company='InnoWorth' si.conversion_rate=1.00 si.customer_group='Individual' si.territory=r['territory'] si.debit_to=webnotes.conn.get_value('Account',{"master_name":r['customer']},'name') si.price_list_currency='INR' si.currency='INR' si.selling_price_list='Standard Selling' si.fiscal_year=webnotes.conn.get_value("Global Defaults", None, "current_fiscal_year") si.net_total_export=cstr(r['net_total_export']) si.grand_total_export=cstr(r['grand_total_export']) si.other_charges_total_export=cstr(r['other_charges_total_export']) si.grand_total=cstr(r['grand_total_export']) si.rounded_total_export=cstr(r['rounded_total_export']) si.save() si=Document("Sales Invoice",si.name) adv=c_amt=0.00 flag=False check=0 total=si.grand_total_export parent_jv=[] advance_payment=sql("select credit,parent,name,against_account from `tabJournal Voucher Detail` where account='"+si.debit_to+"' and is_advance='Yes' and credit<>0 and ifnull(against_invoice,'')='' and docstatus=1 order by name asc",as_list=1) if advance_payment: for s in advance_payment: if s[1] not in parent_jv: parent_jv.append(s[1]) if flt(total) < flt(s[0]) and flag==False: adv=cstr(si.grand_total_export) update_jv=sql("update `tabJournal Voucher Detail` set against_invoice='"+si.name+"', credit='"+cstr(total)+"' where name='"+s[2]+"'") jv = Document("Journal Voucher Detail") jv.account=si.debit_to jv.cost_center= "Main - Frsh" jv.credit= cstr(flt(s[0])-flt(total)) jv.is_advance= "Yes" jv.parent=s[1] jv.against_account=s[3] jv.docstatus=1 jv.save() flag=True elif flag==False: adv=cstr(flt(adv)+flt(s[0])) total=cstr(flt(total)-flt(s[0])) update_jv=sql("update `tabJournal Voucher Detail` set against_invoice='"+si.name+"' where name='"+s[2]+"'") if flt(total)==0: flag=True else: flag=False si.total_advance=cstr(adv) si.outstanding_amount=cstr(flt(r['grand_total_export'])-flt(adv)) si.docstatus=1 si.save() update=sql("update `tabSales Order` set per_billed='100' where name='"+cstr(r['name'])+"'") child=sql("select * from `tabSales Order Item` where parent='"+(args['Sales Order No']).strip()+"'",as_dict=1) html="" j=0 credit_amt=0.00 for s in child: j=j+1 sic=Document("Sales Invoice Item") sic.parent=si.name sic.item_code=s['item_code'] sic.item_name=s['item_name'] sic.item_group=s['item_group'] sic.description=s['description'] sic.qty=s['qty'] sic.stock_uom=s['stock_uom'] sic.ref_rate=s['ref_rate'] sic.amount=s['export_amount'] c_amt=cstr(flt(c_amt)+flt(sic.amount)) sic.export_rate=s['export_rate'] sic.export_amount=s['export_amount'] sic.income_account='Sales - innow' sic.cost_center='Main - innow' sic.warehouse=s['reserved_warehouse'] sic.sales_order=r['name'] sic.so_detail=s['name'] sic.docstatus=1 html+=("<tr><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(j)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(sic.item_code)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(sic.description)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;text-align:right;'><div>"+cstr(sic.qty)+"</div></td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'>"+cstr(sic.stock_uom)+"</td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'><div style='text-align:right'>₹ "+cstr(sic.ref_rate)+"</div></td><td style='border:1px solid rgb(153, 153, 153);word-wrap: break-word;'><div style='text-align: right'>₹ "+cstr(sic.export_amount)+"</div></td></tr>") update=sql("update `tabSales Order Item` set billed_amt='"+cstr(s['export_amount'])+"' where name='"+cstr(s['name'])+"'") sic.save() tax_html=self.sales_tax_html((args['Sales Order No']).strip(),si.name,1) if parent_jv: self.make_adv_payment_gl(parent_jv) data=[{"against_voucher":si.name,"account":si.debit_to,"debit":cstr(si.grand_total_export),"credit":"0","against":"Sales - innow","against_voucher_type":"Sales Invoice","voucher_type":"Sales Invoice","voucher_no":si.name,"cost_center":""},{"account":'Sales - innow',"debit":"0","credit":cstr(c_amt),"against":si.debit_to,"against_voucher_type":"","voucher_type":"Sales Invoice","voucher_no":si.name,"cost_center":"Main - innow","against_voucher":""}] self.create_gl(data) a=html_data({"posting_date":datetime.datetime.strptime(nowdate(),'%Y-%m-%d').strftime('%d/%m/%Y'),"due_date":datetime.datetime.strptime(nowdate(),'%Y-%m-%d').strftime('%d/%m/%Y'),"customer_name":si.customer_name,"net_total":cstr(si.net_total_export),"grand_total":cstr(si.grand_total_export),"rounded_total":cstr(si.rounded_total_export),"table_data":html,"date_1":"Posting Date","date_2":"Due Date","doctype":"Sales Invoice","doctype_no":si.name,"company":si.company,"addr_name":"","address":"","tax_detail":tax_html}) file_path_=attach_file(a,[si.name,"Account/Kirana","Sales Invoice"]) return {"Sales Invoice":si.namek,"File Copy":file_path_}