From 74d1b65105b11cf4300e30cec30028a7680c3403 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 27 Jan 2012 12:25:09 +0530 Subject: [PATCH] changed sql to webnotes.conn.sql to avoid errors due to closing of connections in scheduler/push patch --- .../accounts/doctype/gl_control/gl_control.py | 68 +++++++------ .../receivable_voucher/receivable_voucher.py | 97 +++++++++---------- .../doctype/sales_common/sales_common.py | 69 +++++++------ erpnext/utilities/transaction_base.py | 20 ++-- 4 files changed, 123 insertions(+), 131 deletions(-) diff --git a/erpnext/accounts/doctype/gl_control/gl_control.py b/erpnext/accounts/doctype/gl_control/gl_control.py index 5365bbce09..387fc6380f 100644 --- a/erpnext/accounts/doctype/gl_control/gl_control.py +++ b/erpnext/accounts/doctype/gl_control/gl_control.py @@ -8,8 +8,6 @@ from webnotes.model.doclist import getlist, copy_doclist, clone from webnotes.model.code import get_obj from webnotes import session, form, is_testing, msgprint, errprint -sql = webnotes.conn.sql -get_value = webnotes.conn.get_value in_transaction = webnotes.conn.in_transaction convert_to_lists = webnotes.conn.convert_to_lists @@ -24,7 +22,7 @@ class DocType: # Get Company List # ---------------- def get_companies(self,arg=''): - ret = sql("select name, abbr from tabCompany where docstatus != 2") + ret = webnotes.conn.sql("select name, abbr from tabCompany where docstatus != 2") return {'cl':[r[0] for r in ret]} def get_company_currency(self,arg=''): @@ -35,7 +33,7 @@ class DocType: # -------------------- def get_bal(self,arg): ac, fy = arg.split('~~~') - det = sql("select t1.balance, t2.debit_or_credit from `tabAccount Balance` t1, `tabAccount` t2 where t1.period = %s and t2.name=%s and t1.account = t2.name", (fy, ac)) + det = webnotes.conn.sql("select t1.balance, t2.debit_or_credit from `tabAccount Balance` t1, `tabAccount` t2 where t1.period = %s and t2.name=%s and t1.account = t2.name", (fy, ac)) bal = det and flt(det[0][0]) or 0 dr_or_cr = det and flt(det[0][1]) or '' return fmt_money(bal) + ' ' + dr_or_cr @@ -44,10 +42,10 @@ class DocType: acc, f, t = arg.split('~~~') c, fy = '', get_defaults()['fiscal_year'] - det = sql("select debit_or_credit, lft, rgt, is_pl_account from tabAccount where name=%s", acc) + det = webnotes.conn.sql("select debit_or_credit, lft, rgt, is_pl_account from tabAccount where name=%s", acc) if f: c += (' and t1.posting_date >= "%s"' % f) if t: c += (' and t1.posting_date <= "%s"' % t) - bal = sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1 where t1.account='%s' and ifnull(is_opening, 'No') = 'No' %s" % (acc, c)) + bal = webnotes.conn.sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1 where t1.account='%s' and ifnull(is_opening, 'No') = 'No' %s" % (acc, c)) bal = bal and flt(bal[0][0]) or 0 if det[0][0] != 'Debit': @@ -55,7 +53,7 @@ class DocType: # add opening for balance sheet accounts if det[0][3] == 'No': - opening = flt(sql("select opening from `tabAccount Balance` where account=%s and period=%s", (acc, fy))[0][0]) + opening = flt(webnotes.conn.sql("select opening from `tabAccount Balance` where account=%s and period=%s", (acc, fy))[0][0]) bal = bal + opening return flt(bal) @@ -67,11 +65,11 @@ class DocType: acc, f, t = arg.split('~~~') c, fy = '', get_defaults()['fiscal_year'] - det = sql("select debit_or_credit, lft, rgt, is_pl_account from tabAccount where name=%s", acc) + det = webnotes.conn.sql("select debit_or_credit, lft, rgt, is_pl_account from tabAccount where name=%s", acc) if f: c += (' and t1.posting_date >= "%s"' % f) if t: c += (' and t1.posting_date <= "%s"' % t) if cost_center: c += (' and t1.cost_center = "%s"' % cost_center) - bal = sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1 where t1.account='%s' %s" % (acc, c)) + bal = webnotes.conn.sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1 where t1.account='%s' %s" % (acc, c)) bal = bal and flt(bal[0][0]) or 0 if det[0][0] != 'Debit': @@ -91,9 +89,9 @@ class DocType: if parent=='Root Node': - cl = sql("select t1.name, t1.group_or_ledger, t1.debit_or_credit, t2.balance, t1.account_name from tabAccount t1, `tabAccount Balance` t2 where ifnull(t1.parent_account, '') = '' and t1.docstatus != 2 and t1.company=%s and t1.name = t2.account and t2.period = %s order by t1.name asc", (company, fy),as_dict=1) + cl = webnotes.conn.sql("select t1.name, t1.group_or_ledger, t1.debit_or_credit, t2.balance, t1.account_name from tabAccount t1, `tabAccount Balance` t2 where ifnull(t1.parent_account, '') = '' and t1.docstatus != 2 and t1.company=%s and t1.name = t2.account and t2.period = %s order by t1.name asc", (company, fy),as_dict=1) else: - cl = sql("select t1.name, t1.group_or_ledger, t1.debit_or_credit, t2.balance, t1.account_name from tabAccount t1, `tabAccount Balance` t2 where ifnull(t1.parent_account, '')=%s and t1.docstatus != 2 and t1.company=%s and t1.name = t2.account and t2.period = %s order by t1.name asc",(parent, company, fy) ,as_dict=1) + cl = webnotes.conn.sql("select t1.name, t1.group_or_ledger, t1.debit_or_credit, t2.balance, t1.account_name from tabAccount t1, `tabAccount Balance` t2 where ifnull(t1.parent_account, '')=%s and t1.docstatus != 2 and t1.company=%s and t1.name = t2.account and t2.period = %s order by t1.name asc",(parent, company, fy) ,as_dict=1) # remove Decimals for c in cl: c['balance'] = flt(c['balance']) @@ -101,9 +99,9 @@ class DocType: # get children cost center details elif type=='Cost Center': if parent=='Root Node': - cl = sql("select name,group_or_ledger, cost_center_name from `tabCost Center` where ifnull(parent_cost_center, '')='' and docstatus != 2 and company_name=%s order by name asc",(company),as_dict=1) + cl = webnotes.conn.sql("select name,group_or_ledger, cost_center_name from `tabCost Center` where ifnull(parent_cost_center, '')='' and docstatus != 2 and company_name=%s order by name asc",(company),as_dict=1) else: - cl = sql("select name,group_or_ledger,cost_center_name from `tabCost Center` where ifnull(parent_cost_center, '')=%s and docstatus != 2 and company_name=%s order by name asc",(parent,company),as_dict=1) + cl = webnotes.conn.sql("select name,group_or_ledger,cost_center_name from `tabCost Center` where ifnull(parent_cost_center, '')=%s and docstatus != 2 and company_name=%s order by name asc",(parent,company),as_dict=1) return {'parent':parent, 'parent_acc_name':parent_acc_name, 'cl':cl} # Add a new account @@ -130,7 +128,7 @@ class DocType: for d in arg.keys(): cc.fields[d] = arg[d] # map company abbr - other_info = sql("select company_abbr from `tabCost Center` where name='%s'"%arg['parent_cost_center']) + other_info = webnotes.conn.sql("select company_abbr from `tabCost Center` where name='%s'"%arg['parent_cost_center']) cc.company_abbr = other_info and other_info[0][0] or arg['company_abbr'] cc_obj = get_obj(doc=cc) @@ -167,7 +165,7 @@ class DocType: # Check budget before gl entry #check budget only if account is expense account - is_expense_acct = sql("select name from tabAccount where is_pl_account='Yes' and debit_or_credit='Debit' and name=%s",self.get_val(le_map['account'], d, parent)) + is_expense_acct = webnotes.conn.sql("select name from tabAccount where is_pl_account='Yes' and debit_or_credit='Debit' and name=%s",self.get_val(le_map['account'], d, parent)) if is_expense_acct and self.get_val(le_map['cost_center'], d, parent): get_obj('Budget Control').check_budget([self.get_val(le_map[k], d, parent) for k in flist if k in ['account','cost_center','debit','credit','posting_date','fiscal_year','company']],cancel) @@ -214,7 +212,7 @@ class DocType: def make_gl_entries(self, doc, doclist, cancel=0, adv_adj = 0, use_mapper='', merge_entries = 1, update_outstanding='Yes'): self.entries = [] # get entries - le_map_list = sql("select * from `tabGL Mapper Detail` where parent = %s", use_mapper or doc.doctype, as_dict=1) + le_map_list = webnotes.conn.sql("select * from `tabGL Mapper Detail` where parent = %s", use_mapper or doc.doctype, as_dict=1) self.td, self.tc = 0.0, 0.0 for le_map in le_map_list: if le_map['table_field']: @@ -237,17 +235,17 @@ class DocType: # set as cancelled if cancel: vt, vn = self.get_val(le_map['voucher_type'], doc, doc), self.get_val(le_map['voucher_no'], doc, doc) - sql("update `tabGL Entry` set is_cancelled='Yes' where voucher_type=%s and voucher_no=%s", (vt, vn)) + webnotes.conn.sql("update `tabGL Entry` set is_cancelled='Yes' where voucher_type=%s and voucher_no=%s", (vt, vn)) # Get account balance on any date # ------------------------------- def get_as_on_balance(self, account_name, fiscal_year, as_on, credit_or_debit, lft, rgt): # initialization - det = sql("select start_date, opening from `tabAccount Balance` where period = %s and account = %s", (fiscal_year, account_name)) + det = webnotes.conn.sql("select start_date, opening from `tabAccount Balance` where period = %s and account = %s", (fiscal_year, account_name)) from_date, opening, debit_bal, credit_bal, closing_bal = det and det[0][0] or getdate(nowdate()), det and flt(det[0][1]) or 0, 0, 0, det and flt(det[0][1]) or 0 # prev month closing - prev_month_det = sql("select end_date, debit, credit, balance from `tabAccount Balance` where account = %s and end_date <= %s and fiscal_year = %s order by end_date desc limit 1", (account_name, as_on, fiscal_year)) + prev_month_det = webnotes.conn.sql("select end_date, debit, credit, balance from `tabAccount Balance` where account = %s and end_date <= %s and fiscal_year = %s order by end_date desc limit 1", (account_name, as_on, fiscal_year)) if prev_month_det: from_date = getdate(add_days(prev_month_det[0][0].strftime('%Y-%m-%d'), 1)) opening = 0 @@ -257,7 +255,7 @@ class DocType: # curr month transaction if getdate(as_on) >= from_date: - curr_month_bal = sql("select SUM(t1.debit), SUM(t1.credit) from `tabGL Entry` t1, `tabAccount` t2 WHERE t1.posting_date >= %s AND t1.posting_date <= %s and ifnull(t1.is_opening, 'No') = 'No' AND t1.account = t2.name AND t2.lft >= %s AND t2.rgt <= %s and ifnull(t1.is_cancelled, 'No') = 'No'", (from_date, as_on, lft, rgt)) + curr_month_bal = webnotes.conn.sql("select SUM(t1.debit), SUM(t1.credit) from `tabGL Entry` t1, `tabAccount` t2 WHERE t1.posting_date >= %s AND t1.posting_date <= %s and ifnull(t1.is_opening, 'No') = 'No' AND t1.account = t2.name AND t2.lft >= %s AND t2.rgt <= %s and ifnull(t1.is_cancelled, 'No') = 'No'", (from_date, as_on, lft, rgt)) curr_debit_amt, curr_credit_amt = flt(curr_month_bal[0][0]), flt(curr_month_bal[0][1]) debit_bal = curr_month_bal and debit_bal + curr_debit_amt or debit_bal credit_bal = curr_month_bal and credit_bal + curr_credit_amt or credit_bal @@ -272,7 +270,7 @@ class DocType: # ADVANCE ALLOCATION #------------------- def get_advances(self, obj, account_head, table_name,table_field_name, dr_or_cr): - jv_detail = sql("select t1.name, t1.remark, t2.%s, t2.name, t1.ded_amount from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and (t2.against_voucher is null or t2.against_voucher = '') and (t2.against_invoice is null or t2.against_invoice = '') and (t2.against_jv is null or t2.against_jv = '') and t2.account = '%s' and t2.is_advance = 'Yes' and t1.docstatus = 1 order by t1.voucher_date " % (dr_or_cr,account_head)) + jv_detail = webnotes.conn.sql("select t1.name, t1.remark, t2.%s, t2.name, t1.ded_amount from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and (t2.against_voucher is null or t2.against_voucher = '') and (t2.against_invoice is null or t2.against_invoice = '') and (t2.against_jv is null or t2.against_jv = '') and t2.account = '%s' and t2.is_advance = 'Yes' and t1.docstatus = 1 order by t1.voucher_date " % (dr_or_cr,account_head)) # clear advance table obj.doc.clear_table(obj.doclist,table_field_name) # Create advance table @@ -291,7 +289,7 @@ class DocType: def clear_advances(self, obj,table_name,table_field_name): for d in getlist(obj.doclist,table_field_name): if not flt(d.allocated_amount): - sql("update `tab%s` set parent = '' where name = '%s' and parent = '%s'" % (table_name, d.name, d.parent)) + webnotes.conn.sql("update `tab%s` set parent = '' where name = '%s' and parent = '%s'" % (table_name, d.name, d.parent)) d.parent = '' # Update aginst document in journal voucher @@ -305,7 +303,7 @@ class DocType: get_obj(dt='GL Control').make_gl_entries(jv_obj.doc, jv_obj.doclist, cancel =1, adv_adj =1) # update ref in JV Detail - sql("update `tabJournal Voucher Detail` set %s = '%s' where name = '%s'" % (doctype=='Payable Voucher' and 'against_voucher' or 'against_invoice', cstr(against_document_no), d.jv_detail_no)) + webnotes.conn.sql("update `tabJournal Voucher Detail` set %s = '%s' where name = '%s'" % (doctype=='Payable Voucher' and 'against_voucher' or 'against_invoice', cstr(against_document_no), d.jv_detail_no)) # re-submit JV jv_obj = get_obj('Journal Voucher', d.journal_voucher, with_children =1) @@ -332,12 +330,12 @@ class DocType: def add_extra_entry(self,jv_obj,jv,jv_detail_no, allocate, account_head, doctype, dr_or_cr, against_document_no): # get old entry details - jvd = sql("select %s, cost_center, balance, against_account from `tabJournal Voucher Detail` where name = '%s'" % (dr_or_cr,jv_detail_no)) + jvd = webnotes.conn.sql("select %s, cost_center, balance, against_account from `tabJournal Voucher Detail` where name = '%s'" % (dr_or_cr,jv_detail_no)) advance = jvd and flt(jvd[0][0]) or 0 balance = flt(advance) - flt(allocate) # update old entry - sql("update `tabJournal Voucher Detail` set %s = '%s', %s = '%s' where name = '%s'" % (dr_or_cr, flt(allocate), doctype == "Payable Voucher" and 'against_voucher' or 'against_invoice',cstr(against_document_no), jv_detail_no)) + webnotes.conn.sql("update `tabJournal Voucher Detail` set %s = '%s', %s = '%s' where name = '%s'" % (dr_or_cr, flt(allocate), doctype == "Payable Voucher" and 'against_voucher' or 'against_invoice',cstr(against_document_no), jv_detail_no)) # new entry with balance amount add = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', 1, jv_obj.doclist) @@ -356,7 +354,7 @@ class DocType: # 2. check if amount is same # 3. check if is_advance is 'Yes' # 4. check if jv is submitted - ret = sql("select t2.%s from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and ifnull(t2.against_voucher, '') = '' and ifnull(t2.against_invoice, '') = '' and t2.account = '%s' and t1.name = '%s' and t2.name = '%s' and t2.is_advance = 'Yes' and t1.docstatus=1 and t2.%s = %s" % (dr_or_cr, account_head, d.journal_voucher, d.jv_detail_no, dr_or_cr, d.advance_amount)) + ret = webnotes.conn.sql("select t2.%s from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and ifnull(t2.against_voucher, '') = '' and ifnull(t2.against_invoice, '') = '' and t2.account = '%s' and t1.name = '%s' and t2.name = '%s' and t2.is_advance = 'Yes' and t1.docstatus=1 and t2.%s = %s" % (dr_or_cr, account_head, d.journal_voucher, d.jv_detail_no, dr_or_cr, d.advance_amount)) if (not ret): msgprint("Please click on 'Get Advances Paid' button as the advance entries have been changed.") raise Exception @@ -399,13 +397,13 @@ class DocType: Updates against document, if partial amount splits into rows """ - sql(""" + webnotes.conn.sql(""" update `tabJournal Voucher Detail` t1, `tabJournal Voucher` t2 set t1.%(dr_or_cr)s = '%(allocated_amt)s', t1.%(against_fld)s = '%(against_voucher)s', t2.modified = now() where t1.name = '%(voucher_detail_no)s' and t1.parent = t2.name""" % d) if d['allocated_amt'] < d['unadjusted_amt']: - jvd = sql("select cost_center, balance, against_account, is_advance from `tabJournal Voucher Detail` where name = '%s'" % d['voucher_detail_no']) + jvd = webnotes.conn.sql("select cost_center, balance, against_account, is_advance from `tabJournal Voucher Detail` where name = '%s'" % d['voucher_detail_no']) # new entry with balance amount ch = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', 1) ch.account = d['account'] @@ -425,7 +423,7 @@ class DocType: check if amount is same check if jv is submitted """ - ret = sql(""" + ret = webnotes.conn.sql(""" select t2.%(dr_or_cr)s from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and t2.account = '%(account)s' and ifnull(t2.against_voucher, '')='' and ifnull(t2.against_invoice, '')='' and ifnull(t2.against_jv, '')='' @@ -446,7 +444,7 @@ class DocType: msg = [] # Get Balance from GL Entries - bal = sql("select sum(debit)-sum(credit) from `tabGL Entry` where against_voucher=%s and against_voucher_type=%s", (voucher_obj.doc.name , voucher_obj.doc.doctype)) + bal = webnotes.conn.sql("select sum(debit)-sum(credit) from `tabGL Entry` where against_voucher=%s and against_voucher_type=%s", (voucher_obj.doc.name , voucher_obj.doc.doctype)) bal = bal and flt(bal[0][0]) or 0.0 if cstr(voucher_obj.doc.doctype) == 'Payable Voucher': bal = -bal @@ -457,7 +455,7 @@ class DocType: msg.append('
Difference found in Outstanding Amount of %s : %s (Before : %s; After : %s)
' % (voucher_obj.doc.doctype, voucher_obj.doc.name, voucher_obj.doc.outstanding_amount, bal)) # set voucher balance - #sql("update `tab%s` set outstanding_amount=%s where name='%s'" % (voucher_obj.doc.doctype, bal, voucher_obj.doc.name)) + #webnotes.conn.sql("update `tab%s` set outstanding_amount=%s where name='%s'" % (voucher_obj.doc.doctype, bal, voucher_obj.doc.name)) webnotes.conn.set(voucher_obj.doc, 'outstanding_amount', flt(bal)) # Send Mail @@ -468,7 +466,7 @@ In Account := %s User := %s has Repaired Outstanding Amount For %s : %s and foll %s -""" % (get_value('Control Panel', None,'account_id'), session['user'], voucher_obj.doc.doctype, voucher_obj.doc.name, '\n'.join(msg)) +""" % (webnotes.conn.get_value('Control Panel', None,'account_id'), session['user'], voucher_obj.doc.doctype, voucher_obj.doc.name, '\n'.join(msg)) sendmail(['support@iwebnotes.com'], subject='Repair Outstanding Amount', parts = [('text/plain', email_msg)]) # Acknowledge User @@ -478,7 +476,7 @@ In Account := %s User := %s has Repaired Outstanding Amount For %s : %s and foll """ Find vouchers that are not cancelled correctly and repost them """ - vl = sql(""" + vl = webnotes.conn.sql(""" select voucher_type, voucher_no, account, sum(debit) as sum_debit, sum(credit) as sum_credit from `tabGL Entry` where is_cancelled='Yes' and creation > %s @@ -490,7 +488,7 @@ In Account := %s User := %s has Repaired Outstanding Amount For %s : %s and foll if v['sum_debit'] != 0 or v['sum_credit'] != 0: ac_list.append(v['account']) - fy_list = sql("""select name from `tabFiscal Year` + fy_list = webnotes.conn.sql("""select name from `tabFiscal Year` where (%s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)) or year_start_date > %s order by year_start_date ASC""", (after_date, after_date)) @@ -539,7 +537,7 @@ def send_notification(new_rv): """Notify concerned persons about recurring invoice generation""" subject = "Invoice : " + new_rv.doc.name - com = new_rv.doc.company # get_value('Control Panel', '', 'letter_head') + com = new_rv.doc.company # webnotes.conn.get_value('Control Panel', '', 'letter_head') hd = '''

%s

Invoice: %s

diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py index 59217362a3..87d037358a 100644 --- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py +++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py @@ -9,9 +9,6 @@ from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updated from webnotes import session, form, is_testing, msgprint, errprint from webnotes.utils.scheduler import set_event, cancel_event, Scheduler -set = webnotes.conn.set -sql = webnotes.conn.sql -get_value = webnotes.conn.get_value in_transaction = webnotes.conn.in_transaction convert_to_lists = webnotes.conn.convert_to_lists @@ -39,25 +36,25 @@ class DocType(TransactionBase): #Set retail related fields from pos settings #------------------------------------------------------------------------- def set_pos_fields(self): - pos = sql("select * from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (session['user'], self.doc.company), as_dict=1) + pos = webnotes.conn.sql("select * from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (session['user'], self.doc.company), as_dict=1) if not pos: - pos = sql("select * from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % (self.doc.company), as_dict=1) + pos = webnotes.conn.sql("select * from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % (self.doc.company), as_dict=1) if pos: - val = sql("select name from `tabAccount` where name = %s and docstatus != 2", (cstr(self.doc.customer) + " - " + self.get_company_abbr())) + val = webnotes.conn.sql("select name from `tabAccount` where name = %s and docstatus != 2", (cstr(self.doc.customer) + " - " + self.get_company_abbr())) val = val and val[0][0] or '' if not val: val = pos and pos[0]['customer_account'] or '' if not self.doc.debit_to: - set(self.doc,'debit_to',val) + webnotes.conn.set(self.doc,'debit_to',val) lst = ['territory','naming_series','currency','charge','letter_head','tc_name','price_list_name','company','select_print_heading','cash_bank_account'] for i in lst: val = pos and pos[0][i] or '' - set(self.doc,i,val) + webnotes.conn.set(self.doc,i,val) self.set_pos_item_values() val = pos and flt(pos[0]['conversion_rate']) or 0 - set(self.doc,'conversion_rate',val) + webnotes.conn.set(self.doc,'conversion_rate',val) #fetch terms if self.doc.tc_name: self.get_tc_details() @@ -70,9 +67,9 @@ class DocType(TransactionBase): # -------------------------------------------------------------------------- def set_pos_item_values(self): if cint(self.doc.is_pos) ==1: - dtl = sql("select income_account, warehouse, cost_center from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (session['user'], self.doc.company), as_dict=1) + dtl = webnotes.conn.sql("select income_account, warehouse, cost_center from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (session['user'], self.doc.company), as_dict=1) if not dtl: - dtl = sql("select income_account, warehouse, cost_center from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % (self.doc.company), as_dict=1) + dtl = webnotes.conn.sql("select income_account, warehouse, cost_center from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % (self.doc.company), as_dict=1) for d in getlist(self.doclist,'entries'): if dtl and dtl[0]['income_account']: d.income_account = dtl[0]['income_account'] if dtl and dtl[0]['cost_center']: d.cost_center = dtl[0]['cost_center'] @@ -82,7 +79,7 @@ class DocType(TransactionBase): # Get Account Head to which amount needs to be Debited based on Customer # ---------------------------------------------------------------------- def get_customer_account(self): - acc_head = sql("select name from `tabAccount` where (name = %s or (master_name = %s and master_type = 'customer')) and docstatus != 2", (cstr(self.doc.customer) + " - " + self.get_company_abbr(),self.doc.customer)) + acc_head = webnotes.conn.sql("select name from `tabAccount` where (name = %s or (master_name = %s and master_type = 'customer')) and docstatus != 2", (cstr(self.doc.customer) + " - " + self.get_company_abbr(),self.doc.customer)) if acc_head and acc_head[0][0]: return acc_head[0][0] else: @@ -99,17 +96,17 @@ class DocType(TransactionBase): def get_cust_and_due_date(self): credit_days = 0 if self.doc.debit_to: - credit_days = sql("select credit_days from `tabAccount` where name='%s' and docstatus != 2" % self.doc.debit_to) + credit_days = webnotes.conn.sql("select credit_days from `tabAccount` where name='%s' and docstatus != 2" % self.doc.debit_to) credit_days = credit_days and cint(credit_days[0][0]) or 0 if self.doc.company and not credit_days: - credit_days = sql("select credit_days from `tabCompany` where name='%s'" % self.doc.company) + credit_days = webnotes.conn.sql("select credit_days from `tabCompany` where name='%s'" % self.doc.company) credit_days = credit_days and cint(credit_days[0][0]) or 0 # Customer has higher priority than company # i.e.if not entered in customer will take credit days from company self.doc.due_date = add_days(cstr(self.doc.posting_date), credit_days) if self.doc.debit_to: - self.doc.customer = get_value('Account',self.doc.debit_to,'master_name') + self.doc.customer = webnotes.conn.get_value('Account',self.doc.debit_to,'master_name') # get_obj('Sales Common').get_customer_details(self, inv_det_reqd = 0) @@ -144,7 +141,7 @@ class DocType(TransactionBase): def get_income_account(self,doctype): for d in getlist(self.doclist, doctype): if d.item_code: - item = sql("select default_income_account, default_sales_cost_center from tabItem where name = '%s'" %(d.item_code), as_dict=1) + item = webnotes.conn.sql("select default_income_account, default_sales_cost_center from tabItem where name = '%s'" %(d.item_code), as_dict=1) d.income_account = item and item[0]['default_income_account'] or '' d.cost_center = item and item[0]['default_sales_cost_center'] or '' @@ -153,14 +150,14 @@ class DocType(TransactionBase): def get_item_details(self, item_code): ret = get_obj('Sales Common').get_item_details(item_code, self) if item_code and cint(self.doc.is_pos) == 1: - dtl = sql("select income_account, warehouse, cost_center from `tabPOS Setting` where user = '%s' and company = '%s'" % (session['user'], self.doc.company), as_dict=1) + dtl = webnotes.conn.sql("select income_account, warehouse, cost_center from `tabPOS Setting` where user = '%s' and company = '%s'" % (session['user'], self.doc.company), as_dict=1) if not dtl: - dtl = sql("select income_account, warehouse, cost_center from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % (self.doc.company), as_dict=1) + dtl = webnotes.conn.sql("select income_account, warehouse, cost_center from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % (self.doc.company), as_dict=1) if dtl and dtl[0]['income_account']: ret['income_account'] = dtl and dtl[0]['income_account'] if dtl and dtl[0]['cost_center']: ret['cost_center'] = dtl and dtl[0]['cost_center'] if dtl and dtl[0]['warehouse']: ret['warehouse'] = dtl and dtl[0]['warehouse'] if ret['warehouse']: - actual_qty = sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (item_code, ret['warehouse'])) + actual_qty = webnotes.conn.sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (item_code, ret['warehouse'])) ret['actual_qty']= actual_qty and flt(actual_qty[0][0]) or 0 return ret @@ -205,7 +202,7 @@ class DocType(TransactionBase): #pull project customer #------------------------- def pull_project_customer(self): - res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name) + res = webnotes.conn.sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name) if res: get_obj('DocType Mapper', 'Project-Receivable Voucher').dt_map('Project', 'Receivable Voucher', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Receivable Voucher']]") @@ -214,7 +211,7 @@ class DocType(TransactionBase): # Get Company Abbr. # ------------------ def get_company_abbr(self): - return sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0] + return webnotes.conn.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0] # Check whether sales order / delivery note items already pulled @@ -267,7 +264,7 @@ class DocType(TransactionBase): dt = d.delivery_note and 'Delivery Note' or d.sales_order and 'Sales Order' or '' if dt: dt_no = d.delivery_note or d.sales_order - cust = sql("select customer from `tab%s` where name = %s" % (dt, '%s'), dt_no) + cust = webnotes.conn.sql("select customer from `tab%s` where name = %s" % (dt, '%s'), dt_no) if cust and cstr(cust[0][0]) != cstr(self.doc.customer): msgprint("Customer %s does not match with customer of %s: %s." %(self.doc.customer, dt, dt_no), raise_exception=1) @@ -276,7 +273,7 @@ class DocType(TransactionBase): # ------------------------------------------------ def validate_debit_to_acc(self): if self.doc.customer and not cint(self.doc.is_pos): - acc_head = sql("select name from `tabAccount` where name = %s and docstatus != 2", (cstr(self.doc.customer) + " - " + self.get_company_abbr())) + acc_head = webnotes.conn.sql("select name from `tabAccount` where name = %s and docstatus != 2", (cstr(self.doc.customer) + " - " + self.get_company_abbr())) if acc_head and acc_head[0][0]: if not cstr(acc_head[0][0]) == cstr(self.doc.debit_to): msgprint("Debit To %s do not match with Customer %s for Company %s i.e. %s" %(self.doc.debit_to,self.doc.customer,self.doc.company,cstr(acc_head[0][0]))) @@ -292,7 +289,7 @@ class DocType(TransactionBase): # 3. Is a PL Account # --------------------------- def validate_debit_acc(self): - acc = sql("select debit_or_credit, is_pl_account from tabAccount where name = '%s' and docstatus != 2" % self.doc.debit_to) + acc = webnotes.conn.sql("select debit_or_credit, is_pl_account from tabAccount where name = '%s' and docstatus != 2" % self.doc.debit_to) if not acc: msgprint("Account: "+ self.doc.debit_to + " does not exist") raise Exception @@ -308,8 +305,8 @@ class DocType(TransactionBase): # ----------------------------------------------------------------------- def validate_fixed_asset_account(self): for d in getlist(self.doclist,'entries'): - item = sql("select name,is_asset_item,is_sales_item from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life > now())"% d.item_code) - acc = sql("select account_type from `tabAccount` where name = '%s' and docstatus != 2" % d.income_account) + item = webnotes.conn.sql("select name,is_asset_item,is_sales_item from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life > now())"% d.item_code) + acc = webnotes.conn.sql("select account_type from `tabAccount` where name = '%s' and docstatus != 2" % d.income_account) if not acc: msgprint("Account: "+d.income_account+" does not exist in the system") raise Exception @@ -358,7 +355,7 @@ class DocType(TransactionBase): def so_dn_required(self): dict = {'Sales Order':'so_required','Delivery Note':'dn_required'} for i in dict: - res = sql("select value from `tabSingles` where doctype = 'Manage Account' and field = '%s'"%dict[i]) + res = webnotes.conn.sql("select value from `tabSingles` where doctype = 'Manage Account' and field = '%s'"%dict[i]) if res and res[0][0] == 'Yes': for d in getlist(self.doclist,'entries'): if not d.fields[i.lower().replace(' ','_')]: @@ -369,7 +366,7 @@ class DocType(TransactionBase): #------------------------------------------------------------------------------------------------- def validate_proj_cust(self): if self.doc.project_name and self.doc.customer: - res = sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer)) + res = webnotes.conn.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer)) if not res: msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in that project."%(self.doc.customer,self.doc.project_name)) raise Exception @@ -386,7 +383,7 @@ class DocType(TransactionBase): # ********* UPDATE CURRENT STOCK ***************************** def update_current_stock(self): for d in getlist(self.doclist, 'entries'): - bin = sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1) + bin = webnotes.conn.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1) d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0 def validate_item_code(self): @@ -405,10 +402,10 @@ class DocType(TransactionBase): def validate_c_form(self): """ Blank C-form no if C-form applicable marked as 'No'""" if self.doc.amended_from and self.doc.c_form_applicable == 'No' and self.doc.c_form_no: - sql("""delete from `tabC-Form Invoice Detail` where invoice_no = %s + webnotes.conn.sql("""delete from `tabC-Form Invoice Detail` where invoice_no = %s and parent = %s""", (self.doc.amended_from, self.doc.c_form_no)) - set(self.doc, 'c_form_no', '') + webnotes.conn.set(self.doc, 'c_form_no', '') # VALIDATE # ==================================================================================== @@ -453,13 +450,13 @@ class DocType(TransactionBase): def check_prev_docstatus(self): for d in getlist(self.doclist,'entries'): if d.sales_order: - submitted = sql("select name from `tabSales Order` where docstatus = 1 and name = '%s'" % d.sales_order) + submitted = webnotes.conn.sql("select name from `tabSales Order` where docstatus = 1 and name = '%s'" % d.sales_order) if not submitted: msgprint("Sales Order : "+ cstr(d.sales_order) +" is not submitted") raise Exception , "Validation Error." if d.delivery_note: - submitted = sql("select name from `tabDelivery Note` where docstatus = 1 and name = '%s'" % d.delivery_note) + submitted = webnotes.conn.sql("select name from `tabDelivery Note` where docstatus = 1 and name = '%s'" % d.delivery_note) if not submitted: msgprint("Delivery Note : "+ cstr(d.delivery_note) +" is not submitted") raise Exception , "Validation Error." @@ -469,17 +466,17 @@ class DocType(TransactionBase): def set_actual_qty(self): for d in getlist(self.doclist, 'delivery_note_details'): if d.item_code and d.warehouse: - actual_qty = sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse)) + actual_qty = webnotes.conn.sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse)) d.actual_qty = actual_qty and flt(actual_qty[0][0]) or 0 # Check qty in stock depends on item code and warehouse #------------------------------------------------------- def check_qty_in_stock(self): for d in getlist(self.doclist, 'entries'): - is_stock_item = sql("select is_stock_item from `tabItem` where name = '%s'" % d.item_code)[0][0] + is_stock_item = webnotes.conn.sql("select is_stock_item from `tabItem` where name = '%s'" % d.item_code)[0][0] actual_qty = 0 if d.item_code and d.warehouse: - actual_qty = sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse)) + actual_qty = webnotes.conn.sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse)) actual_qty = actual_qty and flt(actual_qty[0][0]) or 0 if is_stock_item == 'Yes' and flt(d.qty) > flt(actual_qty): @@ -490,7 +487,7 @@ class DocType(TransactionBase): # ********************** Make Stock Entry ************************************ def make_sl_entry(self, d, wh, qty, in_value, update_stock): - st_uom = sql("select stock_uom from `tabItem` where name = '%s'"%d.item_code) + st_uom = webnotes.conn.sql("select stock_uom from `tabItem` where name = '%s'"%d.item_code) self.values.append({ 'item_code' : d.item_code, 'warehouse' : wh, @@ -516,7 +513,7 @@ class DocType(TransactionBase): def update_stock_ledger(self, update_stock, clear = 0): self.values = [] for d in getlist(self.doclist, 'entries'): - stock_item = sql("SELECT is_stock_item, is_sample_item FROM tabItem where name = '%s'"%(d.item_code), as_dict = 1) # stock ledger will be updated only if it is a stock item + stock_item = webnotes.conn.sql("SELECT is_stock_item, is_sample_item FROM tabItem where name = '%s'"%(d.item_code), as_dict = 1) # stock ledger will be updated only if it is a stock item if stock_item[0]['is_stock_item'] == "Yes": # Reduce actual qty from warehouse self.make_sl_entry( d, d.warehouse, - flt(d.qty) , 0, update_stock) @@ -531,7 +528,7 @@ class DocType(TransactionBase): # ********** Get Actual Qty of item in warehouse selected ************* def get_actual_qty(self,args): args = eval(args) - actual_qty = sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (args['item_code'], args['warehouse']), as_dict=1) + actual_qty = webnotes.conn.sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (args['item_code'], args['warehouse']), as_dict=1) ret = { 'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0 } @@ -574,7 +571,7 @@ class DocType(TransactionBase): def update_c_form(self): """Update amended id in C-form""" if self.doc.c_form_no and self.doc.amended_from: - sql("""update `tabC-Form Invoice Detail` set invoice_no = %s, + webnotes.conn.sql("""update `tabC-Form Invoice Detail` set invoice_no = %s, invoice_date = %s, territory = %s, net_total = %s, grand_total = %s where invoice_no = %s and parent = %s""", (self.doc.name, self.doc.amended_from, self.doc.c_form_no)) @@ -584,7 +581,7 @@ class DocType(TransactionBase): # Check Next Document's docstatus # -------------------------------- def check_next_docstatus(self): - submit_jv = sql("select t1.name from `tabJournal Voucher` t1,`tabJournal Voucher Detail` t2 where t1.name = t2.parent and t2.against_invoice = '%s' and t1.docstatus = 1" % (self.doc.name)) + submit_jv = webnotes.conn.sql("select t1.name from `tabJournal Voucher` t1,`tabJournal Voucher Detail` t2 where t1.name = t2.parent and t2.against_invoice = '%s' and t1.docstatus = 1" % (self.doc.name)) if submit_jv: msgprint("Journal Voucher : " + cstr(submit_jv[0][0]) + " has been created against " + cstr(self.doc.doctype) + ". So " + cstr(self.doc.doctype) + " cannot be Cancelled.") raise Exception, "Validation Error." @@ -607,10 +604,10 @@ class DocType(TransactionBase): # Get Warehouse def get_warehouse(self): - w = sql("select warehouse from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (session['user'], self.doc.company)) + w = webnotes.conn.sql("select warehouse from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (session['user'], self.doc.company)) w = w and w[0][0] or '' if not w: - ps = sql("select name, warehouse from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % self.doc.company) + ps = webnotes.conn.sql("select name, warehouse from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % self.doc.company) if not ps: msgprint("To make POS entry, please create POS Setting from Setup --> Accounts --> POS Setting and refresh the system.") raise Exception @@ -633,12 +630,12 @@ class DocType(TransactionBase): d.warehouse = cstr(w) if flt(self.doc.paid_amount) == 0: - set(self.doc,'paid_amount',(flt(self.doc.grand_total) - flt(self.doc.write_off_amount))) + webnotes.conn.set(self.doc,'paid_amount',(flt(self.doc.grand_total) - flt(self.doc.write_off_amount))) else: - set(self.doc,'paid_amount',0) + webnotes.conn.set(self.doc,'paid_amount',0) - set(self.doc,'outstanding_amount',flt(self.doc.grand_total) - flt(self.doc.total_advance) - flt(self.doc.paid_amount) - flt(self.doc.write_off_amount)) + webnotes.conn.set(self.doc,'outstanding_amount',flt(self.doc.grand_total) - flt(self.doc.total_advance) - flt(self.doc.paid_amount) - flt(self.doc.write_off_amount)) ######################################################################## # Repair Outstanding @@ -656,9 +653,9 @@ class DocType(TransactionBase): if self.doc.convert_into_recurring_invoice: self.set_next_date() if not self.doc.recurring_id: - set(self.doc, 'recurring_id', make_autoname('RECINV/.#####')) + webnotes.conn.set(self.doc, 'recurring_id', make_autoname('RECINV/.#####')) elif self.doc.recurring_id: - sql("""update `tabReceivable Voucher` set convert_into_recurring_invoice = 0 where recurring_id = %s""", self.doc.recurring_id) + webnotes.conn.sql("""update `tabReceivable Voucher` set convert_into_recurring_invoice = 0 where recurring_id = %s""", self.doc.recurring_id) self.manage_scheduler() @@ -666,7 +663,7 @@ class DocType(TransactionBase): """ set/cancel event in scheduler """ event = 'accounts.doctype.gl_control.gl_control.manage_recurring_invoices' - if sql("select name from `tabReceivable Voucher` where ifnull(convert_into_recurring_invoice, 0) = 1 and next_date <= end_date"): + if webnotes.conn.sql("select name from `tabReceivable Voucher` where ifnull(convert_into_recurring_invoice, 0) = 1 and next_date <= end_date"): if not self.check_event_exists(event): set_event(event, interval = 60*60, recurring = 1) else: @@ -703,4 +700,4 @@ class DocType(TransactionBase): next_date = datetime.date(y, m, last_day) next_date = next_date.strftime("%Y-%m-%d") - set(self.doc, 'next_date', next_date) + webnotes.conn.set(self.doc, 'next_date', next_date) diff --git a/erpnext/selling/doctype/sales_common/sales_common.py b/erpnext/selling/doctype/sales_common/sales_common.py index b2b0c14148..0c3d85807e 100644 --- a/erpnext/selling/doctype/sales_common/sales_common.py +++ b/erpnext/selling/doctype/sales_common/sales_common.py @@ -8,7 +8,6 @@ from webnotes.model.doclist import getlist, copy_doclist from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax from webnotes import session, form, is_testing, msgprint, errprint -sql = webnotes.conn.sql get_value = webnotes.conn.get_value in_transaction = webnotes.conn.in_transaction convert_to_lists = webnotes.conn.convert_to_lists @@ -44,7 +43,7 @@ class DocType(TransactionBase): if obj.doc.doctype != 'Quotation': obj.doc.clear_table(obj.doclist,'sales_team') idx = 0 - for d in sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % obj.doc.customer): + for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % obj.doc.customer): ch = addchild(obj.doc, 'sales_team', 'Sales Team', 1, obj.doclist) ch.sales_person = d and cstr(d[0]) or '' ch.allocated_percentage = d and flt(d[1]) or 0 @@ -59,7 +58,7 @@ class DocType(TransactionBase): def get_contact_details(self, obj = '', primary = 0): cond = " and contact_name = '"+cstr(obj.doc.contact_person)+"'" if primary: cond = " and is_primary_contact = 'Yes'" - contact = sql("select contact_name, contact_no, email_id, contact_address from `tabContact` where customer = '%s' and docstatus != 2 %s" %(obj.doc.customer, cond), as_dict = 1) + contact = webnotes.conn.sql("select contact_name, contact_no, email_id, contact_address from `tabContact` where customer = '%s' and docstatus != 2 %s" %(obj.doc.customer, cond), as_dict = 1) if not contact: return c = contact[0] @@ -74,7 +73,7 @@ class DocType(TransactionBase): # Get customer's primary shipping details # ============================================================== def get_shipping_details(self, obj = ''): - det = sql("select name, ship_to, shipping_address from `tabShipping Address` where customer = '%s' and docstatus != 2 and ifnull(is_primary_address, 'Yes') = 'Yes'" %(obj.doc.customer), as_dict = 1) + det = webnotes.conn.sql("select name, ship_to, shipping_address from `tabShipping Address` where customer = '%s' and docstatus != 2 and ifnull(is_primary_address, 'Yes') = 'Yes'" %(obj.doc.customer), as_dict = 1) obj.doc.ship_det_no = det and det[0]['name'] or '' obj.doc.ship_to = det and det[0]['ship_to'] or '' obj.doc.shipping_address = det and det[0]['shipping_address'] or '' @@ -84,14 +83,14 @@ class DocType(TransactionBase): # ==================== def get_invoice_details(self, obj = ''): if obj.doc.company: - acc_head = sql("select name from `tabAccount` where name = '%s' and docstatus != 2" % (cstr(obj.doc.customer) + " - " + get_value('Company', obj.doc.company, 'abbr'))) + acc_head = webnotes.conn.sql("select name from `tabAccount` where name = '%s' and docstatus != 2" % (cstr(obj.doc.customer) + " - " + get_value('Company', obj.doc.company, 'abbr'))) obj.doc.debit_to = acc_head and acc_head[0][0] or '' # Get Customer Details along with its primary contact details # ============================================================== def get_customer_details(self, obj = '', inv_det_reqd = 1): - details = sql("select customer_name,address, territory, customer_group, default_sales_partner, default_commission_rate from `tabCustomer` where name = '%s' and docstatus != 2" %(obj.doc.customer), as_dict = 1) + details = webnotes.conn.sql("select customer_name,address, territory, customer_group, default_sales_partner, default_commission_rate from `tabCustomer` where name = '%s' and docstatus != 2" %(obj.doc.customer), as_dict = 1) obj.doc.customer_name = details and details[0]['customer_name'] or '' obj.doc.customer_address = details and details[0]['address'] or '' obj.doc.territory = details and details[0]['territory'] or '' @@ -113,8 +112,8 @@ class DocType(TransactionBase): if not obj.doc.price_list_name: msgprint("Please Select Price List before selecting Items") raise Exception - item = sql("select description, item_name, brand, item_group, stock_uom, default_warehouse, default_income_account, default_sales_cost_center, description_html from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life > now() or end_of_life = '0000-00-00') and (is_sales_item = 'Yes' or is_service_item = 'Yes')" %(item_code), as_dict=1) - tax = sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , item_code) + item = webnotes.conn.sql("select description, item_name, brand, item_group, stock_uom, default_warehouse, default_income_account, default_sales_cost_center, description_html from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life > now() or end_of_life = '0000-00-00') and (is_sales_item = 'Yes' or is_service_item = 'Yes')" %(item_code), as_dict=1) + tax = webnotes.conn.sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , item_code) t = {} for x in tax: t[x[0]] = flt(x[1]) ret = { @@ -145,7 +144,7 @@ class DocType(TransactionBase): # ***************** Get Ref rate as entered in Item Master ******************** def get_ref_rate(self, item_code, price_list_name, price_list_currency, plc_conv_rate): - ref_rate = sql("select ref_rate from `tabRef Rate Detail` where parent = %s and price_list_name = %s and ref_currency = %s", (item_code, price_list_name, price_list_currency)) + ref_rate = webnotes.conn.sql("select ref_rate from `tabRef Rate Detail` where parent = %s and price_list_name = %s and ref_currency = %s", (item_code, price_list_name, price_list_currency)) base_ref_rate = ref_rate and flt(ref_rate[0][0]) * flt(plc_conv_rate) or 0 return base_ref_rate @@ -175,7 +174,7 @@ class DocType(TransactionBase): if default: add_cond = 'ifnull(t2.is_default,0) = 1' else: add_cond = 't1.parent = "'+cstr(obj.doc.charge)+'"' idx = 0 - other_charge = sql("select t1.charge_type,t1.row_id,t1.description,t1.account_head,t1.rate,t1.tax_amount,t1.included_in_print_rate from `tabRV Tax Detail` t1, `tabOther Charges` t2 where t1.parent = t2.name and t2.company = '%s' and %s order by t1.idx" % (obj.doc.company, add_cond), as_dict = 1) + other_charge = webnotes.conn.sql("select t1.charge_type,t1.row_id,t1.description,t1.account_head,t1.rate,t1.tax_amount,t1.included_in_print_rate from `tabRV Tax Detail` t1, `tabOther Charges` t2 where t1.parent = t2.name and t2.company = '%s' and %s order by t1.idx" % (obj.doc.company, add_cond), as_dict = 1) for other in other_charge: d = addchild(obj.doc, 'other_charges', 'RV Tax Detail', 1, obj.doclist) d.charge_type = other['charge_type'] @@ -192,12 +191,12 @@ class DocType(TransactionBase): # Get TERMS AND CONDITIONS # ======================================================================================= def get_tc_details(self,obj): - r = sql("select terms from `tabTerm` where name = %s", obj.doc.tc_name) + r = webnotes.conn.sql("select terms from `tabTerm` where name = %s", obj.doc.tc_name) if r: obj.doc.terms = r[0][0] #---------------------------------------- Get Tax Details -------------------------------# def get_tax_details(self, item_code, obj): - tax = sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , item_code) + tax = webnotes.conn.sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , item_code) t = {} for x in tax: t[x[0]] = flt(x[1]) ret = { @@ -208,8 +207,8 @@ class DocType(TransactionBase): # Get Serial No Details # ========================================================================== def get_serial_details(self, serial_no, obj): - item = sql("select item_code, make, label,brand, description from `tabSerial No` where name = '%s' and docstatus != 2" %(serial_no), as_dict=1) - tax = sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , item[0]['item_code']) + item = webnotes.conn.sql("select item_code, make, label,brand, description from `tabSerial No` where name = '%s' and docstatus != 2" %(serial_no), as_dict=1) + tax = webnotes.conn.sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , item[0]['item_code']) t = {} for x in tax: t[x[0]] = flt(x[1]) ret = { @@ -226,7 +225,7 @@ class DocType(TransactionBase): # ======================================================================= def get_comm_rate(self, sales_partner, obj): - comm_rate = sql("select commission_rate from `tabSales Partner` where name = '%s' and docstatus != 2" %(sales_partner), as_dict=1) + comm_rate = webnotes.conn.sql("select commission_rate from `tabSales Partner` where name = '%s' and docstatus != 2" %(sales_partner), as_dict=1) if comm_rate: total_comm = flt(comm_rate[0]['commission_rate']) * flt(obj.doc.net_total) / 100 ret = { @@ -243,7 +242,7 @@ class DocType(TransactionBase): # ======================================================================================= def validate_max_discount(self,obj, detail_table): for d in getlist(obj.doclist, detail_table): - discount = sql("select max_discount from tabItem where name = '%s'" %(d.item_code),as_dict = 1) + discount = webnotes.conn.sql("select max_discount from tabItem where name = '%s'" %(d.item_code),as_dict = 1) if discount and discount[0]['max_discount'] and (flt(d.adj_rate)>flt(discount[0]['max_discount'])): msgprint("You cannot give more than " + cstr(discount[0]['max_discount']) + " % discount on Item Code : "+cstr(d.item_code)) raise Exception @@ -279,7 +278,7 @@ class DocType(TransactionBase): # ========================================================================= def get_rate(self, arg): arg = eval(arg) - rate = sql("select account_type, tax_rate from `tabAccount` where name = '%s' and docstatus != 2" %(arg['account_head']), as_dict=1) + rate = webnotes.conn.sql("select account_type, tax_rate from `tabAccount` where name = '%s' and docstatus != 2" %(arg['account_head']), as_dict=1) ret = {'rate' : 0} if arg['charge_type'] == 'Actual' and rate[0]['account_type'] == 'Tax': msgprint("You cannot select ACCOUNT HEAD of type TAX as your CHARGE TYPE is 'ACTUAL'") @@ -296,10 +295,10 @@ class DocType(TransactionBase): # Make Packing List from Sales BOM # ======================================================================= def has_sales_bom(self, item_code): - return sql("select name from `tabSales BOM` where name=%s and docstatus != 2", item_code) + return webnotes.conn.sql("select name from `tabSales BOM` where name=%s and docstatus != 2", item_code) def get_sales_bom_items(self, item_code): - return sql("select item_code, qty, uom from `tabSales BOM Detail` where parent=%s", item_code) + return webnotes.conn.sql("select item_code, qty, uom from `tabSales BOM Detail` where parent=%s", item_code) # -------------- @@ -339,14 +338,14 @@ class DocType(TransactionBase): def get_curr_and_ref_doc_details(self, curr_doctype, ref_tab_fname, ref_tab_dn, ref_doc_tname, curr_parent_name, curr_parent_doctype): # Get total qty, amt of current doctype (eg RV) except for qty, amt of this transaction if curr_parent_doctype == 'Installation Note': - curr_det = sql("select sum(qty) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name)) + curr_det = webnotes.conn.sql("select sum(qty) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name)) qty, amt = curr_det and flt(curr_det[0][0]) or 0, 0 else: - curr_det = sql("select sum(qty), sum(amount) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name)) + curr_det = webnotes.conn.sql("select sum(qty), sum(amount) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name)) qty, amt = curr_det and flt(curr_det[0][0]) or 0, curr_det and flt(curr_det[0][1]) or 0 # get total qty of ref doctype - ref_det = sql("select qty, amount from `tab%s` where name = '%s' and docstatus = 1"% (ref_doc_tname, ref_tab_dn)) + ref_det = webnotes.conn.sql("select qty, amount from `tab%s` where name = '%s' and docstatus = 1"% (ref_doc_tname, ref_tab_dn)) max_qty, max_amt = ref_det and flt(ref_det[0][0]) or 0, ref_det and flt(ref_det[0][1]) or 0 return qty, max_qty, amt, max_amt @@ -359,10 +358,10 @@ class DocType(TransactionBase): # add packing list items # ----------------------- def get_packing_item_details(self, item): - return sql("select item_name, description, stock_uom from `tabItem` where name = %s", item, as_dict = 1)[0] + return webnotes.conn.sql("select item_name, description, stock_uom from `tabItem` where name = %s", item, as_dict = 1)[0] def get_bin_qty(self, item, warehouse): - det = sql("select actual_qty, projected_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (item, warehouse), as_dict = 1) + det = webnotes.conn.sql("select actual_qty, projected_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (item, warehouse), as_dict = 1) return det and det[0] or '' def add_packing_list_item(self,obj, item_code, qty, warehouse, line): @@ -424,7 +423,7 @@ class DocType(TransactionBase): elif d.fields.has_key('sales_order') and d.sales_order and not d.delivery_note: ref_doc_name = d.sales_order if ref_doc_name: - so_status = sql("select status from `tabSales Order` where name = %s",ref_doc_name) + so_status = webnotes.conn.sql("select status from `tabSales Order` where name = %s",ref_doc_name) so_status = so_status and so_status[0][0] or '' if so_status == 'Stopped': msgprint("You cannot do any transaction against Sales Order : '%s' as it is Stopped." %(ref_doc_name)) @@ -435,7 +434,7 @@ class DocType(TransactionBase): def check_active_sales_items(self,obj): for d in getlist(obj.doclist, obj.fname): if d.item_code: # extra condn coz item_code is not mandatory in RV - valid_item = sql("select docstatus,is_sales_item, is_service_item from tabItem where name = %s",d.item_code) + valid_item = webnotes.conn.sql("select docstatus,is_sales_item, is_service_item from tabItem where name = %s",d.item_code) if valid_item and valid_item[0][0] == 2: msgprint("Item : '%s' does not exist in system." %(d.item_code)) raise Exception @@ -449,10 +448,10 @@ class DocType(TransactionBase): # ************************************************************************************************************************************************** def check_credit(self,obj,grand_total): - acc_head = sql("select name from `tabAccount` where company = '%s' and master_name = '%s'"%(obj.doc.company, obj.doc.customer)) + acc_head = webnotes.conn.sql("select name from `tabAccount` where company = '%s' and master_name = '%s'"%(obj.doc.company, obj.doc.customer)) if acc_head: tot_outstanding = 0 - dbcr = sql("select sum(debit), sum(credit) from `tabGL Entry` where account = '%s' and ifnull(is_cancelled, 'No')='No'" % acc_head[0][0]) + dbcr = webnotes.conn.sql("select sum(debit), sum(credit) from `tabGL Entry` where account = '%s' and ifnull(is_cancelled, 'No')='No'" % acc_head[0][0]) if dbcr: tot_outstanding = flt(dbcr[0][0])-flt(dbcr[0][1]) @@ -460,7 +459,7 @@ class DocType(TransactionBase): get_obj('Account',acc_head[0][0]).check_credit_limit(acc_head[0][0], obj.doc.company, exact_outstanding) def validate_fiscal_year(self,fiscal_year,transaction_date,dn): - fy=sql("select year_start_date from `tabFiscal Year` where name='%s'"%fiscal_year) + fy=webnotes.conn.sql("select year_start_date from `tabFiscal Year` where name='%s'"%fiscal_year) ysd=fy and fy[0][0] or "" yed=add_days(str(ysd),365) if str(transaction_date) < str(ysd) or str(transaction_date) > str(yed): @@ -475,9 +474,9 @@ class DocType(TransactionBase): for d in getlist(obj.doclist, obj.fname): if d.prevdoc_doctype and d.prevdoc_docname: if d.prevdoc_doctype == 'Receivable Voucher': - dt = sql("select posting_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname)) + dt = webnotes.conn.sql("select posting_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname)) else: - dt = sql("select transaction_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname)) + dt = webnotes.conn.sql("select transaction_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname)) d.prevdoc_date = dt and dt[0][0].strftime('%Y-%m-%d') or '' def update_prevdoc_detail(self, is_submit, obj): @@ -607,7 +606,7 @@ class StatusUpdater: args['name'] = d.fields[args['join_field']] # get all qty where qty > compare_field - item = sql(""" + item = webnotes.conn.sql(""" select item_code, `%(compare_ref_field)s`, `%(compare_field)s`, parenttype, parent from `tab%(target_dt)s` where `%(compare_ref_field)s` < `%(compare_field)s` and name="%(name)s" and docstatus=1 """ % args, as_dict=1) @@ -712,7 +711,7 @@ class StatusUpdater: args['detail_id'] = d.fields.get(args['join_field']) if args['detail_id']: - sql(""" + webnotes.conn.sql(""" update `tab%(target_dt)s` set @@ -727,7 +726,7 @@ class StatusUpdater: args['name'] = name # update percent complete in the parent table - sql(""" + webnotes.conn.sql(""" update `tab%(target_parent_dt)s` set @@ -740,7 +739,7 @@ class StatusUpdater: # update field if args['status_field']: - sql(""" + webnotes.conn.sql(""" update `tab%(target_parent_dt)s` set diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index 8f165d2397..7979036171 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -4,8 +4,6 @@ from webnotes.model.doc import Document, addchild, removechild, getchildren from webnotes.model.doclist import getlist, copy_doclist from webnotes import msgprint -sql = webnotes.conn.sql - class TransactionBase: # Get Customer Default Primary Address - first load @@ -66,9 +64,9 @@ class TransactionBase: cond = 'name="%s"' % address_name if is_shipping_address: - details = sql("select name, address_line1, address_line2, city, country, pincode, state, phone from `tabAddress` where %s and docstatus != 2 order by is_shipping_address desc limit 1" % cond, as_dict = 1) + details = webnotes.conn.sql("select name, address_line1, address_line2, city, country, pincode, state, phone from `tabAddress` where %s and docstatus != 2 order by is_shipping_address desc limit 1" % cond, as_dict = 1) else: - details = sql("select name, address_line1, address_line2, city, country, pincode, state, phone from `tabAddress` where %s and docstatus != 2 order by is_primary_address desc limit 1" % cond, as_dict = 1) + details = webnotes.conn.sql("select name, address_line1, address_line2, city, country, pincode, state, phone from `tabAddress` where %s and docstatus != 2 order by is_primary_address desc limit 1" % cond, as_dict = 1) extract = lambda x: details and details[0] and details[0].get(x,'') or '' address_fields = [('','address_line1'),('\n','address_line2'),('\n','city'),(' ','pincode'),('\n','state'),('\n','country'),('\nPhone: ','phone')] @@ -88,7 +86,7 @@ class TransactionBase: else: cond = 'name="%s"' % contact_name - details = sql("select name, first_name, last_name, email_id, phone, mobile_no, department, designation from `tabContact` where %s and docstatus != 2 order by is_primary_contact desc limit 1" % cond, as_dict = 1) + details = webnotes.conn.sql("select name, first_name, last_name, email_id, phone, mobile_no, department, designation from `tabContact` where %s and docstatus != 2 order by is_primary_contact desc limit 1" % cond, as_dict = 1) extract = lambda x: details and details[0] and details[0].get(x,'') or '' contact_fields = [('','first_name'),(' ','last_name')] @@ -103,7 +101,7 @@ class TransactionBase: # Get Customer Details # ----------------------- def get_customer_details(self, name): - customer_details = sql("select customer_name, customer_group, territory, default_sales_partner, default_commission_rate from tabCustomer where name = '%s' and docstatus != 2" %(name), as_dict = 1) + customer_details = webnotes.conn.sql("select customer_name, customer_group, territory, default_sales_partner, default_commission_rate from tabCustomer where name = '%s' and docstatus != 2" %(name), as_dict = 1) if customer_details: self.doc.customer_name = customer_details[0]['customer_name'] or '' self.doc.customer_group = customer_details[0]['customer_group'] or '' @@ -114,7 +112,7 @@ class TransactionBase: # Get Customer Shipping Address # ----------------------- def get_shipping_address(self, name): - details = sql("select name, address_line1, address_line2, city, country, pincode, state, phone from `tabAddress` where customer = '%s' and docstatus != 2 order by is_shipping_address desc limit 1" %(name), as_dict = 1) + details = webnotes.conn.sql("select name, address_line1, address_line2, city, country, pincode, state, phone from `tabAddress` where customer = '%s' and docstatus != 2 order by is_shipping_address desc limit 1" %(name), as_dict = 1) extract = lambda x: details and details[0] and details[0].get(x,'') or '' address_fields = [('','address_line1'),('\n','address_line2'),('\n','city'),(' ','pincode'),('\n','state'),('\n','country'),('\nPhone: ','phone')] @@ -130,7 +128,7 @@ class TransactionBase: # Get Lead Details # ----------------------- def get_lead_details(self, name): - details = sql("select name, lead_name, address_line1, address_line2, city, country, state, pincode, territory, contact_no, mobile_no, email_id from `tabLead` where name = '%s'" %(name), as_dict = 1) + details = webnotes.conn.sql("select name, lead_name, address_line1, address_line2, city, country, state, pincode, territory, contact_no, mobile_no, email_id from `tabLead` where name = '%s'" %(name), as_dict = 1) extract = lambda x: details and details[0] and details[0].get(x,'') or '' address_fields = [('','address_line1'),('\n','address_line2'),('\n','city'),(' ','pincode'),('\n','state'),('\n','country'),('\nPhone: ','contact_no')] @@ -183,7 +181,7 @@ class TransactionBase: # Get Supplier Details # ----------------------- def get_supplier_details(self, name): - supplier_details = sql("select supplier_name from tabSupplier where name = '%s' and docstatus != 2" %(name), as_dict = 1) + supplier_details = webnotes.conn.sql("select supplier_name from tabSupplier where name = '%s' and docstatus != 2" %(name), as_dict = 1) ret = { 'supplier_name' : supplier_details and supplier_details[0]['supplier_name'] or '' } @@ -194,7 +192,7 @@ class TransactionBase: def get_sales_person(self, name): self.doc.clear_table(self.doclist,'sales_team') idx = 0 - for d in sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name): + for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name): ch = addchild(self.doc, 'sales_team', 'Sales Team', 1, self.doclist) ch.sales_person = d and cstr(d[0]) or '' ch.allocated_percentage = d and flt(d[1]) or 0 @@ -206,6 +204,6 @@ class TransactionBase: # Get Company Specific Default Currency # ------------------------------------- def get_company_currency(self, name): - ret = sql("select default_currency from tabCompany where name = '%s'" %(name)) + ret = webnotes.conn.sql("select default_currency from tabCompany where name = '%s'" %(name)) dcc = ret and ret[0][0] or get_defaults()['currency'] return dcc