mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-01 11:19:09 +00:00
Changed frappe.conn to frappe.db
This commit is contained in:
@@ -16,7 +16,7 @@ class DocType:
|
||||
|
||||
def validate(self):
|
||||
if self.doc.fields.get("__islocal") or not self.doc.stock_uom:
|
||||
self.doc.stock_uom = frappe.conn.get_value('Item', self.doc.item_code, 'stock_uom')
|
||||
self.doc.stock_uom = frappe.db.get_value('Item', self.doc.item_code, 'stock_uom')
|
||||
|
||||
self.validate_mandatory()
|
||||
|
||||
@@ -60,7 +60,7 @@ class DocType:
|
||||
self.doc.save()
|
||||
|
||||
def get_first_sle(self):
|
||||
sle = frappe.conn.sql("""
|
||||
sle = frappe.db.sql("""
|
||||
select * from `tabStock Ledger Entry`
|
||||
where item_code = %s
|
||||
and warehouse = %s
|
||||
|
||||
@@ -34,7 +34,7 @@ class DocType(SellingController):
|
||||
}]
|
||||
|
||||
def onload(self):
|
||||
billed_qty = frappe.conn.sql("""select sum(ifnull(qty, 0)) from `tabSales Invoice Item`
|
||||
billed_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Invoice Item`
|
||||
where docstatus=1 and delivery_note=%s""", self.doc.name)
|
||||
if billed_qty:
|
||||
total_qty = sum((item.qty for item in self.doclist.get({"parentfield": "delivery_note_details"})))
|
||||
@@ -46,12 +46,12 @@ class DocType(SellingController):
|
||||
def set_actual_qty(self):
|
||||
for d in getlist(self.doclist, 'delivery_note_details'):
|
||||
if d.item_code and d.warehouse:
|
||||
actual_qty = frappe.conn.sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse))
|
||||
actual_qty = frappe.db.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
|
||||
|
||||
def so_required(self):
|
||||
"""check in manage account if sales order required or not"""
|
||||
if frappe.conn.get_value("Selling Settings", None, 'so_required') == 'Yes':
|
||||
if frappe.db.get_value("Selling Settings", None, 'so_required') == 'Yes':
|
||||
for d in getlist(self.doclist,'delivery_note_details'):
|
||||
if not d.against_sales_order:
|
||||
msgprint("Sales Order No. required against item %s"%d.item_code)
|
||||
@@ -104,7 +104,7 @@ class DocType(SellingController):
|
||||
def validate_proj_cust(self):
|
||||
"""check for does customer belong to same project as entered.."""
|
||||
if self.doc.project_name and self.doc.customer:
|
||||
res = frappe.conn.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
|
||||
res = frappe.db.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 project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
|
||||
raise Exception
|
||||
@@ -115,7 +115,7 @@ class DocType(SellingController):
|
||||
e = [d.item_code, d.description, d.warehouse, d.against_sales_order or d.against_sales_invoice, d.batch_no or '']
|
||||
f = [d.item_code, d.description, d.against_sales_order or d.against_sales_invoice]
|
||||
|
||||
if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == 'Yes':
|
||||
if frappe.db.get_value("Item", d.item_code, "is_stock_item") == 'Yes':
|
||||
if e in check_list:
|
||||
msgprint("Please check whether item %s has been entered twice wrongly."
|
||||
% d.item_code)
|
||||
@@ -130,7 +130,7 @@ class DocType(SellingController):
|
||||
|
||||
def validate_warehouse(self):
|
||||
for d in self.get_item_list():
|
||||
if frappe.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
|
||||
if frappe.db.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
|
||||
if not d['warehouse']:
|
||||
msgprint("Please enter Warehouse for item %s as it is stock item"
|
||||
% d['item_code'], raise_exception=1)
|
||||
@@ -138,11 +138,11 @@ class DocType(SellingController):
|
||||
|
||||
def update_current_stock(self):
|
||||
for d in getlist(self.doclist, 'delivery_note_details'):
|
||||
bin = frappe.conn.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
|
||||
bin = frappe.db.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
|
||||
|
||||
for d in getlist(self.doclist, 'packing_details'):
|
||||
bin = frappe.conn.sql("select actual_qty, projected_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
|
||||
bin = frappe.db.sql("select actual_qty, projected_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
|
||||
d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
|
||||
|
||||
@@ -163,7 +163,7 @@ class DocType(SellingController):
|
||||
self.make_gl_entries()
|
||||
|
||||
# set DN status
|
||||
frappe.conn.set(self.doc, 'status', 'Submitted')
|
||||
frappe.db.set(self.doc, 'status', 'Submitted')
|
||||
|
||||
|
||||
def on_cancel(self):
|
||||
@@ -174,7 +174,7 @@ class DocType(SellingController):
|
||||
|
||||
self.update_stock_ledger()
|
||||
|
||||
frappe.conn.set(self.doc, 'status', 'Cancelled')
|
||||
frappe.db.set(self.doc, 'status', 'Cancelled')
|
||||
self.cancel_packing_slips()
|
||||
|
||||
self.make_cancel_gl_entries()
|
||||
@@ -201,12 +201,12 @@ class DocType(SellingController):
|
||||
frappe.msgprint("Packing Error:\n" + err_msg, raise_exception=1)
|
||||
|
||||
def check_next_docstatus(self):
|
||||
submit_rv = frappe.conn.sql("select t1.name from `tabSales Invoice` t1,`tabSales Invoice Item` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
|
||||
submit_rv = frappe.db.sql("select t1.name from `tabSales Invoice` t1,`tabSales Invoice Item` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
|
||||
if submit_rv:
|
||||
msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !")
|
||||
raise Exception , "Validation Error."
|
||||
|
||||
submit_in = frappe.conn.sql("select t1.name from `tabInstallation Note` t1, `tabInstallation Note Item` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
|
||||
submit_in = frappe.db.sql("select t1.name from `tabInstallation Note` t1, `tabInstallation Note Item` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
|
||||
if submit_in:
|
||||
msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !")
|
||||
raise Exception , "Validation Error."
|
||||
@@ -215,7 +215,7 @@ class DocType(SellingController):
|
||||
"""
|
||||
Cancel submitted packing slips related to this delivery note
|
||||
"""
|
||||
res = frappe.conn.sql("""SELECT name FROM `tabPacking Slip` WHERE delivery_note = %s
|
||||
res = frappe.db.sql("""SELECT name FROM `tabPacking Slip` WHERE delivery_note = %s
|
||||
AND docstatus = 1""", self.doc.name)
|
||||
|
||||
if res:
|
||||
@@ -229,7 +229,7 @@ class DocType(SellingController):
|
||||
def update_stock_ledger(self):
|
||||
sl_entries = []
|
||||
for d in self.get_item_list():
|
||||
if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes" \
|
||||
if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes" \
|
||||
and d.warehouse:
|
||||
self.update_reserved_qty(d)
|
||||
|
||||
@@ -270,7 +270,7 @@ def get_invoiced_qty_map(delivery_note):
|
||||
"""returns a map: {dn_detail: invoiced_qty}"""
|
||||
invoiced_qty_map = {}
|
||||
|
||||
for dn_detail, qty in frappe.conn.sql("""select dn_detail, qty from `tabSales Invoice Item`
|
||||
for dn_detail, qty in frappe.db.sql("""select dn_detail, qty from `tabSales Invoice Item`
|
||||
where delivery_note=%s and docstatus=1""", delivery_note):
|
||||
if not invoiced_qty_map.get(dn_detail):
|
||||
invoiced_qty_map[dn_detail] = 0
|
||||
|
||||
@@ -52,7 +52,7 @@ class TestDeliveryNote(unittest.TestCase):
|
||||
dn.insert()
|
||||
dn.submit()
|
||||
|
||||
stock_value, stock_value_difference = frappe.conn.get_value("Stock Ledger Entry",
|
||||
stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
|
||||
{"voucher_type": "Delivery Note", "voucher_no": dn.doc.name,
|
||||
"item_code": "_Test Item"}, ["stock_value", "stock_value_difference"])
|
||||
self.assertEqual(stock_value, 0)
|
||||
@@ -64,7 +64,7 @@ class TestDeliveryNote(unittest.TestCase):
|
||||
self.clear_stock_account_balance()
|
||||
set_perpetual_inventory()
|
||||
self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
|
||||
frappe.conn.set_value("Item", "_Test Item", "valuation_method", "FIFO")
|
||||
frappe.db.set_value("Item", "_Test Item", "valuation_method", "FIFO")
|
||||
|
||||
_insert_purchase_receipt()
|
||||
|
||||
@@ -72,7 +72,7 @@ class TestDeliveryNote(unittest.TestCase):
|
||||
dn.doclist[1].expense_account = "Cost of Goods Sold - _TC"
|
||||
dn.doclist[1].cost_center = "Main - _TC"
|
||||
|
||||
stock_in_hand_account = frappe.conn.get_value("Account",
|
||||
stock_in_hand_account = frappe.db.get_value("Account",
|
||||
{"master_name": dn.doclist[1].warehouse})
|
||||
|
||||
from erpnext.accounts.utils import get_balance_on
|
||||
@@ -127,7 +127,7 @@ class TestDeliveryNote(unittest.TestCase):
|
||||
dn.doclist[1].item_code = "_Test Sales BOM Item"
|
||||
dn.doclist[1].qty = 1
|
||||
|
||||
stock_in_hand_account = frappe.conn.get_value("Account",
|
||||
stock_in_hand_account = frappe.db.get_value("Account",
|
||||
{"master_name": dn.doclist[1].warehouse})
|
||||
|
||||
from erpnext.accounts.utils import get_balance_on
|
||||
@@ -169,9 +169,9 @@ class TestDeliveryNote(unittest.TestCase):
|
||||
dn.insert()
|
||||
dn.submit()
|
||||
|
||||
self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "status"), "Delivered")
|
||||
self.assertFalse(frappe.conn.get_value("Serial No", serial_nos[0], "warehouse"))
|
||||
self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0],
|
||||
self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Delivered")
|
||||
self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
|
||||
self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0],
|
||||
"delivery_document_no"), dn.doc.name)
|
||||
|
||||
return dn
|
||||
@@ -183,9 +183,9 @@ class TestDeliveryNote(unittest.TestCase):
|
||||
|
||||
serial_nos = get_serial_nos(dn.doclist[1].serial_no)
|
||||
|
||||
self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "status"), "Available")
|
||||
self.assertEquals(frappe.conn.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
|
||||
self.assertFalse(frappe.conn.get_value("Serial No", serial_nos[0],
|
||||
self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Available")
|
||||
self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
|
||||
self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0],
|
||||
"delivery_document_no"))
|
||||
|
||||
def test_serialize_status(self):
|
||||
@@ -208,9 +208,9 @@ class TestDeliveryNote(unittest.TestCase):
|
||||
self.assertRaises(SerialNoStatusError, dn.submit)
|
||||
|
||||
def clear_stock_account_balance(self):
|
||||
frappe.conn.sql("""delete from `tabBin`""")
|
||||
frappe.conn.sql("delete from `tabStock Ledger Entry`")
|
||||
frappe.conn.sql("delete from `tabGL Entry`")
|
||||
frappe.db.sql("""delete from `tabBin`""")
|
||||
frappe.db.sql("delete from `tabStock Ledger Entry`")
|
||||
frappe.db.sql("delete from `tabGL Entry`")
|
||||
|
||||
test_dependencies = ["Sales BOM"]
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class DocType(DocListController):
|
||||
self.doc.fields["__sle_exists"] = self.check_if_sle_exists()
|
||||
|
||||
def autoname(self):
|
||||
if frappe.conn.get_default("item_naming_by")=="Naming Series":
|
||||
if frappe.db.get_default("item_naming_by")=="Naming Series":
|
||||
from frappe.model.doc import make_autoname
|
||||
self.doc.item_code = make_autoname(self.doc.naming_series+'.#####')
|
||||
elif not self.doc.item_code:
|
||||
@@ -46,7 +46,7 @@ class DocType(DocListController):
|
||||
self.doc.parent_website_route = frappe.get_website_route("Item Group", self.doc.item_group)
|
||||
|
||||
if self.doc.name:
|
||||
self.old_page_name = frappe.conn.get_value('Item', self.doc.name, 'page_name')
|
||||
self.old_page_name = frappe.db.get_value('Item', self.doc.name, 'page_name')
|
||||
|
||||
def on_update(self):
|
||||
self.validate_name_with_item_group()
|
||||
@@ -72,13 +72,13 @@ class DocType(DocListController):
|
||||
def check_stock_uom_with_bin(self):
|
||||
if not self.doc.fields.get("__islocal"):
|
||||
matched=True
|
||||
ref_uom = frappe.conn.get_value("Stock Ledger Entry",
|
||||
ref_uom = frappe.db.get_value("Stock Ledger Entry",
|
||||
{"item_code": self.doc.name}, "stock_uom")
|
||||
if ref_uom:
|
||||
if cstr(ref_uom) != cstr(self.doc.stock_uom):
|
||||
matched = False
|
||||
else:
|
||||
bin_list = frappe.conn.sql("select * from tabBin where item_code=%s",
|
||||
bin_list = frappe.db.sql("select * from tabBin where item_code=%s",
|
||||
self.doc.item_code, as_dict=1)
|
||||
for bin in bin_list:
|
||||
if (bin.reserved_qty > 0 or bin.ordered_qty > 0 or bin.indented_qty > 0 \
|
||||
@@ -87,7 +87,7 @@ class DocType(DocListController):
|
||||
break
|
||||
|
||||
if matched and bin_list:
|
||||
frappe.conn.sql("""update tabBin set stock_uom=%s where item_code=%s""",
|
||||
frappe.db.sql("""update tabBin set stock_uom=%s where item_code=%s""",
|
||||
(self.doc.stock_uom, self.doc.name))
|
||||
|
||||
if not matched:
|
||||
@@ -122,7 +122,7 @@ class DocType(DocListController):
|
||||
|
||||
def check_for_active_boms(self):
|
||||
if self.doc.is_purchase_item != "Yes":
|
||||
bom_mat = frappe.conn.sql("""select distinct t1.parent
|
||||
bom_mat = frappe.db.sql("""select distinct t1.parent
|
||||
from `tabBOM Item` t1, `tabBOM` t2 where t2.name = t1.parent
|
||||
and t1.item_code =%s and ifnull(t1.bom_no, '') = '' and t2.is_active = 1
|
||||
and t2.docstatus = 1 and t1.docstatus =1 """, self.doc.name)
|
||||
@@ -132,7 +132,7 @@ class DocType(DocListController):
|
||||
as it is present in one or many Active BOMs"))
|
||||
|
||||
if self.doc.is_manufactured_item != "Yes":
|
||||
bom = frappe.conn.sql("""select name from `tabBOM` where item = %s
|
||||
bom = frappe.db.sql("""select name from `tabBOM` where item = %s
|
||||
and is_active = 1""", (self.doc.name,))
|
||||
if bom and bom[0][0]:
|
||||
frappe.throw(_("""Allow Bill of Materials should be 'Yes'. Because one or many \
|
||||
@@ -150,7 +150,7 @@ class DocType(DocListController):
|
||||
check_list=[]
|
||||
for d in getlist(self.doclist,'item_tax'):
|
||||
if d.tax_type:
|
||||
account_type = frappe.conn.get_value("Account", d.tax_type, "account_type")
|
||||
account_type = frappe.db.get_value("Account", d.tax_type, "account_type")
|
||||
|
||||
if account_type not in ['Tax', 'Chargeable', 'Income Account', 'Expense Account']:
|
||||
msgprint("'%s' is not Tax / Chargeable / Income / Expense Account" % d.tax_type, raise_exception=1)
|
||||
@@ -162,7 +162,7 @@ class DocType(DocListController):
|
||||
|
||||
def validate_barcode(self):
|
||||
if self.doc.barcode:
|
||||
duplicate = frappe.conn.sql("""select name from tabItem where barcode = %s
|
||||
duplicate = frappe.db.sql("""select name from tabItem where barcode = %s
|
||||
and name != %s""", (self.doc.barcode, self.doc.name))
|
||||
if duplicate:
|
||||
msgprint("Barcode: %s already used in item: %s" %
|
||||
@@ -170,7 +170,7 @@ class DocType(DocListController):
|
||||
|
||||
def cant_change(self):
|
||||
if not self.doc.fields.get("__islocal"):
|
||||
vals = frappe.conn.get_value("Item", self.doc.name,
|
||||
vals = frappe.db.get_value("Item", self.doc.name,
|
||||
["has_serial_no", "is_stock_item", "valuation_method"], as_dict=True)
|
||||
|
||||
if vals and ((self.doc.is_stock_item == "No" and vals.is_stock_item == "Yes") or
|
||||
@@ -187,19 +187,19 @@ class DocType(DocListController):
|
||||
raise_exception=1)
|
||||
|
||||
def check_if_sle_exists(self):
|
||||
sle = frappe.conn.sql("""select name from `tabStock Ledger Entry`
|
||||
sle = frappe.db.sql("""select name from `tabStock Ledger Entry`
|
||||
where item_code = %s""", self.doc.name)
|
||||
return sle and 'exists' or 'not exists'
|
||||
|
||||
def validate_name_with_item_group(self):
|
||||
# causes problem with tree build
|
||||
if frappe.conn.exists("Item Group", self.doc.name):
|
||||
if frappe.db.exists("Item Group", self.doc.name):
|
||||
frappe.msgprint("An item group exists with same name (%s), \
|
||||
please change the item name or rename the item group" %
|
||||
self.doc.name, raise_exception=1)
|
||||
|
||||
def update_item_price(self):
|
||||
frappe.conn.sql("""update `tabItem Price` set item_name=%s,
|
||||
frappe.db.sql("""update `tabItem Price` set item_name=%s,
|
||||
item_description=%s, modified=NOW() where item_code=%s""",
|
||||
(self.doc.item_name, self.doc.description, self.doc.name))
|
||||
|
||||
@@ -212,10 +212,10 @@ class DocType(DocListController):
|
||||
return page_name_from
|
||||
|
||||
def get_tax_rate(self, tax_type):
|
||||
return { "tax_rate": frappe.conn.get_value("Account", tax_type, "tax_rate") }
|
||||
return { "tax_rate": frappe.db.get_value("Account", tax_type, "tax_rate") }
|
||||
|
||||
def get_file_details(self, arg = ''):
|
||||
file = frappe.conn.sql("select file_group, description from tabFile where name = %s", eval(arg)['file_name'], as_dict = 1)
|
||||
file = frappe.db.sql("select file_group, description from tabFile where name = %s", eval(arg)['file_name'], as_dict = 1)
|
||||
|
||||
ret = {
|
||||
'file_group' : file and file[0]['file_group'] or '',
|
||||
@@ -224,24 +224,24 @@ class DocType(DocListController):
|
||||
return ret
|
||||
|
||||
def on_trash(self):
|
||||
frappe.conn.sql("""delete from tabBin where item_code=%s""", self.doc.item_code)
|
||||
frappe.db.sql("""delete from tabBin where item_code=%s""", self.doc.item_code)
|
||||
|
||||
def before_rename(self, olddn, newdn, merge=False):
|
||||
if merge:
|
||||
# Validate properties before merging
|
||||
if not frappe.conn.exists("Item", newdn):
|
||||
if not frappe.db.exists("Item", newdn):
|
||||
frappe.throw(_("Item ") + newdn +_(" does not exists"))
|
||||
|
||||
field_list = ["stock_uom", "is_stock_item", "has_serial_no", "has_batch_no"]
|
||||
new_properties = [cstr(d) for d in frappe.conn.get_value("Item", newdn, field_list)]
|
||||
new_properties = [cstr(d) for d in frappe.db.get_value("Item", newdn, field_list)]
|
||||
if new_properties != [cstr(self.doc.fields[fld]) for fld in field_list]:
|
||||
frappe.throw(_("To merge, following properties must be same for both items")
|
||||
+ ": \n" + ", ".join([self.meta.get_label(fld) for fld in field_list]))
|
||||
|
||||
frappe.conn.sql("delete from `tabBin` where item_code=%s", olddn)
|
||||
frappe.db.sql("delete from `tabBin` where item_code=%s", olddn)
|
||||
|
||||
def after_rename(self, olddn, newdn, merge):
|
||||
frappe.conn.set_value("Item", newdn, "item_code", newdn)
|
||||
frappe.db.set_value("Item", newdn, "item_code", newdn)
|
||||
|
||||
if merge:
|
||||
self.set_last_purchase_rate(newdn)
|
||||
@@ -249,23 +249,23 @@ class DocType(DocListController):
|
||||
|
||||
def set_last_purchase_rate(self, newdn):
|
||||
last_purchase_rate = get_last_purchase_details(newdn).get("base_rate", 0)
|
||||
frappe.conn.set_value("Item", newdn, "last_purchase_rate", last_purchase_rate)
|
||||
frappe.db.set_value("Item", newdn, "last_purchase_rate", last_purchase_rate)
|
||||
|
||||
def recalculate_bin_qty(self, newdn):
|
||||
from erpnext.utilities.repost_stock import repost_stock
|
||||
frappe.conn.auto_commit_on_many_writes = 1
|
||||
frappe.conn.set_default("allow_negative_stock", 1)
|
||||
frappe.db.auto_commit_on_many_writes = 1
|
||||
frappe.db.set_default("allow_negative_stock", 1)
|
||||
|
||||
for warehouse in frappe.conn.sql("select name from `tabWarehouse`"):
|
||||
for warehouse in frappe.db.sql("select name from `tabWarehouse`"):
|
||||
repost_stock(newdn, warehouse[0])
|
||||
|
||||
frappe.conn.set_default("allow_negative_stock",
|
||||
frappe.conn.get_value("Stock Settings", None, "allow_negative_stock"))
|
||||
frappe.conn.auto_commit_on_many_writes = 0
|
||||
frappe.db.set_default("allow_negative_stock",
|
||||
frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
|
||||
frappe.db.auto_commit_on_many_writes = 0
|
||||
|
||||
def validate_end_of_life(item_code, end_of_life=None, verbose=1):
|
||||
if not end_of_life:
|
||||
end_of_life = frappe.conn.get_value("Item", item_code, "end_of_life")
|
||||
end_of_life = frappe.db.get_value("Item", item_code, "end_of_life")
|
||||
|
||||
if end_of_life and getdate(end_of_life) <= now_datetime().date():
|
||||
msg = (_("Item") + " %(item_code)s: " + _("reached its end of life on") + \
|
||||
@@ -280,7 +280,7 @@ def validate_end_of_life(item_code, end_of_life=None, verbose=1):
|
||||
|
||||
def validate_is_stock_item(item_code, is_stock_item=None, verbose=1):
|
||||
if not is_stock_item:
|
||||
is_stock_item = frappe.conn.get_value("Item", item_code, "is_stock_item")
|
||||
is_stock_item = frappe.db.get_value("Item", item_code, "is_stock_item")
|
||||
|
||||
if is_stock_item != "Yes":
|
||||
msg = (_("Item") + " %(item_code)s: " + _("is not a Stock Item")) % {
|
||||
@@ -291,7 +291,7 @@ def validate_is_stock_item(item_code, is_stock_item=None, verbose=1):
|
||||
|
||||
def validate_cancelled_item(item_code, docstatus=None, verbose=1):
|
||||
if docstatus is None:
|
||||
docstatus = frappe.conn.get_value("Item", item_code, "docstatus")
|
||||
docstatus = frappe.db.get_value("Item", item_code, "docstatus")
|
||||
|
||||
if docstatus == 2:
|
||||
msg = (_("Item") + " %(item_code)s: " + _("is a cancelled Item")) % {
|
||||
@@ -310,7 +310,7 @@ def _msgprint(msg, verbose):
|
||||
def get_last_purchase_details(item_code, doc_name=None, conversion_rate=1.0):
|
||||
"""returns last purchase details in stock uom"""
|
||||
# get last purchase order item details
|
||||
last_purchase_order = frappe.conn.sql("""\
|
||||
last_purchase_order = frappe.db.sql("""\
|
||||
select po.name, po.transaction_date, po.conversion_rate,
|
||||
po_item.conversion_factor, po_item.base_price_list_rate,
|
||||
po_item.discount_percentage, po_item.base_rate
|
||||
@@ -321,7 +321,7 @@ def get_last_purchase_details(item_code, doc_name=None, conversion_rate=1.0):
|
||||
limit 1""", (item_code, cstr(doc_name)), as_dict=1)
|
||||
|
||||
# get last purchase receipt item details
|
||||
last_purchase_receipt = frappe.conn.sql("""\
|
||||
last_purchase_receipt = frappe.db.sql("""\
|
||||
select pr.name, pr.posting_date, pr.posting_time, pr.conversion_rate,
|
||||
pr_item.conversion_factor, pr_item.base_price_list_rate, pr_item.discount_percentage,
|
||||
pr_item.base_rate
|
||||
|
||||
@@ -19,7 +19,7 @@ class DocType:
|
||||
self.update_item_details()
|
||||
|
||||
def validate_item(self):
|
||||
if not frappe.conn.exists("Item", self.doc.item_code):
|
||||
if not frappe.db.exists("Item", self.doc.item_code):
|
||||
throw("{doctype}: {item} {not_found}".format(**{
|
||||
"doctype": _("Item"),
|
||||
"item": self.doc.item_code,
|
||||
@@ -27,7 +27,7 @@ class DocType:
|
||||
}))
|
||||
|
||||
def validate_price_list(self):
|
||||
enabled = frappe.conn.get_value("Price List", self.doc.price_list, "enabled")
|
||||
enabled = frappe.db.get_value("Price List", self.doc.price_list, "enabled")
|
||||
if not enabled:
|
||||
throw("{message}: {price_list} {disabled}".format(**{
|
||||
"message": _("Price List"),
|
||||
@@ -36,7 +36,7 @@ class DocType:
|
||||
}))
|
||||
|
||||
def check_duplicate_item(self):
|
||||
if frappe.conn.sql("""select name from `tabItem Price`
|
||||
if frappe.db.sql("""select name from `tabItem Price`
|
||||
where item_code=%s and price_list=%s and name!=%s""",
|
||||
(self.doc.item_code, self.doc.price_list, self.doc.name)):
|
||||
throw("{duplicate_item}: {item_code}, {already}: {price_list}".format(**{
|
||||
@@ -48,10 +48,10 @@ class DocType:
|
||||
|
||||
def update_price_list_details(self):
|
||||
self.doc.buying, self.doc.selling, self.doc.currency = \
|
||||
frappe.conn.get_value("Price List", {"name": self.doc.price_list, "enabled": 1},
|
||||
frappe.db.get_value("Price List", {"name": self.doc.price_list, "enabled": 1},
|
||||
["buying", "selling", "currency"])
|
||||
|
||||
def update_item_details(self):
|
||||
self.doc.item_name, self.doc.item_description = frappe.conn.get_value("Item",
|
||||
self.doc.item_name, self.doc.item_description = frappe.db.get_value("Item",
|
||||
self.doc.item_code, ["item_name", "description"])
|
||||
|
||||
@@ -30,7 +30,7 @@ class DocType:
|
||||
|
||||
def validate_purchase_receipts(self, purchase_receipts):
|
||||
for pr in purchase_receipts:
|
||||
if frappe.conn.get_value("Purchase Receipt", pr, "docstatus") != 1:
|
||||
if frappe.db.get_value("Purchase Receipt", pr, "docstatus") != 1:
|
||||
frappe.throw(_("Purchase Receipt") + ": " + pr + _(" is not submitted document"))
|
||||
|
||||
def add_charges_in_pr(self, purchase_receipts):
|
||||
@@ -76,7 +76,7 @@ class DocType:
|
||||
d.save()
|
||||
|
||||
def get_total_pr_amt(self, purchase_receipts):
|
||||
return frappe.conn.sql("""SELECT SUM(net_total) FROM `tabPurchase Receipt`
|
||||
return frappe.db.sql("""SELECT SUM(net_total) FROM `tabPurchase Receipt`
|
||||
WHERE name in (%s)""" % ', '.join(['%s']*len(purchase_receipts)),
|
||||
tuple(purchase_receipts))[0][0]
|
||||
|
||||
@@ -86,9 +86,9 @@ class DocType:
|
||||
|
||||
pr_bean.run_method("update_ordered_qty")
|
||||
|
||||
frappe.conn.sql("""delete from `tabStock Ledger Entry`
|
||||
frappe.db.sql("""delete from `tabStock Ledger Entry`
|
||||
where voucher_type='Purchase Receipt' and voucher_no=%s""", pr)
|
||||
frappe.conn.sql("""delete from `tabGL Entry` where voucher_type='Purchase Receipt'
|
||||
frappe.db.sql("""delete from `tabGL Entry` where voucher_type='Purchase Receipt'
|
||||
and voucher_no=%s""", pr)
|
||||
|
||||
def submit_pr(self, purchase_receipts):
|
||||
|
||||
@@ -37,13 +37,13 @@ class DocType(BuyingController):
|
||||
|
||||
for so_no in so_items.keys():
|
||||
for item in so_items[so_no].keys():
|
||||
already_indented = frappe.conn.sql("""select sum(ifnull(qty, 0))
|
||||
already_indented = frappe.db.sql("""select sum(ifnull(qty, 0))
|
||||
from `tabMaterial Request Item`
|
||||
where item_code = %s and sales_order_no = %s and
|
||||
docstatus = 1 and parent != %s""", (item, so_no, self.doc.name))
|
||||
already_indented = already_indented and flt(already_indented[0][0]) or 0
|
||||
|
||||
actual_so_qty = frappe.conn.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item`
|
||||
actual_so_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item`
|
||||
where parent = %s and item_code = %s and docstatus = 1""", (so_no, item))
|
||||
actual_so_qty = actual_so_qty and flt(actual_so_qty[0][0]) or 0
|
||||
|
||||
@@ -85,7 +85,7 @@ class DocType(BuyingController):
|
||||
|
||||
from erpnext.stock.utils import update_bin
|
||||
for d in getlist(self.doclist, 'indent_details'):
|
||||
if frappe.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes":
|
||||
if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes":
|
||||
if not d.warehouse:
|
||||
frappe.throw("Please Enter Warehouse for Item %s as it is stock item"
|
||||
% cstr(d.item_code))
|
||||
@@ -103,13 +103,13 @@ class DocType(BuyingController):
|
||||
update_bin(args)
|
||||
|
||||
def on_submit(self):
|
||||
frappe.conn.set(self.doc, 'status', 'Submitted')
|
||||
frappe.db.set(self.doc, 'status', 'Submitted')
|
||||
self.update_bin(is_submit = 1, is_stopped = 0)
|
||||
|
||||
def check_modified_date(self):
|
||||
mod_db = frappe.conn.sql("""select modified from `tabMaterial Request` where name = %s""",
|
||||
mod_db = frappe.db.sql("""select modified from `tabMaterial Request` where name = %s""",
|
||||
self.doc.name)
|
||||
date_diff = frappe.conn.sql("""select TIMEDIFF('%s', '%s')"""
|
||||
date_diff = frappe.db.sql("""select TIMEDIFF('%s', '%s')"""
|
||||
% (mod_db[0][0], cstr(self.doc.modified)))
|
||||
|
||||
if date_diff and date_diff[0][0]:
|
||||
@@ -121,7 +121,7 @@ class DocType(BuyingController):
|
||||
self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
|
||||
|
||||
# Step 2:=> Set status
|
||||
frappe.conn.set(self.doc, 'status', cstr(status))
|
||||
frappe.db.set(self.doc, 'status', cstr(status))
|
||||
|
||||
# Step 3:=> Acknowledge User
|
||||
msgprint(self.doc.doctype + ": " + self.doc.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)))
|
||||
@@ -140,7 +140,7 @@ class DocType(BuyingController):
|
||||
self.update_bin(is_submit = 0, is_stopped = (cstr(self.doc.status) == 'Stopped') and 1 or 0)
|
||||
|
||||
# Step 5:=> Set Status
|
||||
frappe.conn.set(self.doc,'status','Cancelled')
|
||||
frappe.db.set(self.doc,'status','Cancelled')
|
||||
|
||||
def update_completed_qty(self, mr_items=None):
|
||||
if self.doc.material_request_type != "Transfer":
|
||||
@@ -154,11 +154,11 @@ class DocType(BuyingController):
|
||||
per_ordered = 0.0
|
||||
for d in item_doclist:
|
||||
if d.name in mr_items:
|
||||
d.ordered_qty = flt(frappe.conn.sql("""select sum(transfer_qty)
|
||||
d.ordered_qty = flt(frappe.db.sql("""select sum(transfer_qty)
|
||||
from `tabStock Entry Detail` where material_request = %s
|
||||
and material_request_item = %s and docstatus = 1""",
|
||||
(self.doc.name, d.name))[0][0])
|
||||
frappe.conn.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)
|
||||
frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)
|
||||
|
||||
# note: if qty is 0, its row is still counted in len(item_doclist)
|
||||
# hence adding 1 to per_ordered
|
||||
@@ -168,7 +168,7 @@ class DocType(BuyingController):
|
||||
per_ordered += flt(d.ordered_qty / flt(d.qty))
|
||||
|
||||
self.doc.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2)
|
||||
frappe.conn.set_value(self.doc.doctype, self.doc.name, "per_ordered", self.doc.per_ordered)
|
||||
frappe.db.set_value(self.doc.doctype, self.doc.name, "per_ordered", self.doc.per_ordered)
|
||||
|
||||
def update_completed_qty(bean, method):
|
||||
if bean.doc.doctype == "Stock Entry":
|
||||
@@ -298,9 +298,9 @@ def make_purchase_order_based_on_supplier(source_name, target_doclist=None):
|
||||
return [d.fields for d in target_doclist]
|
||||
|
||||
def get_material_requests_based_on_supplier(supplier):
|
||||
supplier_items = [d[0] for d in frappe.conn.get_values("Item",
|
||||
supplier_items = [d[0] for d in frappe.db.get_values("Item",
|
||||
{"default_supplier": supplier})]
|
||||
material_requests = frappe.conn.sql_list("""select distinct mr.name
|
||||
material_requests = frappe.db.sql_list("""select distinct mr.name
|
||||
from `tabMaterial Request` mr, `tabMaterial Request Item` mr_item
|
||||
where mr.name = mr_item.parent
|
||||
and mr_item.item_code in (%s)
|
||||
|
||||
@@ -65,9 +65,9 @@ class TestMaterialRequest(unittest.TestCase):
|
||||
self.assertEquals(val, doclist[i].fields.get(fieldname))
|
||||
|
||||
def _test_requested_qty(self, qty1, qty2):
|
||||
self.assertEqual(flt(frappe.conn.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
|
||||
self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
|
||||
"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty1)
|
||||
self.assertEqual(flt(frappe.conn.get_value("Bin", {"item_code": "_Test Item Home Desktop 200",
|
||||
self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 200",
|
||||
"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty2)
|
||||
|
||||
def _insert_stock_entry(self, qty1, qty2):
|
||||
@@ -109,7 +109,7 @@ class TestMaterialRequest(unittest.TestCase):
|
||||
se.submit()
|
||||
|
||||
def test_completed_qty_for_purchase(self):
|
||||
frappe.conn.sql("""delete from `tabBin`""")
|
||||
frappe.db.sql("""delete from `tabBin`""")
|
||||
|
||||
# submit material request of type Purchase
|
||||
mr = frappe.bean(copy=test_records[0])
|
||||
@@ -156,8 +156,8 @@ class TestMaterialRequest(unittest.TestCase):
|
||||
self._test_requested_qty(54.0, 3.0)
|
||||
|
||||
def test_completed_qty_for_transfer(self):
|
||||
frappe.conn.sql("""delete from `tabBin`""")
|
||||
frappe.conn.sql("""delete from `tabStock Ledger Entry`""")
|
||||
frappe.db.sql("""delete from `tabBin`""")
|
||||
frappe.db.sql("""delete from `tabStock Ledger Entry`""")
|
||||
|
||||
# submit material request of type Purchase
|
||||
mr = frappe.bean(copy=test_records[0])
|
||||
@@ -219,8 +219,8 @@ class TestMaterialRequest(unittest.TestCase):
|
||||
self._test_requested_qty(54.0, 3.0)
|
||||
|
||||
def test_completed_qty_for_over_transfer(self):
|
||||
frappe.conn.sql("""delete from `tabBin`""")
|
||||
frappe.conn.sql("""delete from `tabStock Ledger Entry`""")
|
||||
frappe.db.sql("""delete from `tabBin`""")
|
||||
frappe.db.sql("""delete from `tabStock Ledger Entry`""")
|
||||
|
||||
# submit material request of type Purchase
|
||||
mr = frappe.bean(copy=test_records[0])
|
||||
|
||||
@@ -14,16 +14,16 @@ class DocType:
|
||||
self.doc, self.doclist = d, dl
|
||||
|
||||
def get_sales_bom_items(item_code):
|
||||
return frappe.conn.sql("""select t1.item_code, t1.qty, t1.uom
|
||||
return frappe.db.sql("""select t1.item_code, t1.qty, t1.uom
|
||||
from `tabSales BOM Item` t1, `tabSales BOM` t2
|
||||
where t2.new_item_code=%s and t1.parent = t2.name""", item_code, as_dict=1)
|
||||
|
||||
def get_packing_item_details(item):
|
||||
return frappe.conn.sql("""select item_name, description, stock_uom from `tabItem`
|
||||
return frappe.db.sql("""select item_name, description, stock_uom from `tabItem`
|
||||
where name = %s""", item, as_dict = 1)[0]
|
||||
|
||||
def get_bin_qty(item, warehouse):
|
||||
det = frappe.conn.sql("""select actual_qty, projected_qty from `tabBin`
|
||||
det = frappe.db.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 ''
|
||||
|
||||
@@ -66,7 +66,7 @@ def make_packing_list(obj, item_table_fieldname):
|
||||
for d in obj.doclist.get({"parentfield": item_table_fieldname}):
|
||||
warehouse = (item_table_fieldname == "sales_order_details") \
|
||||
and d.warehouse or d.warehouse
|
||||
if frappe.conn.get_value("Sales BOM", {"new_item_code": d.item_code}):
|
||||
if frappe.db.get_value("Sales BOM", {"new_item_code": d.item_code}):
|
||||
for i in get_sales_bom_items(d.item_code):
|
||||
update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty),
|
||||
warehouse, d, packing_list_idx)
|
||||
|
||||
@@ -32,7 +32,7 @@ class DocType:
|
||||
"""
|
||||
Validates if delivery note has status as draft
|
||||
"""
|
||||
if cint(frappe.conn.get_value("Delivery Note", self.doc.delivery_note, "docstatus")) != 0:
|
||||
if cint(frappe.db.get_value("Delivery Note", self.doc.delivery_note, "docstatus")) != 0:
|
||||
msgprint(_("""Invalid Delivery Note. Delivery Note should exist and should be in draft state. Please rectify and try again."""), raise_exception=1)
|
||||
|
||||
def validate_items_mandatory(self):
|
||||
@@ -53,7 +53,7 @@ class DocType:
|
||||
raise_exception=1)
|
||||
|
||||
|
||||
res = frappe.conn.sql("""SELECT name FROM `tabPacking Slip`
|
||||
res = frappe.db.sql("""SELECT name FROM `tabPacking Slip`
|
||||
WHERE delivery_note = %(delivery_note)s AND docstatus = 1 AND
|
||||
(from_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s
|
||||
OR to_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s
|
||||
@@ -94,7 +94,7 @@ class DocType:
|
||||
condition = " and item_code in (%s)" % (", ".join(["%s"]*len(rows)))
|
||||
|
||||
# gets item code, qty per item code, latest packed qty per item code and stock uom
|
||||
res = frappe.conn.sql("""select item_code, ifnull(sum(qty), 0) as qty,
|
||||
res = frappe.db.sql("""select item_code, ifnull(sum(qty), 0) as qty,
|
||||
(select sum(ifnull(psi.qty, 0) * (abs(ps.to_case_no - ps.from_case_no) + 1))
|
||||
from `tabPacking Slip` ps, `tabPacking Slip Item` psi
|
||||
where ps.name = psi.parent and ps.docstatus = 1
|
||||
@@ -133,7 +133,7 @@ class DocType:
|
||||
self.doc.from_case_no = self.get_recommended_case_no()
|
||||
|
||||
for d in self.doclist.get({"parentfield": "item_details"}):
|
||||
res = frappe.conn.get_value("Item", d.item_code,
|
||||
res = frappe.db.get_value("Item", d.item_code,
|
||||
["net_weight", "weight_uom"], as_dict=True)
|
||||
|
||||
if res and len(res)>0:
|
||||
@@ -145,7 +145,7 @@ class DocType:
|
||||
Returns the next case no. for a new packing slip for a delivery
|
||||
note
|
||||
"""
|
||||
recommended_case_no = frappe.conn.sql("""SELECT MAX(to_case_no) FROM `tabPacking Slip`
|
||||
recommended_case_no = frappe.db.sql("""SELECT MAX(to_case_no) FROM `tabPacking Slip`
|
||||
WHERE delivery_note = %(delivery_note)s AND docstatus=1""", self.doc.fields)
|
||||
|
||||
return cint(recommended_case_no[0][0]) + 1
|
||||
@@ -165,7 +165,7 @@ class DocType:
|
||||
|
||||
def item_details(doctype, txt, searchfield, start, page_len, filters):
|
||||
from erpnext.controllers.queries import get_match_cond
|
||||
return frappe.conn.sql("""select name, item_name, description from `tabItem`
|
||||
return frappe.db.sql("""select name, item_name, description from `tabItem`
|
||||
where name in ( select item_code FROM `tabDelivery Note Item`
|
||||
where parent= %s
|
||||
and ifnull(qty, 0) > ifnull(packed_qty, 0))
|
||||
|
||||
@@ -31,15 +31,15 @@ class DocType(DocListController):
|
||||
|
||||
def set_default_if_missing(self):
|
||||
if cint(self.doc.selling):
|
||||
if not frappe.conn.get_value("Selling Settings", None, "selling_price_list"):
|
||||
if not frappe.db.get_value("Selling Settings", None, "selling_price_list"):
|
||||
frappe.set_value("Selling Settings", "Selling Settings", "selling_price_list", self.doc.name)
|
||||
|
||||
elif cint(self.doc.buying):
|
||||
if not frappe.conn.get_value("Buying Settings", None, "buying_price_list"):
|
||||
if not frappe.db.get_value("Buying Settings", None, "buying_price_list"):
|
||||
frappe.set_value("Buying Settings", "Buying Settings", "buying_price_list", self.doc.name)
|
||||
|
||||
def update_item_price(self):
|
||||
frappe.conn.sql("""update `tabItem Price` set currency=%s,
|
||||
frappe.db.sql("""update `tabItem Price` set currency=%s,
|
||||
buying=%s, selling=%s, modified=NOW() where price_list=%s""",
|
||||
(self.doc.currency, cint(self.doc.buying), cint(self.doc.selling), self.doc.name))
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ class DocType(BuyingController):
|
||||
}]
|
||||
|
||||
def onload(self):
|
||||
billed_qty = frappe.conn.sql("""select sum(ifnull(qty, 0)) from `tabPurchase Invoice Item`
|
||||
billed_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabPurchase Invoice Item`
|
||||
where purchase_receipt=%s""", self.doc.name)
|
||||
if billed_qty:
|
||||
total_qty = sum((item.qty for item in self.doclist.get({"parentfield": "purchase_receipt_details"})))
|
||||
@@ -96,7 +96,7 @@ class DocType(BuyingController):
|
||||
def validate_challan_no(self):
|
||||
"Validate if same challan no exists for same supplier in a submitted purchase receipt"
|
||||
if self.doc.challan_no:
|
||||
exists = frappe.conn.sql("""
|
||||
exists = frappe.db.sql("""
|
||||
SELECT name FROM `tabPurchase Receipt`
|
||||
WHERE name!=%s AND supplier=%s AND challan_no=%s
|
||||
AND docstatus=1""", (self.doc.name, self.doc.supplier, self.doc.challan_no))
|
||||
@@ -128,7 +128,7 @@ class DocType(BuyingController):
|
||||
|
||||
|
||||
def po_required(self):
|
||||
if frappe.conn.get_value("Buying Settings", None, "po_required") == 'Yes':
|
||||
if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes':
|
||||
for d in getlist(self.doclist,'purchase_receipt_details'):
|
||||
if not d.prevdoc_docname:
|
||||
msgprint("Purchse Order No. required against item %s"%d.item_code)
|
||||
@@ -186,14 +186,14 @@ class DocType(BuyingController):
|
||||
})
|
||||
|
||||
def get_already_received_qty(self, po, po_detail):
|
||||
qty = frappe.conn.sql("""select sum(qty) from `tabPurchase Receipt Item`
|
||||
qty = frappe.db.sql("""select sum(qty) from `tabPurchase Receipt Item`
|
||||
where prevdoc_detail_docname = %s and docstatus = 1
|
||||
and prevdoc_doctype='Purchase Order' and prevdoc_docname=%s
|
||||
and parent != %s""", (po_detail, po, self.doc.name))
|
||||
return qty and flt(qty[0][0]) or 0.0
|
||||
|
||||
def get_po_qty_and_warehouse(self, po_detail):
|
||||
po_qty, po_warehouse = frappe.conn.get_value("Purchase Order Item", po_detail,
|
||||
po_qty, po_warehouse = frappe.db.get_value("Purchase Order Item", po_detail,
|
||||
["qty", "warehouse"])
|
||||
return po_qty, po_warehouse
|
||||
|
||||
@@ -210,7 +210,7 @@ class DocType(BuyingController):
|
||||
|
||||
def validate_inspection(self):
|
||||
for d in getlist(self.doclist, 'purchase_receipt_details'): #Enter inspection date for all items that require inspection
|
||||
ins_reqd = frappe.conn.sql("select inspection_required from `tabItem` where name = %s",
|
||||
ins_reqd = frappe.db.sql("select inspection_required from `tabItem` where name = %s",
|
||||
(d.item_code,), as_dict = 1)
|
||||
ins_reqd = ins_reqd and ins_reqd[0]['inspection_required'] or 'No'
|
||||
if ins_reqd == 'Yes' and not d.qa_no:
|
||||
@@ -232,7 +232,7 @@ class DocType(BuyingController):
|
||||
get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total)
|
||||
|
||||
# Set status as Submitted
|
||||
frappe.conn.set(self.doc, 'status', 'Submitted')
|
||||
frappe.db.set(self.doc, 'status', 'Submitted')
|
||||
|
||||
self.update_prevdoc_status()
|
||||
|
||||
@@ -248,7 +248,7 @@ class DocType(BuyingController):
|
||||
self.make_gl_entries()
|
||||
|
||||
def check_next_docstatus(self):
|
||||
submit_rv = frappe.conn.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % (self.doc.name))
|
||||
submit_rv = frappe.db.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % (self.doc.name))
|
||||
if submit_rv:
|
||||
msgprint("Purchase Invoice : " + cstr(self.submit_rv[0][0]) + " has already been submitted !")
|
||||
raise Exception , "Validation Error."
|
||||
@@ -261,13 +261,13 @@ class DocType(BuyingController):
|
||||
# Check if Purchase Invoice has been submitted against current Purchase Order
|
||||
# pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Invoice', docname = self.doc.name, detail_doctype = 'Purchase Invoice Item')
|
||||
|
||||
submitted = frappe.conn.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % self.doc.name)
|
||||
submitted = frappe.db.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % self.doc.name)
|
||||
if submitted:
|
||||
msgprint("Purchase Invoice : " + cstr(submitted[0][0]) + " has already been submitted !")
|
||||
raise Exception
|
||||
|
||||
|
||||
frappe.conn.set(self.doc,'status','Cancelled')
|
||||
frappe.db.set(self.doc,'status','Cancelled')
|
||||
|
||||
self.update_ordered_qty()
|
||||
|
||||
@@ -281,7 +281,7 @@ class DocType(BuyingController):
|
||||
def get_current_stock(self):
|
||||
for d in getlist(self.doclist, 'pr_raw_material_details'):
|
||||
if self.doc.supplier_warehouse:
|
||||
bin = frappe.conn.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.rm_item_code, self.doc.supplier_warehouse), as_dict = 1)
|
||||
bin = frappe.db.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.rm_item_code, self.doc.supplier_warehouse), as_dict = 1)
|
||||
d.current_stock = bin and flt(bin[0]['actual_qty']) or 0
|
||||
|
||||
def get_rate(self,arg):
|
||||
|
||||
@@ -37,14 +37,14 @@ class TestPurchaseReceipt(unittest.TestCase):
|
||||
pr.insert()
|
||||
pr.submit()
|
||||
|
||||
stock_value, stock_value_difference = frappe.conn.get_value("Stock Ledger Entry",
|
||||
stock_value, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
|
||||
{"voucher_type": "Purchase Receipt", "voucher_no": pr.doc.name,
|
||||
"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"},
|
||||
["stock_value", "stock_value_difference"])
|
||||
self.assertEqual(stock_value, 375)
|
||||
self.assertEqual(stock_value_difference, 375)
|
||||
|
||||
bin_stock_value = frappe.conn.get_value("Bin", {"item_code": "_Test Item",
|
||||
bin_stock_value = frappe.db.get_value("Bin", {"item_code": "_Test Item",
|
||||
"warehouse": "_Test Warehouse - _TC"}, "stock_value")
|
||||
self.assertEqual(bin_stock_value, 375)
|
||||
|
||||
@@ -64,9 +64,9 @@ class TestPurchaseReceipt(unittest.TestCase):
|
||||
|
||||
self.assertTrue(gl_entries)
|
||||
|
||||
stock_in_hand_account = frappe.conn.get_value("Account",
|
||||
stock_in_hand_account = frappe.db.get_value("Account",
|
||||
{"master_name": pr.doclist[1].warehouse})
|
||||
fixed_asset_account = frappe.conn.get_value("Account",
|
||||
fixed_asset_account = frappe.db.get_value("Account",
|
||||
{"master_name": pr.doclist[2].warehouse})
|
||||
|
||||
expected_values = {
|
||||
@@ -85,9 +85,9 @@ class TestPurchaseReceipt(unittest.TestCase):
|
||||
set_perpetual_inventory(0)
|
||||
|
||||
def _clear_stock_account_balance(self):
|
||||
frappe.conn.sql("delete from `tabStock Ledger Entry`")
|
||||
frappe.conn.sql("""delete from `tabBin`""")
|
||||
frappe.conn.sql("""delete from `tabGL Entry`""")
|
||||
frappe.db.sql("delete from `tabStock Ledger Entry`")
|
||||
frappe.db.sql("""delete from `tabBin`""")
|
||||
frappe.db.sql("""delete from `tabGL Entry`""")
|
||||
|
||||
def test_subcontracting(self):
|
||||
pr = frappe.bean(copy=test_records[1])
|
||||
@@ -105,7 +105,7 @@ class TestPurchaseReceipt(unittest.TestCase):
|
||||
pr.insert()
|
||||
pr.submit()
|
||||
|
||||
self.assertEquals(frappe.conn.get_value("Serial No", pr.doclist[1].serial_no,
|
||||
self.assertEquals(frappe.db.get_value("Serial No", pr.doclist[1].serial_no,
|
||||
"supplier"), pr.doc.supplier)
|
||||
|
||||
return pr
|
||||
@@ -114,11 +114,11 @@ class TestPurchaseReceipt(unittest.TestCase):
|
||||
pr = self.test_serial_no_supplier()
|
||||
pr.cancel()
|
||||
|
||||
self.assertFalse(frappe.conn.get_value("Serial No", pr.doclist[1].serial_no,
|
||||
self.assertFalse(frappe.db.get_value("Serial No", pr.doclist[1].serial_no,
|
||||
"warehouse"))
|
||||
|
||||
def get_gl_entries(voucher_type, voucher_no):
|
||||
return frappe.conn.sql("""select account, debit, credit
|
||||
return frappe.db.sql("""select account, debit, credit
|
||||
from `tabGL Entry` where voucher_type=%s and voucher_no=%s
|
||||
order by account desc""", (voucher_type, voucher_no), as_dict=1)
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ class DocType(StockController):
|
||||
|
||||
def validate_warehouse(self):
|
||||
if not self.doc.fields.get("__islocal"):
|
||||
item_code, warehouse = frappe.conn.get_value("Serial No",
|
||||
item_code, warehouse = frappe.db.get_value("Serial No",
|
||||
self.doc.name, ["item_code", "warehouse"])
|
||||
if item_code != self.doc.item_code:
|
||||
frappe.throw(_("Item Code cannot be changed for Serial No."),
|
||||
@@ -77,7 +77,7 @@ class DocType(StockController):
|
||||
def set_status(self, last_sle):
|
||||
if last_sle:
|
||||
if last_sle.voucher_type == "Stock Entry":
|
||||
document_type = frappe.conn.get_value("Stock Entry", last_sle.voucher_no,
|
||||
document_type = frappe.db.get_value("Stock Entry", last_sle.voucher_no,
|
||||
"purpose")
|
||||
else:
|
||||
document_type = last_sle.voucher_type
|
||||
@@ -106,7 +106,7 @@ class DocType(StockController):
|
||||
self.doc.purchase_rate = purchase_sle.incoming_rate
|
||||
if purchase_sle.voucher_type == "Purchase Receipt":
|
||||
self.doc.supplier, self.doc.supplier_name = \
|
||||
frappe.conn.get_value("Purchase Receipt", purchase_sle.voucher_no,
|
||||
frappe.db.get_value("Purchase Receipt", purchase_sle.voucher_no,
|
||||
["supplier", "supplier_name"])
|
||||
else:
|
||||
for fieldname in ("purchase_document_type", "purchase_document_no",
|
||||
@@ -120,7 +120,7 @@ class DocType(StockController):
|
||||
self.doc.delivery_date = delivery_sle.posting_date
|
||||
self.doc.delivery_time = delivery_sle.posting_time
|
||||
self.doc.customer, self.doc.customer_name = \
|
||||
frappe.conn.get_value(delivery_sle.voucher_type, delivery_sle.voucher_no,
|
||||
frappe.db.get_value(delivery_sle.voucher_type, delivery_sle.voucher_no,
|
||||
["customer", "customer_name"])
|
||||
if self.doc.warranty_period:
|
||||
self.doc.warranty_expiry_date = add_days(cstr(delivery_sle.posting_date),
|
||||
@@ -148,7 +148,7 @@ class DocType(StockController):
|
||||
|
||||
def get_stock_ledger_entries(self):
|
||||
sle_dict = {}
|
||||
for sle in frappe.conn.sql("""select * from `tabStock Ledger Entry`
|
||||
for sle in frappe.db.sql("""select * from `tabStock Ledger Entry`
|
||||
where serial_no like %s and item_code=%s and ifnull(is_cancelled, 'No')='No'
|
||||
order by posting_date desc, posting_time desc, name desc""",
|
||||
("%%%s%%" % self.doc.name, self.doc.item_code), as_dict=1):
|
||||
@@ -173,14 +173,14 @@ class DocType(StockController):
|
||||
|
||||
def after_rename(self, old, new, merge=False):
|
||||
"""rename serial_no text fields"""
|
||||
for dt in frappe.conn.sql("""select parent from tabDocField
|
||||
for dt in frappe.db.sql("""select parent from tabDocField
|
||||
where fieldname='serial_no' and fieldtype='Text'"""):
|
||||
|
||||
for item in frappe.conn.sql("""select name, serial_no from `tab%s`
|
||||
for item in frappe.db.sql("""select name, serial_no from `tab%s`
|
||||
where serial_no like '%%%s%%'""" % (dt[0], old)):
|
||||
|
||||
serial_nos = map(lambda i: i==old and new or i, item[1].split('\n'))
|
||||
frappe.conn.sql("""update `tab%s` set serial_no = %s
|
||||
frappe.db.sql("""update `tab%s` set serial_no = %s
|
||||
where name=%s""" % (dt[0], '%s', '%s'),
|
||||
('\n'.join(serial_nos), item[0]))
|
||||
|
||||
@@ -219,7 +219,7 @@ def validate_serial_no(sle, item_det):
|
||||
(": %s" % sle.item_code), SerialNoDuplicateError)
|
||||
|
||||
for serial_no in serial_nos:
|
||||
if frappe.conn.exists("Serial No", serial_no):
|
||||
if frappe.db.exists("Serial No", serial_no):
|
||||
sr = frappe.bean("Serial No", serial_no)
|
||||
|
||||
if sr.doc.item_code!=sle.item_code:
|
||||
@@ -254,12 +254,12 @@ def update_serial_nos(sle, item_det):
|
||||
serial_nos = []
|
||||
for i in xrange(cint(sle.actual_qty)):
|
||||
serial_nos.append(make_autoname(item_det.serial_no_series))
|
||||
frappe.conn.set(sle, "serial_no", "\n".join(serial_nos))
|
||||
frappe.db.set(sle, "serial_no", "\n".join(serial_nos))
|
||||
|
||||
if sle.serial_no:
|
||||
serial_nos = get_serial_nos(sle.serial_no)
|
||||
for serial_no in serial_nos:
|
||||
if frappe.conn.exists("Serial No", serial_no):
|
||||
if frappe.db.exists("Serial No", serial_no):
|
||||
sr = frappe.bean("Serial No", serial_no)
|
||||
sr.make_controller().via_stock_ledger = True
|
||||
sr.doc.warehouse = sle.warehouse if sle.actual_qty > 0 else None
|
||||
@@ -268,7 +268,7 @@ def update_serial_nos(sle, item_det):
|
||||
make_serial_no(serial_no, sle)
|
||||
|
||||
def get_item_details(item_code):
|
||||
return frappe.conn.sql("""select name, has_batch_no, docstatus,
|
||||
return frappe.db.sql("""select name, has_batch_no, docstatus,
|
||||
is_stock_item, has_serial_no, serial_no_series
|
||||
from tabItem where name=%s""", item_code, as_dict=True)[0]
|
||||
|
||||
@@ -289,7 +289,7 @@ def make_serial_no(serial_no, sle):
|
||||
return sr.doc.name
|
||||
|
||||
def update_serial_nos_after_submit(controller, parentfield):
|
||||
stock_ledger_entries = frappe.conn.sql("""select voucher_detail_no, serial_no
|
||||
stock_ledger_entries = frappe.db.sql("""select voucher_detail_no, serial_no
|
||||
from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""",
|
||||
(controller.doc.doctype, controller.doc.name), as_dict=True)
|
||||
|
||||
@@ -304,4 +304,4 @@ def update_serial_nos_after_submit(controller, parentfield):
|
||||
|
||||
if d.serial_no != serial_no:
|
||||
d.serial_no = serial_no
|
||||
frappe.conn.set_value(d.doctype, d.name, "serial_no", serial_no)
|
||||
frappe.db.set_value(d.doctype, d.name, "serial_no", serial_no)
|
||||
|
||||
@@ -154,7 +154,7 @@ class DocType(StockController):
|
||||
self.doc.production_order = None
|
||||
|
||||
def check_duplicate_entry_for_production_order(self):
|
||||
other_ste = [t[0] for t in frappe.conn.get_values("Stock Entry", {
|
||||
other_ste = [t[0] for t in frappe.db.get_values("Stock Entry", {
|
||||
"production_order": self.doc.production_order,
|
||||
"purpose": self.doc.purpose,
|
||||
"docstatus": ["!=", 2],
|
||||
@@ -162,10 +162,10 @@ class DocType(StockController):
|
||||
}, "name")]
|
||||
|
||||
if other_ste:
|
||||
production_item, qty = frappe.conn.get_value("Production Order",
|
||||
production_item, qty = frappe.db.get_value("Production Order",
|
||||
self.doc.production_order, ["production_item", "qty"])
|
||||
args = other_ste + [production_item]
|
||||
fg_qty_already_entered = frappe.conn.sql("""select sum(actual_qty)
|
||||
fg_qty_already_entered = frappe.db.sql("""select sum(actual_qty)
|
||||
from `tabStock Entry Detail`
|
||||
where parent in (%s)
|
||||
and item_code = %s
|
||||
@@ -203,7 +203,7 @@ class DocType(StockController):
|
||||
incoming_rate = 0
|
||||
if self.doc.purpose == "Sales Return" and \
|
||||
(self.doc.delivery_note_no or self.doc.sales_invoice_no):
|
||||
sle = frappe.conn.sql("""select name, posting_date, posting_time,
|
||||
sle = frappe.db.sql("""select name, posting_date, posting_time,
|
||||
actual_qty, stock_value, warehouse from `tabStock Ledger Entry`
|
||||
where voucher_type = %s and voucher_no = %s and
|
||||
item_code = %s limit 1""",
|
||||
@@ -231,7 +231,7 @@ class DocType(StockController):
|
||||
|
||||
def validate_bom(self):
|
||||
for d in getlist(self.doclist, 'mtn_details'):
|
||||
if d.bom_no and not frappe.conn.sql("""select name from `tabBOM`
|
||||
if d.bom_no and not frappe.db.sql("""select name from `tabBOM`
|
||||
where item = %s and name = %s and docstatus = 1 and is_active = 1""",
|
||||
(d.item_code, d.bom_no)):
|
||||
msgprint(_("Item") + " %s: " % cstr(d.item_code)
|
||||
@@ -296,7 +296,7 @@ class DocType(StockController):
|
||||
returned=_("Max Returnable Qty"), qty=returnable_qty), StockOverReturnError)
|
||||
|
||||
def get_already_returned_item_qty(self, ref_fieldname):
|
||||
return dict(frappe.conn.sql("""select item_code, sum(transfer_qty) as qty
|
||||
return dict(frappe.db.sql("""select item_code, sum(transfer_qty) as qty
|
||||
from `tabStock Entry Detail` where parent in (
|
||||
select name from `tabStock Entry` where `%s`=%s and docstatus=1)
|
||||
group by item_code""" % (ref_fieldname, "%s"), (self.doc.fields.get(ref_fieldname),)))
|
||||
@@ -358,7 +358,7 @@ class DocType(StockController):
|
||||
+ "(%s/%s)" % (produced_qty, flt(pro_bean.doc.qty)), StockOverProductionError)
|
||||
|
||||
status = 'Completed' if flt(produced_qty) >= flt(pro_bean.doc.qty) else 'In Process'
|
||||
frappe.conn.sql("""update `tabProduction Order` set status=%s, produced_qty=%s
|
||||
frappe.db.sql("""update `tabProduction Order` set status=%s, produced_qty=%s
|
||||
where name=%s""", (status, produced_qty, self.doc.production_order))
|
||||
|
||||
def update_planned_qty(self, pro_bean):
|
||||
@@ -372,7 +372,7 @@ class DocType(StockController):
|
||||
|
||||
def get_item_details(self, arg):
|
||||
arg = json.loads(arg)
|
||||
item = frappe.conn.sql("""select stock_uom, description, item_name,
|
||||
item = frappe.db.sql("""select stock_uom, description, item_name,
|
||||
expense_account, buying_cost_center from `tabItem`
|
||||
where name = %s and (ifnull(end_of_life,'')='' or end_of_life ='0000-00-00'
|
||||
or end_of_life > now())""", (arg.get('item_code')), as_dict = 1)
|
||||
@@ -385,7 +385,7 @@ class DocType(StockController):
|
||||
'description' : item and item[0]['description'] or '',
|
||||
'item_name' : item and item[0]['item_name'] or '',
|
||||
'expense_account' : item and item[0]['expense_account'] or arg.get("expense_account") \
|
||||
or frappe.conn.get_value("Company", arg.get("company"), "default_expense_account"),
|
||||
or frappe.db.get_value("Company", arg.get("company"), "default_expense_account"),
|
||||
'cost_center' : item and item[0]['buying_cost_center'] or arg.get("cost_center"),
|
||||
'qty' : 0,
|
||||
'transfer_qty' : 0,
|
||||
@@ -400,7 +400,7 @@ class DocType(StockController):
|
||||
|
||||
def get_uom_details(self, arg = ''):
|
||||
arg, ret = eval(arg), {}
|
||||
uom = frappe.conn.sql("""select conversion_factor from `tabUOM Conversion Detail`
|
||||
uom = frappe.db.sql("""select conversion_factor from `tabUOM Conversion Detail`
|
||||
where parent = %s and uom = %s""", (arg['item_code'], arg['uom']), as_dict = 1)
|
||||
if not uom or not flt(uom[0].conversion_factor):
|
||||
msgprint("There is no Conversion Factor for UOM '%s' in Item '%s'" % (arg['uom'],
|
||||
@@ -463,7 +463,7 @@ class DocType(StockController):
|
||||
|
||||
# add finished good item to Stock Entry Detail table -- along with bom_no
|
||||
if self.doc.production_order and self.doc.purpose == "Manufacture/Repack":
|
||||
item = frappe.conn.get_value("Item", pro_obj.doc.production_item, ["item_name",
|
||||
item = frappe.db.get_value("Item", pro_obj.doc.production_item, ["item_name",
|
||||
"description", "stock_uom", "expense_account", "buying_cost_center"], as_dict=1)
|
||||
self.add_to_stock_entry_detail({
|
||||
cstr(pro_obj.doc.production_item): {
|
||||
@@ -482,7 +482,7 @@ class DocType(StockController):
|
||||
if self.doc.purpose=="Material Receipt":
|
||||
self.doc.from_warehouse = ""
|
||||
|
||||
item = frappe.conn.sql("""select name, item_name, description,
|
||||
item = frappe.db.sql("""select name, item_name, description,
|
||||
stock_uom, expense_account, buying_cost_center from `tabItem`
|
||||
where name=(select item from tabBOM where name=%s)""",
|
||||
self.doc.bom_no, as_dict=1)
|
||||
@@ -550,7 +550,7 @@ class DocType(StockController):
|
||||
|
||||
def get_issued_qty(self):
|
||||
issued_item_qty = {}
|
||||
result = frappe.conn.sql("""select t1.item_code, sum(t1.qty)
|
||||
result = frappe.db.sql("""select t1.item_code, sum(t1.qty)
|
||||
from `tabStock Entry Detail` t1, `tabStock Entry` t2
|
||||
where t1.parent = t2.name and t2.production_order = %s and t2.docstatus = 1
|
||||
and t2.purpose = 'Material Transfer'
|
||||
@@ -562,7 +562,7 @@ class DocType(StockController):
|
||||
|
||||
def add_to_stock_entry_detail(self, item_dict, bom_no=None, idx=None):
|
||||
if not idx: idx = 1
|
||||
expense_account, cost_center = frappe.conn.get_values("Company", self.doc.company, \
|
||||
expense_account, cost_center = frappe.db.get_values("Company", self.doc.company, \
|
||||
["default_expense_account", "cost_center"])[0]
|
||||
|
||||
for d in item_dict:
|
||||
@@ -594,7 +594,7 @@ class DocType(StockController):
|
||||
def validate_with_material_request(self):
|
||||
for item in self.doclist.get({"parentfield": "mtn_details"}):
|
||||
if item.material_request:
|
||||
mreq_item = frappe.conn.get_value("Material Request Item",
|
||||
mreq_item = frappe.db.get_value("Material Request Item",
|
||||
{"name": item.material_request_item, "parent": item.material_request},
|
||||
["item_code", "warehouse", "idx"], as_dict=True)
|
||||
if mreq_item.item_code != item.item_code or mreq_item.warehouse != item.t_warehouse:
|
||||
@@ -606,16 +606,16 @@ class DocType(StockController):
|
||||
@frappe.whitelist()
|
||||
def get_party_details(ref_dt, ref_dn):
|
||||
if ref_dt in ["Delivery Note", "Sales Invoice"]:
|
||||
res = frappe.conn.get_value(ref_dt, ref_dn,
|
||||
res = frappe.db.get_value(ref_dt, ref_dn,
|
||||
["customer", "customer_name", "address_display as customer_address"], as_dict=1)
|
||||
else:
|
||||
res = frappe.conn.get_value(ref_dt, ref_dn,
|
||||
res = frappe.db.get_value(ref_dt, ref_dn,
|
||||
["supplier", "supplier_name", "address_display as supplier_address"], as_dict=1)
|
||||
return res or {}
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_production_order_details(production_order):
|
||||
result = frappe.conn.sql("""select bom_no,
|
||||
result = frappe.db.sql("""select bom_no,
|
||||
ifnull(qty, 0) - ifnull(produced_qty, 0) as fg_completed_qty, use_multi_level_bom,
|
||||
wip_warehouse from `tabProduction Order` where name = %s""", production_order, as_dict=1)
|
||||
return result and result[0] or {}
|
||||
@@ -625,7 +625,7 @@ def query_sales_return_doc(doctype, txt, searchfield, start, page_len, filters):
|
||||
if doctype == "Sales Invoice":
|
||||
conditions = "and update_stock=1"
|
||||
|
||||
return frappe.conn.sql("""select name, customer, customer_name
|
||||
return frappe.db.sql("""select name, customer, customer_name
|
||||
from `tab%s` where docstatus = 1
|
||||
and (`%s` like %%(txt)s
|
||||
or `customer` like %%(txt)s) %s %s
|
||||
@@ -636,7 +636,7 @@ def query_sales_return_doc(doctype, txt, searchfield, start, page_len, filters):
|
||||
as_list=True)
|
||||
|
||||
def query_purchase_return_doc(doctype, txt, searchfield, start, page_len, filters):
|
||||
return frappe.conn.sql("""select name, supplier, supplier_name
|
||||
return frappe.db.sql("""select name, supplier, supplier_name
|
||||
from `tab%s` where docstatus = 1
|
||||
and (`%s` like %%(txt)s
|
||||
or `supplier` like %%(txt)s) %s
|
||||
@@ -685,7 +685,7 @@ def get_batch_no(doctype, txt, searchfield, start, page_len, filters):
|
||||
}
|
||||
|
||||
if filters.get("s_warehouse"):
|
||||
batch_nos = frappe.conn.sql("""select batch_no
|
||||
batch_nos = frappe.db.sql("""select batch_no
|
||||
from `tabStock Ledger Entry` sle
|
||||
where item_code = '%(item_code)s'
|
||||
and warehouse = '%(s_warehouse)s'
|
||||
@@ -704,7 +704,7 @@ def get_batch_no(doctype, txt, searchfield, start, page_len, filters):
|
||||
if batch_nos:
|
||||
return batch_nos
|
||||
else:
|
||||
return frappe.conn.sql("""select name from `tabBatch`
|
||||
return frappe.db.sql("""select name from `tabBatch`
|
||||
where item = '%(item_code)s'
|
||||
and docstatus < 2
|
||||
and (ifnull(expiry_date, '2099-12-31') >= %(posting_date)s
|
||||
@@ -721,7 +721,7 @@ def get_stock_items_for_return(ref_doclist, parentfields):
|
||||
|
||||
all_items = list(set([d.item_code for d in
|
||||
ref_doclist.get({"parentfield": ["in", parentfields]})]))
|
||||
stock_items = frappe.conn.sql_list("""select name from `tabItem`
|
||||
stock_items = frappe.db.sql_list("""select name from `tabItem`
|
||||
where is_stock_item='Yes' and name in (%s)""" % (", ".join(["%s"] * len(all_items))),
|
||||
tuple(all_items))
|
||||
|
||||
@@ -878,7 +878,7 @@ def get_invoice_list(doctype, link_field, value):
|
||||
if isinstance(value, basestring):
|
||||
value = [value]
|
||||
|
||||
return frappe.conn.sql_list("""select distinct parent from `tab%s`
|
||||
return frappe.db.sql_list("""select distinct parent from `tab%s`
|
||||
where docstatus = 1 and `%s` in (%s)""" % (doctype, link_field,
|
||||
", ".join(["%s"]*len(value))), tuple(value))
|
||||
|
||||
|
||||
@@ -13,14 +13,14 @@ class TestStockEntry(unittest.TestCase):
|
||||
frappe.set_user("Administrator")
|
||||
set_perpetual_inventory(0)
|
||||
if hasattr(self, "old_default_company"):
|
||||
frappe.conn.set_default("company", self.old_default_company)
|
||||
frappe.db.set_default("company", self.old_default_company)
|
||||
|
||||
def test_auto_material_request(self):
|
||||
frappe.conn.sql("""delete from `tabMaterial Request Item`""")
|
||||
frappe.conn.sql("""delete from `tabMaterial Request`""")
|
||||
frappe.db.sql("""delete from `tabMaterial Request Item`""")
|
||||
frappe.db.sql("""delete from `tabMaterial Request`""")
|
||||
self._clear_stock_account_balance()
|
||||
|
||||
frappe.conn.set_value("Stock Settings", None, "auto_indent", True)
|
||||
frappe.db.set_value("Stock Settings", None, "auto_indent", True)
|
||||
|
||||
st1 = frappe.bean(copy=test_records[0])
|
||||
st1.insert()
|
||||
@@ -34,12 +34,12 @@ class TestStockEntry(unittest.TestCase):
|
||||
|
||||
reorder_item()
|
||||
|
||||
mr_name = frappe.conn.sql("""select parent from `tabMaterial Request Item`
|
||||
mr_name = frappe.db.sql("""select parent from `tabMaterial Request Item`
|
||||
where item_code='_Test Item'""")
|
||||
|
||||
self.assertTrue(mr_name)
|
||||
|
||||
frappe.conn.set_default("company", self.old_default_company)
|
||||
frappe.db.set_default("company", self.old_default_company)
|
||||
|
||||
def test_material_receipt_gl_entry(self):
|
||||
self._clear_stock_account_balance()
|
||||
@@ -49,7 +49,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
mr.insert()
|
||||
mr.submit()
|
||||
|
||||
stock_in_hand_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
|
||||
stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
|
||||
"master_name": mr.doclist[1].t_warehouse})
|
||||
|
||||
self.check_stock_ledger_entries("Stock Entry", mr.doc.name,
|
||||
@@ -64,10 +64,10 @@ class TestStockEntry(unittest.TestCase):
|
||||
|
||||
mr.cancel()
|
||||
|
||||
self.assertFalse(frappe.conn.sql("""select * from `tabStock Ledger Entry`
|
||||
self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
|
||||
where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
|
||||
|
||||
self.assertFalse(frappe.conn.sql("""select * from `tabGL Entry`
|
||||
self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
|
||||
where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
self.check_stock_ledger_entries("Stock Entry", mi.doc.name,
|
||||
[["_Test Item", "_Test Warehouse - _TC", -40.0]])
|
||||
|
||||
stock_in_hand_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
|
||||
stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
|
||||
"master_name": mi.doclist[1].s_warehouse})
|
||||
|
||||
self.check_gl_entries("Stock Entry", mi.doc.name,
|
||||
@@ -95,16 +95,16 @@ class TestStockEntry(unittest.TestCase):
|
||||
)
|
||||
|
||||
mi.cancel()
|
||||
self.assertFalse(frappe.conn.sql("""select * from `tabStock Ledger Entry`
|
||||
self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
|
||||
where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
|
||||
|
||||
self.assertFalse(frappe.conn.sql("""select * from `tabGL Entry`
|
||||
self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
|
||||
where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
|
||||
|
||||
self.assertEquals(frappe.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
|
||||
self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
|
||||
"item_code": mi.doclist[1].item_code}, "actual_qty"), 50)
|
||||
|
||||
self.assertEquals(frappe.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
|
||||
self.assertEquals(frappe.db.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
|
||||
"item_code": mi.doclist[1].item_code}, "stock_value"), 5000)
|
||||
|
||||
def test_material_transfer_gl_entry(self):
|
||||
@@ -120,10 +120,10 @@ class TestStockEntry(unittest.TestCase):
|
||||
self.check_stock_ledger_entries("Stock Entry", mtn.doc.name,
|
||||
[["_Test Item", "_Test Warehouse - _TC", -45.0], ["_Test Item", "_Test Warehouse 1 - _TC", 45.0]])
|
||||
|
||||
stock_in_hand_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
|
||||
stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
|
||||
"master_name": mtn.doclist[1].s_warehouse})
|
||||
|
||||
fixed_asset_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
|
||||
fixed_asset_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
|
||||
"master_name": mtn.doclist[1].t_warehouse})
|
||||
|
||||
|
||||
@@ -136,10 +136,10 @@ class TestStockEntry(unittest.TestCase):
|
||||
|
||||
|
||||
mtn.cancel()
|
||||
self.assertFalse(frappe.conn.sql("""select * from `tabStock Ledger Entry`
|
||||
self.assertFalse(frappe.db.sql("""select * from `tabStock Ledger Entry`
|
||||
where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))
|
||||
|
||||
self.assertFalse(frappe.conn.sql("""select * from `tabGL Entry`
|
||||
self.assertFalse(frappe.db.sql("""select * from `tabGL Entry`
|
||||
where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
[["_Test Item", "_Test Warehouse - _TC", -50.0],
|
||||
["_Test Item Home Desktop 100", "_Test Warehouse - _TC", 1]])
|
||||
|
||||
gl_entries = frappe.conn.sql("""select account, debit, credit
|
||||
gl_entries = frappe.db.sql("""select account, debit, credit
|
||||
from `tabGL Entry` where voucher_type='Stock Entry' and voucher_no=%s
|
||||
order by account desc""", repack.doc.name, as_dict=1)
|
||||
self.assertFalse(gl_entries)
|
||||
@@ -175,7 +175,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
repack.insert()
|
||||
repack.submit()
|
||||
|
||||
stock_in_hand_account = frappe.conn.get_value("Account", {"account_type": "Warehouse",
|
||||
stock_in_hand_account = frappe.db.get_value("Account", {"account_type": "Warehouse",
|
||||
"master_name": repack.doclist[2].t_warehouse})
|
||||
|
||||
self.check_gl_entries("Stock Entry", repack.doc.name,
|
||||
@@ -190,7 +190,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
expected_sle.sort(key=lambda x: x[0])
|
||||
|
||||
# check stock ledger entries
|
||||
sle = frappe.conn.sql("""select item_code, warehouse, actual_qty
|
||||
sle = frappe.db.sql("""select item_code, warehouse, actual_qty
|
||||
from `tabStock Ledger Entry` where voucher_type = %s
|
||||
and voucher_no = %s order by item_code, warehouse, actual_qty""",
|
||||
(voucher_type, voucher_no), as_list=1)
|
||||
@@ -205,7 +205,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
def check_gl_entries(self, voucher_type, voucher_no, expected_gl_entries):
|
||||
expected_gl_entries.sort(key=lambda x: x[0])
|
||||
|
||||
gl_entries = frappe.conn.sql("""select account, debit, credit
|
||||
gl_entries = frappe.db.sql("""select account, debit, credit
|
||||
from `tabGL Entry` where voucher_type=%s and voucher_no=%s
|
||||
order by account asc, debit asc""", (voucher_type, voucher_no), as_list=1)
|
||||
self.assertTrue(gl_entries)
|
||||
@@ -227,10 +227,10 @@ class TestStockEntry(unittest.TestCase):
|
||||
se2.insert()
|
||||
se2.submit()
|
||||
|
||||
frappe.conn.set_default("company", self.old_default_company)
|
||||
frappe.db.set_default("company", self.old_default_company)
|
||||
|
||||
def _get_actual_qty(self):
|
||||
return flt(frappe.conn.get_value("Bin", {"item_code": "_Test Item",
|
||||
return flt(frappe.db.get_value("Bin", {"item_code": "_Test Item",
|
||||
"warehouse": "_Test Warehouse - _TC"}, "actual_qty"))
|
||||
|
||||
def _test_sales_invoice_return(self, item_code, delivered_qty, returned_qty):
|
||||
@@ -506,7 +506,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
|
||||
self.assertEquals(actual_qty_1 - 5, actual_qty_2)
|
||||
|
||||
frappe.conn.set_default("company", self.old_default_company)
|
||||
frappe.db.set_default("company", self.old_default_company)
|
||||
|
||||
return se, pr.doc.name
|
||||
|
||||
@@ -608,17 +608,17 @@ class TestStockEntry(unittest.TestCase):
|
||||
|
||||
self.assertEquals(actual_qty_1 - 5, actual_qty_2)
|
||||
|
||||
frappe.conn.set_default("company", self.old_default_company)
|
||||
frappe.db.set_default("company", self.old_default_company)
|
||||
|
||||
return se, pr.doc.name
|
||||
|
||||
def _clear_stock_account_balance(self):
|
||||
frappe.conn.sql("delete from `tabStock Ledger Entry`")
|
||||
frappe.conn.sql("""delete from `tabBin`""")
|
||||
frappe.conn.sql("""delete from `tabGL Entry`""")
|
||||
frappe.db.sql("delete from `tabStock Ledger Entry`")
|
||||
frappe.db.sql("""delete from `tabBin`""")
|
||||
frappe.db.sql("""delete from `tabGL Entry`""")
|
||||
|
||||
self.old_default_company = frappe.conn.get_default("company")
|
||||
frappe.conn.set_default("company", "_Test Company")
|
||||
self.old_default_company = frappe.db.get_default("company")
|
||||
frappe.db.set_default("company", "_Test Company")
|
||||
|
||||
def test_serial_no_not_reqd(self):
|
||||
se = frappe.bean(copy=test_records[0])
|
||||
@@ -662,11 +662,11 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.insert()
|
||||
se.submit()
|
||||
|
||||
self.assertTrue(frappe.conn.exists("Serial No", "ABCD"))
|
||||
self.assertTrue(frappe.conn.exists("Serial No", "EFGH"))
|
||||
self.assertTrue(frappe.db.exists("Serial No", "ABCD"))
|
||||
self.assertTrue(frappe.db.exists("Serial No", "EFGH"))
|
||||
|
||||
se.cancel()
|
||||
self.assertFalse(frappe.conn.get_value("Serial No", "ABCD", "warehouse"))
|
||||
self.assertFalse(frappe.db.get_value("Serial No", "ABCD", "warehouse"))
|
||||
|
||||
def test_serial_no_not_exists(self):
|
||||
self._clear_stock_account_balance()
|
||||
@@ -699,8 +699,8 @@ class TestStockEntry(unittest.TestCase):
|
||||
|
||||
serial_nos = get_serial_nos(se.doclist[1].serial_no)
|
||||
|
||||
self.assertTrue(frappe.conn.exists("Serial No", serial_nos[0]))
|
||||
self.assertTrue(frappe.conn.exists("Serial No", serial_nos[1]))
|
||||
self.assertTrue(frappe.db.exists("Serial No", serial_nos[0]))
|
||||
self.assertTrue(frappe.db.exists("Serial No", serial_nos[1]))
|
||||
|
||||
return se
|
||||
|
||||
@@ -734,10 +734,10 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.doclist[1].t_warehouse = "_Test Warehouse 1 - _TC"
|
||||
se.insert()
|
||||
se.submit()
|
||||
self.assertTrue(frappe.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC")
|
||||
self.assertTrue(frappe.db.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC")
|
||||
|
||||
se.cancel()
|
||||
self.assertTrue(frappe.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse - _TC")
|
||||
self.assertTrue(frappe.db.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse - _TC")
|
||||
|
||||
def test_serial_warehouse_error(self):
|
||||
self._clear_stock_account_balance()
|
||||
@@ -760,7 +760,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.cancel()
|
||||
|
||||
serial_no = get_serial_nos(se.doclist[1].serial_no)[0]
|
||||
self.assertFalse(frappe.conn.get_value("Serial No", serial_no, "warehouse"))
|
||||
self.assertFalse(frappe.db.get_value("Serial No", serial_no, "warehouse"))
|
||||
|
||||
def test_warehouse_company_validation(self):
|
||||
set_perpetual_inventory(0)
|
||||
@@ -806,20 +806,20 @@ class TestStockEntry(unittest.TestCase):
|
||||
|
||||
def test_freeze_stocks (self):
|
||||
self._clear_stock_account_balance()
|
||||
frappe.conn.set_value('Stock Settings', None,'stock_auth_role', '')
|
||||
frappe.db.set_value('Stock Settings', None,'stock_auth_role', '')
|
||||
|
||||
# test freeze_stocks_upto
|
||||
date_newer_than_test_records = add_days(getdate(test_records[0][0]['posting_date']), 5)
|
||||
frappe.conn.set_value("Stock Settings", None, "stock_frozen_upto", date_newer_than_test_records)
|
||||
frappe.db.set_value("Stock Settings", None, "stock_frozen_upto", date_newer_than_test_records)
|
||||
se = frappe.bean(copy=test_records[0]).insert()
|
||||
self.assertRaises (StockFreezeError, se.submit)
|
||||
frappe.conn.set_value("Stock Settings", None, "stock_frozen_upto", '')
|
||||
frappe.db.set_value("Stock Settings", None, "stock_frozen_upto", '')
|
||||
|
||||
# test freeze_stocks_upto_days
|
||||
frappe.conn.set_value("Stock Settings", None, "stock_frozen_upto_days", 7)
|
||||
frappe.db.set_value("Stock Settings", None, "stock_frozen_upto_days", 7)
|
||||
se = frappe.bean(copy=test_records[0]).insert()
|
||||
self.assertRaises (StockFreezeError, se.submit)
|
||||
frappe.conn.set_value("Stock Settings", None, "stock_frozen_upto_days", 0)
|
||||
frappe.db.set_value("Stock Settings", None, "stock_frozen_upto_days", 0)
|
||||
|
||||
def make_serialized_item():
|
||||
se = frappe.bean(copy=test_records[0])
|
||||
|
||||
@@ -25,7 +25,7 @@ class DocType:
|
||||
if v.get('is_cancelled') == 'Yes':
|
||||
v['actual_qty'] = -flt(v['actual_qty'])
|
||||
# cancel matching entry
|
||||
frappe.conn.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
|
||||
frappe.db.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
|
||||
modified=%s, modified_by=%s
|
||||
where voucher_no=%s and voucher_type=%s""",
|
||||
(now(), frappe.session.user, v['voucher_no'], v['voucher_type']))
|
||||
@@ -53,5 +53,5 @@ class DocType:
|
||||
"""
|
||||
Repost everything!
|
||||
"""
|
||||
for wh in frappe.conn.sql("select name from tabWarehouse"):
|
||||
for wh in frappe.db.sql("select name from tabWarehouse"):
|
||||
get_obj('Warehouse', wh[0]).repost_stock()
|
||||
|
||||
@@ -37,7 +37,7 @@ class DocType(DocListController):
|
||||
#check for item quantity available in stock
|
||||
def actual_amt_check(self):
|
||||
if self.doc.batch_no:
|
||||
batch_bal_after_transaction = flt(frappe.conn.sql("""select sum(actual_qty)
|
||||
batch_bal_after_transaction = flt(frappe.db.sql("""select sum(actual_qty)
|
||||
from `tabStock Ledger Entry`
|
||||
where warehouse=%s and item_code=%s and batch_no=%s""",
|
||||
(self.doc.warehouse, self.doc.item_code, self.doc.batch_no))[0][0])
|
||||
@@ -60,11 +60,11 @@ class DocType(DocListController):
|
||||
if not self.doc.fields.get(k):
|
||||
msgprint("Stock Ledger Entry: '%s' is mandatory" % k, raise_exception = 1)
|
||||
elif k == 'warehouse':
|
||||
if not frappe.conn.sql("select name from tabWarehouse where name = '%s'" % self.doc.fields.get(k)):
|
||||
if not frappe.db.sql("select name from tabWarehouse where name = '%s'" % self.doc.fields.get(k)):
|
||||
msgprint("Warehouse: '%s' does not exist in the system. Please check." % self.doc.fields.get(k), raise_exception = 1)
|
||||
|
||||
def validate_item(self):
|
||||
item_det = frappe.conn.sql("""select name, has_batch_no, docstatus,
|
||||
item_det = frappe.db.sql("""select name, has_batch_no, docstatus,
|
||||
is_stock_item, has_serial_no, serial_no_series
|
||||
from tabItem where name=%s""",
|
||||
self.doc.item_code, as_dict=True)[0]
|
||||
@@ -78,7 +78,7 @@ class DocType(DocListController):
|
||||
frappe.throw("Batch number is mandatory for Item '%s'" % self.doc.item_code)
|
||||
|
||||
# check if batch belongs to item
|
||||
if not frappe.conn.sql("""select name from `tabBatch`
|
||||
if not frappe.db.sql("""select name from `tabBatch`
|
||||
where item='%s' and name ='%s' and docstatus != 2""" % (self.doc.item_code, self.doc.batch_no)):
|
||||
frappe.throw("'%s' is not a valid Batch Number for Item '%s'" % (self.doc.batch_no, self.doc.item_code))
|
||||
|
||||
@@ -86,15 +86,15 @@ class DocType(DocListController):
|
||||
self.doc.stock_uom = item_det.stock_uom
|
||||
|
||||
def check_stock_frozen_date(self):
|
||||
stock_frozen_upto = frappe.conn.get_value('Stock Settings', None, 'stock_frozen_upto') or ''
|
||||
stock_frozen_upto = frappe.db.get_value('Stock Settings', None, 'stock_frozen_upto') or ''
|
||||
if stock_frozen_upto:
|
||||
stock_auth_role = frappe.conn.get_value('Stock Settings', None,'stock_auth_role')
|
||||
stock_auth_role = frappe.db.get_value('Stock Settings', None,'stock_auth_role')
|
||||
if getdate(self.doc.posting_date) <= getdate(stock_frozen_upto) and not stock_auth_role in frappe.user.get_roles():
|
||||
msgprint("You are not authorized to do / modify back dated stock entries before %s" % getdate(stock_frozen_upto).strftime('%d-%m-%Y'), raise_exception=StockFreezeError)
|
||||
|
||||
stock_frozen_upto_days = int(frappe.conn.get_value('Stock Settings', None, 'stock_frozen_upto_days') or 0)
|
||||
stock_frozen_upto_days = int(frappe.db.get_value('Stock Settings', None, 'stock_frozen_upto_days') or 0)
|
||||
if stock_frozen_upto_days:
|
||||
stock_auth_role = frappe.conn.get_value('Stock Settings', None,'stock_auth_role')
|
||||
stock_auth_role = frappe.db.get_value('Stock Settings', None,'stock_auth_role')
|
||||
older_than_x_days_ago = (add_days(getdate(self.doc.posting_date), stock_frozen_upto_days) <= date.today())
|
||||
if older_than_x_days_ago and not stock_auth_role in frappe.user.get_roles():
|
||||
msgprint("You are not authorized to do / modify back dated stock entries older than %d days ago" %stock_frozen_upto_days, raise_exception=StockFreezeError)
|
||||
@@ -105,8 +105,8 @@ class DocType(DocListController):
|
||||
self.doc.posting_time = '00:00'
|
||||
|
||||
def on_doctype_update():
|
||||
if not frappe.conn.sql("""show index from `tabStock Ledger Entry`
|
||||
if not frappe.db.sql("""show index from `tabStock Ledger Entry`
|
||||
where Key_name="posting_sort_index" """):
|
||||
frappe.conn.commit()
|
||||
frappe.conn.sql("""alter table `tabStock Ledger Entry`
|
||||
frappe.db.commit()
|
||||
frappe.db.sql("""alter table `tabStock Ledger Entry`
|
||||
add index posting_sort_index(posting_date, posting_time, name)""")
|
||||
@@ -243,7 +243,7 @@ class DocType(StockController):
|
||||
"voucher_type": self.doc.doctype,
|
||||
"voucher_no": self.doc.name,
|
||||
"company": self.doc.company,
|
||||
"stock_uom": frappe.conn.get_value("Item", row.item_code, "stock_uom"),
|
||||
"stock_uom": frappe.db.get_value("Item", row.item_code, "stock_uom"),
|
||||
"voucher_detail_no": row.voucher_detail_no,
|
||||
"fiscal_year": self.doc.fiscal_year,
|
||||
"is_cancelled": "No"
|
||||
@@ -258,12 +258,12 @@ class DocType(StockController):
|
||||
""" Delete Stock Ledger Entries related to this voucher
|
||||
and repost future Stock Ledger Entries"""
|
||||
|
||||
existing_entries = frappe.conn.sql("""select distinct item_code, warehouse
|
||||
existing_entries = frappe.db.sql("""select distinct item_code, warehouse
|
||||
from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""",
|
||||
(self.doc.doctype, self.doc.name), as_dict=1)
|
||||
|
||||
# delete entries
|
||||
frappe.conn.sql("""delete from `tabStock Ledger Entry`
|
||||
frappe.db.sql("""delete from `tabStock Ledger Entry`
|
||||
where voucher_type=%s and voucher_no=%s""", (self.doc.doctype, self.doc.name))
|
||||
|
||||
# repost future entries for selected item_code, warehouse
|
||||
@@ -289,8 +289,8 @@ class DocType(StockController):
|
||||
|
||||
if not self.doc.expense_account:
|
||||
msgprint(_("Please enter Expense Account"), raise_exception=1)
|
||||
elif not frappe.conn.sql("""select * from `tabStock Ledger Entry`"""):
|
||||
if frappe.conn.get_value("Account", self.doc.expense_account,
|
||||
elif not frappe.db.sql("""select * from `tabStock Ledger Entry`"""):
|
||||
if frappe.db.get_value("Account", self.doc.expense_account,
|
||||
"is_pl_account") == "Yes":
|
||||
msgprint(_("""Expense Account can not be a PL Account, as this stock \
|
||||
reconciliation is an opening entry. \
|
||||
|
||||
@@ -37,20 +37,20 @@ class TestStockReconciliation(unittest.TestCase):
|
||||
stock_reco = self.submit_stock_reconciliation(d[0], d[1], d[2], d[3])
|
||||
|
||||
# check stock value
|
||||
res = frappe.conn.sql("""select stock_value from `tabStock Ledger Entry`
|
||||
res = frappe.db.sql("""select stock_value from `tabStock Ledger Entry`
|
||||
where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'
|
||||
and posting_date = %s and posting_time = %s order by name desc limit 1""",
|
||||
(d[2], d[3]))
|
||||
self.assertEqual(res and flt(res[0][0]) or 0, d[4])
|
||||
|
||||
# check bin qty and stock value
|
||||
bin = frappe.conn.sql("""select actual_qty, stock_value from `tabBin`
|
||||
bin = frappe.db.sql("""select actual_qty, stock_value from `tabBin`
|
||||
where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'""")
|
||||
|
||||
self.assertEqual(bin and [flt(bin[0][0]), flt(bin[0][1])] or [], [d[5], d[6]])
|
||||
|
||||
# no gl entries
|
||||
gl_entries = frappe.conn.sql("""select name from `tabGL Entry`
|
||||
gl_entries = frappe.db.sql("""select name from `tabGL Entry`
|
||||
where voucher_type = 'Stock Reconciliation' and voucher_no = %s""",
|
||||
stock_reco.doc.name)
|
||||
self.assertFalse(gl_entries)
|
||||
@@ -82,7 +82,7 @@ class TestStockReconciliation(unittest.TestCase):
|
||||
stock_reco = self.submit_stock_reconciliation(d[0], d[1], d[2], d[3])
|
||||
|
||||
# check stock value in sle
|
||||
res = frappe.conn.sql("""select stock_value from `tabStock Ledger Entry`
|
||||
res = frappe.db.sql("""select stock_value from `tabStock Ledger Entry`
|
||||
where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'
|
||||
and posting_date = %s and posting_time = %s order by name desc limit 1""",
|
||||
(d[2], d[3]))
|
||||
@@ -90,14 +90,14 @@ class TestStockReconciliation(unittest.TestCase):
|
||||
self.assertEqual(res and flt(res[0][0], 4) or 0, d[4])
|
||||
|
||||
# bin qty and stock value
|
||||
bin = frappe.conn.sql("""select actual_qty, stock_value from `tabBin`
|
||||
bin = frappe.db.sql("""select actual_qty, stock_value from `tabBin`
|
||||
where item_code = '_Test Item' and warehouse = '_Test Warehouse - _TC'""")
|
||||
|
||||
self.assertEqual(bin and [flt(bin[0][0]), flt(bin[0][1], 4)] or [],
|
||||
[flt(d[5]), flt(d[6])])
|
||||
|
||||
# no gl entries
|
||||
gl_entries = frappe.conn.sql("""select name from `tabGL Entry`
|
||||
gl_entries = frappe.db.sql("""select name from `tabGL Entry`
|
||||
where voucher_type = 'Stock Reconciliation' and voucher_no = %s""",
|
||||
stock_reco.doc.name)
|
||||
self.assertFalse(gl_entries)
|
||||
@@ -170,9 +170,9 @@ class TestStockReconciliation(unittest.TestCase):
|
||||
|
||||
|
||||
def cleanup_data(self):
|
||||
frappe.conn.sql("delete from `tabStock Ledger Entry`")
|
||||
frappe.conn.sql("delete from tabBin")
|
||||
frappe.conn.sql("delete from `tabGL Entry`")
|
||||
frappe.db.sql("delete from `tabStock Ledger Entry`")
|
||||
frappe.db.sql("delete from tabBin")
|
||||
frappe.db.sql("delete from `tabGL Entry`")
|
||||
|
||||
def submit_stock_reconciliation(self, qty, rate, posting_date, posting_time):
|
||||
stock_reco = frappe.bean([{
|
||||
@@ -193,8 +193,8 @@ class TestStockReconciliation(unittest.TestCase):
|
||||
return stock_reco
|
||||
|
||||
def insert_existing_sle(self, valuation_method):
|
||||
frappe.conn.set_value("Item", "_Test Item", "valuation_method", valuation_method)
|
||||
frappe.conn.set_default("allow_negative_stock", 1)
|
||||
frappe.db.set_value("Item", "_Test Item", "valuation_method", valuation_method)
|
||||
frappe.db.set_default("allow_negative_stock", 1)
|
||||
|
||||
stock_entry = [
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ class DocType:
|
||||
def validate(self):
|
||||
for key in ["item_naming_by", "item_group", "stock_uom",
|
||||
"allow_negative_stock"]:
|
||||
frappe.conn.set_default(key, self.doc.fields.get(key, ""))
|
||||
frappe.db.set_default(key, self.doc.fields.get(key, ""))
|
||||
|
||||
from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series
|
||||
set_by_naming_series("Item", "item_code",
|
||||
|
||||
@@ -33,7 +33,7 @@ class DocType:
|
||||
msgprint("Please Enter Conversion Factor.")
|
||||
raise Exception
|
||||
|
||||
stock_uom = frappe.conn.sql("select stock_uom from `tabItem` where name = '%s'" % self.doc.item_code)
|
||||
stock_uom = frappe.db.sql("select stock_uom from `tabItem` where name = '%s'" % self.doc.item_code)
|
||||
stock_uom = stock_uom and stock_uom[0][0]
|
||||
if cstr(self.doc.new_stock_uom) == cstr(stock_uom):
|
||||
msgprint("Item Master is already updated with New Stock UOM " + cstr(self.doc.new_stock_uom))
|
||||
@@ -49,9 +49,9 @@ class DocType:
|
||||
def update_bin(self):
|
||||
# update bin
|
||||
if flt(self.doc.conversion_factor) != flt(1):
|
||||
frappe.conn.sql("update `tabBin` set stock_uom = '%s' , indented_qty = ifnull(indented_qty,0) * %s, ordered_qty = ifnull(ordered_qty,0) * %s, reserved_qty = ifnull(reserved_qty,0) * %s, planned_qty = ifnull(planned_qty,0) * %s, projected_qty = actual_qty + ordered_qty + indented_qty + planned_qty - reserved_qty where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.item_code) )
|
||||
frappe.db.sql("update `tabBin` set stock_uom = '%s' , indented_qty = ifnull(indented_qty,0) * %s, ordered_qty = ifnull(ordered_qty,0) * %s, reserved_qty = ifnull(reserved_qty,0) * %s, planned_qty = ifnull(planned_qty,0) * %s, projected_qty = actual_qty + ordered_qty + indented_qty + planned_qty - reserved_qty where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.item_code) )
|
||||
else:
|
||||
frappe.conn.sql("update `tabBin` set stock_uom = '%s' where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.item_code) )
|
||||
frappe.db.sql("update `tabBin` set stock_uom = '%s' where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.item_code) )
|
||||
|
||||
# acknowledge user
|
||||
msgprint(" All Bins Updated Successfully.")
|
||||
@@ -61,16 +61,16 @@ class DocType:
|
||||
from erpnext.stock.stock_ledger import update_entries_after
|
||||
|
||||
if flt(self.doc.conversion_factor) != flt(1):
|
||||
frappe.conn.sql("update `tabStock Ledger Entry` set stock_uom = '%s', actual_qty = ifnull(actual_qty,0) * '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.item_code))
|
||||
frappe.db.sql("update `tabStock Ledger Entry` set stock_uom = '%s', actual_qty = ifnull(actual_qty,0) * '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.item_code))
|
||||
else:
|
||||
frappe.conn.sql("update `tabStock Ledger Entry` set stock_uom = '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.item_code))
|
||||
frappe.db.sql("update `tabStock Ledger Entry` set stock_uom = '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.item_code))
|
||||
|
||||
# acknowledge user
|
||||
msgprint("Stock Ledger Entries Updated Successfully.")
|
||||
|
||||
# update item valuation
|
||||
if flt(self.doc.conversion_factor) != flt(1):
|
||||
wh = frappe.conn.sql("select name from `tabWarehouse`")
|
||||
wh = frappe.db.sql("select name from `tabWarehouse`")
|
||||
for w in wh:
|
||||
update_entries_after({"item_code": self.doc.item_code, "warehouse": w[0]})
|
||||
|
||||
@@ -90,8 +90,8 @@ class DocType:
|
||||
|
||||
|
||||
def validate_uom_integer_type(self):
|
||||
current_is_integer = frappe.conn.get_value("UOM", self.doc.current_stock_uom, "must_be_whole_number")
|
||||
new_is_integer = frappe.conn.get_value("UOM", self.doc.new_stock_uom, "must_be_whole_number")
|
||||
current_is_integer = frappe.db.get_value("UOM", self.doc.current_stock_uom, "must_be_whole_number")
|
||||
new_is_integer = frappe.db.get_value("UOM", self.doc.new_stock_uom, "must_be_whole_number")
|
||||
|
||||
if current_is_integer and not new_is_integer:
|
||||
frappe.msgprint("New UOM must be of type Whole Number", raise_exception=True)
|
||||
@@ -104,5 +104,5 @@ class DocType:
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_stock_uom(item_code):
|
||||
return { 'current_stock_uom': cstr(frappe.conn.get_value('Item', item_code, 'stock_uom')) }
|
||||
return { 'current_stock_uom': cstr(frappe.db.get_value('Item', item_code, 'stock_uom')) }
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ class DocType:
|
||||
self.doclist = doclist
|
||||
|
||||
def autoname(self):
|
||||
suffix = " - " + frappe.conn.get_value("Company", self.doc.company, "abbr")
|
||||
suffix = " - " + frappe.db.get_value("Company", self.doc.company, "abbr")
|
||||
if not self.doc.warehouse_name.endswith(suffix):
|
||||
self.doc.name = self.doc.warehouse_name + suffix
|
||||
|
||||
@@ -24,8 +24,8 @@ class DocType:
|
||||
|
||||
def update_parent_account(self):
|
||||
if not self.doc.__islocal and (self.doc.create_account_under !=
|
||||
frappe.conn.get_value("Warehouse", self.doc.name, "create_account_under")):
|
||||
warehouse_account = frappe.conn.get_value("Account",
|
||||
frappe.db.get_value("Warehouse", self.doc.name, "create_account_under")):
|
||||
warehouse_account = frappe.db.get_value("Account",
|
||||
{"account_type": "Warehouse", "company": self.doc.company,
|
||||
"master_name": self.doc.name}, ["name", "parent_account"])
|
||||
if warehouse_account and warehouse_account[1] != self.doc.create_account_under:
|
||||
@@ -38,10 +38,10 @@ class DocType:
|
||||
|
||||
def create_account_head(self):
|
||||
if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
|
||||
if not frappe.conn.get_value("Account", {"account_type": "Warehouse",
|
||||
"master_name": self.doc.name}) and not frappe.conn.get_value("Account",
|
||||
if not frappe.db.get_value("Account", {"account_type": "Warehouse",
|
||||
"master_name": self.doc.name}) and not frappe.db.get_value("Account",
|
||||
{"account_name": self.doc.warehouse_name}):
|
||||
if self.doc.fields.get("__islocal") or not frappe.conn.get_value(
|
||||
if self.doc.fields.get("__islocal") or not frappe.db.get_value(
|
||||
"Stock Ledger Entry", {"warehouse": self.doc.name}):
|
||||
self.validate_parent_account()
|
||||
ac_bean = frappe.bean({
|
||||
@@ -61,7 +61,7 @@ class DocType:
|
||||
|
||||
def validate_parent_account(self):
|
||||
if not self.doc.create_account_under:
|
||||
parent_account = frappe.conn.get_value("Account",
|
||||
parent_account = frappe.db.get_value("Account",
|
||||
{"account_name": "Stock Assets", "company": self.doc.company})
|
||||
if parent_account:
|
||||
self.doc.create_account_under = parent_account
|
||||
@@ -71,7 +71,7 @@ class DocType:
|
||||
|
||||
def on_trash(self):
|
||||
# delete bin
|
||||
bins = frappe.conn.sql("select * from `tabBin` where warehouse = %s",
|
||||
bins = frappe.db.sql("select * from `tabBin` where warehouse = %s",
|
||||
self.doc.name, as_dict=1)
|
||||
for d in bins:
|
||||
if d['actual_qty'] or d['reserved_qty'] or d['ordered_qty'] or \
|
||||
@@ -79,14 +79,14 @@ class DocType:
|
||||
throw("""Warehouse: %s can not be deleted as qty exists for item: %s"""
|
||||
% (self.doc.name, d['item_code']))
|
||||
else:
|
||||
frappe.conn.sql("delete from `tabBin` where name = %s", d['name'])
|
||||
frappe.db.sql("delete from `tabBin` where name = %s", d['name'])
|
||||
|
||||
warehouse_account = frappe.conn.get_value("Account",
|
||||
warehouse_account = frappe.db.get_value("Account",
|
||||
{"account_type": "Warehouse", "master_name": self.doc.name})
|
||||
if warehouse_account:
|
||||
frappe.delete_doc("Account", warehouse_account)
|
||||
|
||||
if frappe.conn.sql("""select name from `tabStock Ledger Entry`
|
||||
if frappe.db.sql("""select name from `tabStock Ledger Entry`
|
||||
where warehouse = %s""", self.doc.name):
|
||||
throw(_("""Warehouse can not be deleted as stock ledger entry
|
||||
exists for this warehouse."""))
|
||||
@@ -97,13 +97,13 @@ class DocType:
|
||||
new_warehouse = get_name_with_abbr(newdn, self.doc.company)
|
||||
|
||||
if merge:
|
||||
if not frappe.conn.exists("Warehouse", new_warehouse):
|
||||
if not frappe.db.exists("Warehouse", new_warehouse):
|
||||
frappe.throw(_("Warehouse ") + new_warehouse +_(" does not exists"))
|
||||
|
||||
if self.doc.company != frappe.conn.get_value("Warehouse", new_warehouse, "company"):
|
||||
if self.doc.company != frappe.db.get_value("Warehouse", new_warehouse, "company"):
|
||||
frappe.throw(_("Both Warehouse must belong to same Company"))
|
||||
|
||||
frappe.conn.sql("delete from `tabBin` where warehouse=%s", olddn)
|
||||
frappe.db.sql("delete from `tabBin` where warehouse=%s", olddn)
|
||||
|
||||
from erpnext.accounts.utils import rename_account_for
|
||||
rename_account_for("Warehouse", olddn, newdn, merge, self.doc.company)
|
||||
@@ -116,15 +116,15 @@ class DocType:
|
||||
|
||||
def recalculate_bin_qty(self, newdn):
|
||||
from erpnext.utilities.repost_stock import repost_stock
|
||||
frappe.conn.auto_commit_on_many_writes = 1
|
||||
frappe.conn.set_default("allow_negative_stock", 1)
|
||||
frappe.db.auto_commit_on_many_writes = 1
|
||||
frappe.db.set_default("allow_negative_stock", 1)
|
||||
|
||||
for item in frappe.conn.sql("""select distinct item_code from (
|
||||
for item in frappe.db.sql("""select distinct item_code from (
|
||||
select name as item_code from `tabItem` where ifnull(is_stock_item, 'Yes')='Yes'
|
||||
union
|
||||
select distinct item_code from tabBin) a"""):
|
||||
repost_stock(item[0], newdn)
|
||||
|
||||
frappe.conn.set_default("allow_negative_stock",
|
||||
frappe.conn.get_value("Stock Settings", None, "allow_negative_stock"))
|
||||
frappe.conn.auto_commit_on_many_writes = 0
|
||||
frappe.db.set_default("allow_negative_stock",
|
||||
frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
|
||||
frappe.db.auto_commit_on_many_writes = 0
|
||||
@@ -78,9 +78,9 @@ def get_item_details(args):
|
||||
|
||||
def get_item_code(barcode=None, serial_no=None):
|
||||
if barcode:
|
||||
item_code = frappe.conn.get_value("Item", {"barcode": barcode})
|
||||
item_code = frappe.db.get_value("Item", {"barcode": barcode})
|
||||
elif serial_no:
|
||||
item_code = frappe.conn.get_value("Serial No", serial_no, "item_code")
|
||||
item_code = frappe.db.get_value("Serial No", serial_no, "item_code")
|
||||
|
||||
if not item_code:
|
||||
throw(_("No Item found with ") + _("Barcode") if barcode else _("Serial No") +
|
||||
@@ -130,9 +130,9 @@ def get_basic_details(args, item_bean):
|
||||
"description": item.description_html or item.description,
|
||||
"warehouse": user_default_warehouse or args.warehouse or item.default_warehouse,
|
||||
"income_account": item.income_account or args.income_account \
|
||||
or frappe.conn.get_value("Company", args.company, "default_income_account"),
|
||||
or frappe.db.get_value("Company", args.company, "default_income_account"),
|
||||
"expense_account": item.expense_account or args.expense_account \
|
||||
or frappe.conn.get_value("Company", args.company, "default_expense_account"),
|
||||
or frappe.db.get_value("Company", args.company, "default_expense_account"),
|
||||
"cost_center": item.selling_cost_center \
|
||||
if args.transaction_type == "selling" else item.buying_cost_center,
|
||||
"batch_no": None,
|
||||
@@ -163,7 +163,7 @@ def get_price_list_rate(args, item_bean, out):
|
||||
validate_price_list(args)
|
||||
validate_conversion_rate(args, meta)
|
||||
|
||||
price_list_rate = frappe.conn.get_value("Item Price",
|
||||
price_list_rate = frappe.db.get_value("Item Price",
|
||||
{"price_list": args.price_list, "item_code": args.item_code}, "price_list_rate")
|
||||
|
||||
if not price_list_rate: return {}
|
||||
@@ -178,7 +178,7 @@ def get_price_list_rate(args, item_bean, out):
|
||||
|
||||
def validate_price_list(args):
|
||||
if args.get("price_list"):
|
||||
if not frappe.conn.get_value("Price List",
|
||||
if not frappe.db.get_value("Price List",
|
||||
{"name": args.price_list, args.transaction_type: 1, "enabled": 1}):
|
||||
throw(_("Price List is either disabled or for not ") + _(args.transaction_type))
|
||||
else:
|
||||
@@ -208,7 +208,7 @@ def validate_conversion_rate(args, meta):
|
||||
frappe._dict({"fields": args})))
|
||||
|
||||
def get_item_discount(item_group, customer):
|
||||
parent_item_groups = [x[0] for x in frappe.conn.sql("""SELECT parent.name
|
||||
parent_item_groups = [x[0] for x in frappe.db.sql("""SELECT parent.name
|
||||
FROM `tabItem Group` AS node, `tabItem Group` AS parent
|
||||
WHERE parent.lft <= node.lft and parent.rgt >= node.rgt and node.name = %s
|
||||
GROUP BY parent.name
|
||||
@@ -216,7 +216,7 @@ def get_item_discount(item_group, customer):
|
||||
|
||||
discount = 0
|
||||
for d in parent_item_groups:
|
||||
res = frappe.conn.sql("""select discount, name from `tabCustomer Discount`
|
||||
res = frappe.db.sql("""select discount, name from `tabCustomer Discount`
|
||||
where parent = %s and item_group = %s""", (customer, d))
|
||||
if res:
|
||||
discount = flt(res[0][0])
|
||||
@@ -253,17 +253,17 @@ def get_pos_settings_item_details(company, args, pos_settings=None):
|
||||
return res
|
||||
|
||||
def get_pos_settings(company):
|
||||
pos_settings = frappe.conn.sql("""select * from `tabPOS Setting` where user = %s
|
||||
pos_settings = frappe.db.sql("""select * from `tabPOS Setting` where user = %s
|
||||
and company = %s""", (frappe.session['user'], company), as_dict=1)
|
||||
|
||||
if not pos_settings:
|
||||
pos_settings = frappe.conn.sql("""select * from `tabPOS Setting`
|
||||
pos_settings = frappe.db.sql("""select * from `tabPOS Setting`
|
||||
where ifnull(user,'') = '' and company = %s""", company, as_dict=1)
|
||||
|
||||
return pos_settings and pos_settings[0] or None
|
||||
|
||||
def get_serial_nos_by_fifo(args, item_bean):
|
||||
return "\n".join(frappe.conn.sql_list("""select name from `tabSerial No`
|
||||
return "\n".join(frappe.db.sql_list("""select name from `tabSerial No`
|
||||
where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available'
|
||||
order by timestamp(purchase_date, purchase_time) asc limit %(qty)s""", {
|
||||
"item_code": args.item_code,
|
||||
@@ -273,15 +273,15 @@ def get_serial_nos_by_fifo(args, item_bean):
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_conversion_factor(item_code, uom):
|
||||
return {"conversion_factor": frappe.conn.get_value("UOM Conversion Detail",
|
||||
return {"conversion_factor": frappe.db.get_value("UOM Conversion Detail",
|
||||
{"parent": item_code, "uom": uom}, "conversion_factor")}
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_projected_qty(item_code, warehouse):
|
||||
return {"projected_qty": frappe.conn.get_value("Bin",
|
||||
return {"projected_qty": frappe.db.get_value("Bin",
|
||||
{"item_code": item_code, "warehouse": warehouse}, "projected_qty")}
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_available_qty(item_code, warehouse):
|
||||
return frappe.conn.get_value("Bin", {"item_code": item_code, "warehouse": warehouse},
|
||||
return frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse},
|
||||
["projected_qty", "actual_qty"], as_dict=True) or {}
|
||||
@@ -49,7 +49,7 @@ def get_conditions(filters):
|
||||
#get all details
|
||||
def get_stock_ledger_entries(filters):
|
||||
conditions = get_conditions(filters)
|
||||
return frappe.conn.sql("""select item_code, batch_no, warehouse,
|
||||
return frappe.db.sql("""select item_code, batch_no, warehouse,
|
||||
posting_date, actual_qty
|
||||
from `tabStock Ledger Entry`
|
||||
where docstatus < 2 %s order by item_code, warehouse""" %
|
||||
@@ -79,7 +79,7 @@ def get_item_warehouse_batch_map(filters):
|
||||
|
||||
def get_item_details(filters):
|
||||
item_map = {}
|
||||
for d in frappe.conn.sql("select name, item_name, description from tabItem", as_dict=1):
|
||||
for d in frappe.db.sql("select name, item_name, description from tabItem", as_dict=1):
|
||||
item_map.setdefault(d.name, d)
|
||||
|
||||
return item_map
|
||||
@@ -45,7 +45,7 @@ def get_item_details():
|
||||
|
||||
item_map = {}
|
||||
|
||||
for i in frappe.conn.sql("select name, item_name, description, \
|
||||
for i in frappe.db.sql("select name, item_name, description, \
|
||||
stock_uom, standard_rate from tabItem \
|
||||
order by item_code", as_dict=1):
|
||||
item_map.setdefault(i.name, i)
|
||||
@@ -57,7 +57,7 @@ def get_price_list():
|
||||
|
||||
rate = {}
|
||||
|
||||
price_list = frappe.conn.sql("""select ip.item_code, ip.buying, ip.selling,
|
||||
price_list = frappe.db.sql("""select ip.item_code, ip.buying, ip.selling,
|
||||
concat(ip.price_list, " - ", ip.currency, " ", ip.price_list_rate) as price
|
||||
from `tabItem Price` ip, `tabPrice List` pl
|
||||
where ip.price_list=pl.name and pl.enabled=1""", as_dict=1)
|
||||
@@ -105,7 +105,7 @@ def get_last_purchase_rate():
|
||||
order by result.item_code asc, result.posting_date desc) result_wrapper
|
||||
group by item_code"""
|
||||
|
||||
for d in frappe.conn.sql(query, as_dict=1):
|
||||
for d in frappe.db.sql(query, as_dict=1):
|
||||
item_last_purchase_rate_map.setdefault(d.item_code, d.base_rate)
|
||||
|
||||
return item_last_purchase_rate_map
|
||||
@@ -115,7 +115,7 @@ def get_item_bom_rate():
|
||||
|
||||
item_bom_map = {}
|
||||
|
||||
for b in frappe.conn.sql("""select item, (total_cost/quantity) as bom_rate
|
||||
for b in frappe.db.sql("""select item, (total_cost/quantity) as bom_rate
|
||||
from `tabBOM` where is_active=1 and is_default=1""", as_dict=1):
|
||||
item_bom_map.setdefault(b.item, flt(b.bom_rate))
|
||||
|
||||
@@ -126,7 +126,7 @@ def get_valuation_rate():
|
||||
|
||||
item_val_rate_map = {}
|
||||
|
||||
for d in frappe.conn.sql("""select item_code,
|
||||
for d in frappe.db.sql("""select item_code,
|
||||
sum(actual_qty*valuation_rate)/sum(actual_qty) as val_rate
|
||||
from tabBin where actual_qty > 0 group by item_code""", as_dict=1):
|
||||
item_val_rate_map.setdefault(d.item_code, d.val_rate)
|
||||
|
||||
@@ -6,7 +6,7 @@ from frappe.utils import getdate, flt
|
||||
|
||||
def execute(filters=None):
|
||||
if not filters: filters = {}
|
||||
float_preceision = frappe.conn.get_default("float_preceision")
|
||||
float_preceision = frappe.db.get_default("float_preceision")
|
||||
|
||||
condition =get_condition(filters)
|
||||
|
||||
@@ -42,12 +42,12 @@ def get_columns():
|
||||
]
|
||||
|
||||
def get_item_info():
|
||||
return frappe.conn.sql("""select name, item_name, description, min_order_qty,
|
||||
return frappe.db.sql("""select name, item_name, description, min_order_qty,
|
||||
lead_time_days from tabItem""", as_dict=1)
|
||||
|
||||
def get_consumed_items(condition):
|
||||
|
||||
cn_items = frappe.conn.sql("""select se_item.item_code,
|
||||
cn_items = frappe.db.sql("""select se_item.item_code,
|
||||
sum(se_item.actual_qty) as 'consume_qty'
|
||||
from `tabStock Entry` se, `tabStock Entry Detail` se_item
|
||||
where se.name = se_item.parent and se.docstatus = 1
|
||||
@@ -62,12 +62,12 @@ def get_consumed_items(condition):
|
||||
|
||||
def get_delivered_items(condition):
|
||||
|
||||
dn_items = frappe.conn.sql("""select dn_item.item_code, sum(dn_item.qty) as dn_qty
|
||||
dn_items = frappe.db.sql("""select dn_item.item_code, sum(dn_item.qty) as dn_qty
|
||||
from `tabDelivery Note` dn, `tabDelivery Note Item` dn_item
|
||||
where dn.name = dn_item.parent and dn.docstatus = 1 %s
|
||||
group by dn_item.item_code""" % (condition), as_dict=1)
|
||||
|
||||
si_items = frappe.conn.sql("""select si_item.item_name, sum(si_item.qty) as si_qty
|
||||
si_items = frappe.db.sql("""select si_item.item_name, sum(si_item.qty) as si_qty
|
||||
from `tabSales Invoice` si, `tabSales Invoice Item` si_item
|
||||
where si.name = si_item.parent and si.docstatus = 1 and
|
||||
ifnull(si.update_stock, 0) = 1 and ifnull(si.is_pos, 0) = 1 %s
|
||||
|
||||
@@ -63,7 +63,7 @@ def get_fifo_queue(filters):
|
||||
return item_details
|
||||
|
||||
def get_stock_ledger_entries(filters):
|
||||
return frappe.conn.sql("""select
|
||||
return frappe.db.sql("""select
|
||||
item.name, item.item_name, item_group, brand, description, item.stock_uom,
|
||||
actual_qty, posting_date
|
||||
from `tabStock Ledger Entry` sle,
|
||||
|
||||
@@ -32,7 +32,7 @@ def get_columns():
|
||||
"Batch:Link/Batch:100", "Serial #:Link/Serial No:100", "Company:Link/Company:100"]
|
||||
|
||||
def get_stock_ledger_entries(filters):
|
||||
return frappe.conn.sql("""select concat_ws(" ", posting_date, posting_time) as date,
|
||||
return frappe.db.sql("""select concat_ws(" ", posting_date, posting_time) as date,
|
||||
item_code, warehouse, actual_qty, qty_after_transaction,
|
||||
stock_value, voucher_type, voucher_no, batch_no, serial_no, company
|
||||
from `tabStock Ledger Entry`
|
||||
@@ -44,7 +44,7 @@ def get_stock_ledger_entries(filters):
|
||||
|
||||
def get_item_details(filters):
|
||||
item_details = {}
|
||||
for item in frappe.conn.sql("""select name, item_name, description, item_group,
|
||||
for item in frappe.db.sql("""select name, item_name, description, item_group,
|
||||
brand, stock_uom from `tabItem` {item_conditions}"""\
|
||||
.format(item_conditions=get_item_conditions(filters)), filters, as_dict=1):
|
||||
item_details.setdefault(item.name, item)
|
||||
|
||||
@@ -7,7 +7,7 @@ import frappe
|
||||
def execute(filters=None):
|
||||
columns = get_columns()
|
||||
|
||||
data = frappe.conn.sql("""select
|
||||
data = frappe.db.sql("""select
|
||||
item.name, item.item_name, description, item_group, brand, warehouse, item.stock_uom,
|
||||
actual_qty, planned_qty, indented_qty, ordered_qty, reserved_qty,
|
||||
projected_qty, item.re_order_level, item.re_order_qty
|
||||
|
||||
@@ -63,7 +63,7 @@ def get_consumed_details(filters):
|
||||
conditions, values = get_conditions(filters)
|
||||
consumed_details = {}
|
||||
|
||||
for d in frappe.conn.sql("""select sle.item_code, i.item_name, i.description,
|
||||
for d in frappe.db.sql("""select sle.item_code, i.item_name, i.description,
|
||||
i.stock_uom, sle.actual_qty, sle.stock_value_difference,
|
||||
sle.voucher_no, sle.voucher_type
|
||||
from `tabStock Ledger Entry` sle, `tabItem` i
|
||||
@@ -76,7 +76,7 @@ def get_suppliers_details(filters):
|
||||
item_supplier_map = {}
|
||||
supplier = filters.get('supplier')
|
||||
|
||||
for d in frappe.conn.sql("""select pr.supplier, pri.item_code from
|
||||
for d in frappe.db.sql("""select pr.supplier, pri.item_code from
|
||||
`tabPurchase Receipt` pr, `tabPurchase Receipt Item` pri
|
||||
where pr.name=pri.parent and pr.docstatus=1 and
|
||||
pri.item_code=(select name from `tabItem` where
|
||||
@@ -91,5 +91,5 @@ def get_suppliers_details(filters):
|
||||
return item_supplier_map
|
||||
|
||||
def get_material_transfer_vouchers():
|
||||
return frappe.conn.sql_list("""select name from `tabStock Entry` where
|
||||
return frappe.db.sql_list("""select name from `tabStock Entry` where
|
||||
purpose='Material Transfer' and docstatus=1""")
|
||||
@@ -49,7 +49,7 @@ def get_conditions(filters):
|
||||
#get all details
|
||||
def get_stock_ledger_entries(filters):
|
||||
conditions = get_conditions(filters)
|
||||
return frappe.conn.sql("""select item_code, warehouse,
|
||||
return frappe.db.sql("""select item_code, warehouse,
|
||||
posting_date, actual_qty, company
|
||||
from `tabStock Ledger Entry`
|
||||
where docstatus < 2 %s order by item_code, warehouse""" %
|
||||
@@ -79,7 +79,7 @@ def get_item_warehouse_map(filters):
|
||||
|
||||
def get_item_details(filters):
|
||||
item_map = {}
|
||||
for d in frappe.conn.sql("select name, item_name, description from tabItem", as_dict=1):
|
||||
for d in frappe.db.sql("select name, item_name, description from tabItem", as_dict=1):
|
||||
item_map.setdefault(d.name, d)
|
||||
|
||||
return item_map
|
||||
@@ -42,7 +42,7 @@ def make_sl_entries(sl_entries, is_amended=None):
|
||||
sl_entries[0].get('voucher_no'))
|
||||
|
||||
def set_as_cancel(voucher_type, voucher_no):
|
||||
frappe.conn.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
|
||||
frappe.db.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
|
||||
modified=%s, modified_by=%s
|
||||
where voucher_no=%s and voucher_type=%s""",
|
||||
(now(), frappe.session.user, voucher_type, voucher_no))
|
||||
@@ -56,7 +56,7 @@ def make_entry(args):
|
||||
return sle.doc.name
|
||||
|
||||
def delete_cancelled_entry(voucher_type, voucher_no):
|
||||
frappe.conn.sql("""delete from `tabStock Ledger Entry`
|
||||
frappe.db.sql("""delete from `tabStock Ledger Entry`
|
||||
where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
|
||||
|
||||
def update_entries_after(args, verbose=1):
|
||||
@@ -89,7 +89,7 @@ def update_entries_after(args, verbose=1):
|
||||
stock_value_difference = 0.0
|
||||
|
||||
for sle in entries_to_fix:
|
||||
if sle.serial_no or not cint(frappe.conn.get_default("allow_negative_stock")):
|
||||
if sle.serial_no or not cint(frappe.db.get_default("allow_negative_stock")):
|
||||
# validate negative stock for serialized items, fifo valuation
|
||||
# or when negative stock is not allowed for moving average
|
||||
if not validate_negative_stock(qty_after_transaction, sle):
|
||||
@@ -125,7 +125,7 @@ def update_entries_after(args, verbose=1):
|
||||
prev_stock_value = stock_value
|
||||
|
||||
# update current sle
|
||||
frappe.conn.sql("""update `tabStock Ledger Entry`
|
||||
frappe.db.sql("""update `tabStock Ledger Entry`
|
||||
set qty_after_transaction=%s, valuation_rate=%s, stock_queue=%s,
|
||||
stock_value=%s, stock_value_difference=%s where name=%s""",
|
||||
(qty_after_transaction, valuation_rate,
|
||||
@@ -135,7 +135,7 @@ def update_entries_after(args, verbose=1):
|
||||
_raise_exceptions(args, verbose)
|
||||
|
||||
# update bin
|
||||
if not frappe.conn.exists({"doctype": "Bin", "item_code": args["item_code"],
|
||||
if not frappe.db.exists({"doctype": "Bin", "item_code": args["item_code"],
|
||||
"warehouse": args["warehouse"]}):
|
||||
bin_wrapper = frappe.bean([{
|
||||
"doctype": "Bin",
|
||||
@@ -145,7 +145,7 @@ def update_entries_after(args, verbose=1):
|
||||
bin_wrapper.ignore_permissions = 1
|
||||
bin_wrapper.insert()
|
||||
|
||||
frappe.conn.sql("""update `tabBin` set valuation_rate=%s, actual_qty=%s,
|
||||
frappe.db.sql("""update `tabBin` set valuation_rate=%s, actual_qty=%s,
|
||||
stock_value=%s,
|
||||
projected_qty = (actual_qty + indented_qty + ordered_qty + planned_qty - reserved_qty)
|
||||
where item_code=%s and warehouse=%s""", (valuation_rate, qty_after_transaction,
|
||||
@@ -181,7 +181,7 @@ def get_stock_ledger_entries(args, conditions=None, order="desc", limit=None, fo
|
||||
if not args.get("posting_time"):
|
||||
args["posting_time"] = "00:00"
|
||||
|
||||
return frappe.conn.sql("""select * from `tabStock Ledger Entry`
|
||||
return frappe.db.sql("""select * from `tabStock Ledger Entry`
|
||||
where item_code = %%(item_code)s
|
||||
and warehouse = %%(warehouse)s
|
||||
and ifnull(is_cancelled, 'No')='No'
|
||||
@@ -223,7 +223,7 @@ def get_serialized_values(qty_after_transaction, sle, valuation_rate):
|
||||
elif incoming_rate == 0 or flt(sle.actual_qty) < 0:
|
||||
# In case of delivery/stock issue, get average purchase rate
|
||||
# of serial nos of current entry
|
||||
incoming_rate = flt(frappe.conn.sql("""select avg(ifnull(purchase_rate, 0))
|
||||
incoming_rate = flt(frappe.db.sql("""select avg(ifnull(purchase_rate, 0))
|
||||
from `tabSerial No` where name in (%s)""" % (", ".join(["%s"]*len(serial_no))),
|
||||
tuple(serial_no))[0][0])
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ class InvalidWarehouseCompany(frappe.ValidationError): pass
|
||||
def get_stock_balance_on(warehouse, posting_date=None):
|
||||
if not posting_date: posting_date = nowdate()
|
||||
|
||||
stock_ledger_entries = frappe.conn.sql("""
|
||||
stock_ledger_entries = frappe.db.sql("""
|
||||
SELECT
|
||||
item_code, stock_value
|
||||
FROM
|
||||
@@ -31,14 +31,14 @@ def get_stock_balance_on(warehouse, posting_date=None):
|
||||
|
||||
def get_latest_stock_balance():
|
||||
bin_map = {}
|
||||
for d in frappe.conn.sql("""SELECT item_code, warehouse, stock_value as stock_value
|
||||
for d in frappe.db.sql("""SELECT item_code, warehouse, stock_value as stock_value
|
||||
FROM tabBin""", as_dict=1):
|
||||
bin_map.setdefault(d.warehouse, {}).setdefault(d.item_code, flt(d.stock_value))
|
||||
|
||||
return bin_map
|
||||
|
||||
def get_bin(item_code, warehouse):
|
||||
bin = frappe.conn.get_value("Bin", {"item_code": item_code, "warehouse": warehouse})
|
||||
bin = frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse})
|
||||
if not bin:
|
||||
bin_wrapper = frappe.bean([{
|
||||
"doctype": "Bin",
|
||||
@@ -54,7 +54,7 @@ def get_bin(item_code, warehouse):
|
||||
return bin_obj
|
||||
|
||||
def update_bin(args):
|
||||
is_stock_item = frappe.conn.get_value('Item', args.get("item_code"), 'is_stock_item')
|
||||
is_stock_item = frappe.db.get_value('Item', args.get("item_code"), 'is_stock_item')
|
||||
if is_stock_item == 'Yes':
|
||||
bin = get_bin(args.get("item_code"), args.get("warehouse"))
|
||||
bin.update_stock(args)
|
||||
@@ -71,7 +71,7 @@ def get_incoming_rate(args):
|
||||
if args.get("serial_no"):
|
||||
in_rate = get_avg_purchase_rate(args.get("serial_no"))
|
||||
elif args.get("bom_no"):
|
||||
result = frappe.conn.sql("""select ifnull(total_cost, 0) / ifnull(quantity, 1)
|
||||
result = frappe.db.sql("""select ifnull(total_cost, 0) / ifnull(quantity, 1)
|
||||
from `tabBOM` where name = %s and docstatus=1 and is_active=1""", args.get("bom_no"))
|
||||
in_rate = result and flt(result[0][0]) or 0
|
||||
else:
|
||||
@@ -91,13 +91,13 @@ def get_avg_purchase_rate(serial_nos):
|
||||
"""get average value of serial numbers"""
|
||||
|
||||
serial_nos = get_valid_serial_nos(serial_nos)
|
||||
return flt(frappe.conn.sql("""select avg(ifnull(purchase_rate, 0)) from `tabSerial No`
|
||||
return flt(frappe.db.sql("""select avg(ifnull(purchase_rate, 0)) from `tabSerial No`
|
||||
where name in (%s)""" % ", ".join(["%s"] * len(serial_nos)),
|
||||
tuple(serial_nos))[0][0])
|
||||
|
||||
def get_valuation_method(item_code):
|
||||
"""get valuation method from item or default"""
|
||||
val_method = frappe.conn.get_value('Item', item_code, 'valuation_method')
|
||||
val_method = frappe.db.get_value('Item', item_code, 'valuation_method')
|
||||
if not val_method:
|
||||
val_method = get_global_default('valuation_method') or "FIFO"
|
||||
return val_method
|
||||
@@ -148,7 +148,7 @@ def get_valid_serial_nos(sr_nos, qty=0, item_code=''):
|
||||
return valid_serial_nos
|
||||
|
||||
def validate_warehouse_company(warehouse, company):
|
||||
warehouse_company = frappe.conn.get_value("Warehouse", warehouse, "company")
|
||||
warehouse_company = frappe.db.get_value("Warehouse", warehouse, "company")
|
||||
if warehouse_company and warehouse_company != company:
|
||||
frappe.msgprint(_("Warehouse does not belong to company.") + " (" + \
|
||||
warehouse + ", " + company +")", raise_exception=InvalidWarehouseCompany)
|
||||
@@ -182,11 +182,11 @@ def get_buying_amount(voucher_type, voucher_no, item_row, stock_ledger_entries):
|
||||
def reorder_item():
|
||||
""" Reorder item if stock reaches reorder level"""
|
||||
if getattr(frappe.local, "auto_indent", None) is None:
|
||||
frappe.local.auto_indent = cint(frappe.conn.get_value('Stock Settings', None, 'auto_indent'))
|
||||
frappe.local.auto_indent = cint(frappe.db.get_value('Stock Settings', None, 'auto_indent'))
|
||||
|
||||
if frappe.local.auto_indent:
|
||||
material_requests = {}
|
||||
bin_list = frappe.conn.sql("""select item_code, warehouse, projected_qty
|
||||
bin_list = frappe.db.sql("""select item_code, warehouse, projected_qty
|
||||
from tabBin where ifnull(item_code, '') != '' and ifnull(warehouse, '') != ''
|
||||
and exists (select name from `tabItem`
|
||||
where `tabItem`.name = `tabBin`.item_code and
|
||||
@@ -194,14 +194,14 @@ def reorder_item():
|
||||
(ifnull(end_of_life, '')='' or end_of_life > now()))""", as_dict=True)
|
||||
for bin in bin_list:
|
||||
#check if re-order is required
|
||||
item_reorder = frappe.conn.get("Item Reorder",
|
||||
item_reorder = frappe.db.get("Item Reorder",
|
||||
{"parent": bin.item_code, "warehouse": bin.warehouse})
|
||||
if item_reorder:
|
||||
reorder_level = item_reorder.warehouse_reorder_level
|
||||
reorder_qty = item_reorder.warehouse_reorder_qty
|
||||
material_request_type = item_reorder.material_request_type or "Purchase"
|
||||
else:
|
||||
reorder_level, reorder_qty = frappe.conn.get_value("Item", bin.item_code,
|
||||
reorder_level, reorder_qty = frappe.db.get_value("Item", bin.item_code,
|
||||
["re_order_level", "re_order_qty"])
|
||||
material_request_type = "Purchase"
|
||||
|
||||
@@ -209,9 +209,9 @@ def reorder_item():
|
||||
if flt(reorder_level) - flt(bin.projected_qty) > flt(reorder_qty):
|
||||
reorder_qty = flt(reorder_level) - flt(bin.projected_qty)
|
||||
|
||||
company = frappe.conn.get_value("Warehouse", bin.warehouse, "company") or \
|
||||
company = frappe.db.get_value("Warehouse", bin.warehouse, "company") or \
|
||||
frappe.defaults.get_defaults()["company"] or \
|
||||
frappe.conn.sql("""select name from tabCompany limit 1""")[0][0]
|
||||
frappe.db.sql("""select name from tabCompany limit 1""")[0][0]
|
||||
|
||||
material_requests.setdefault(material_request_type, frappe._dict()).setdefault(
|
||||
company, []).append(frappe._dict({
|
||||
@@ -276,7 +276,7 @@ def create_material_request(material_requests):
|
||||
|
||||
if mr_list:
|
||||
if getattr(frappe.local, "reorder_email_notify", None) is None:
|
||||
frappe.local.reorder_email_notify = cint(frappe.conn.get_value('Stock Settings', None,
|
||||
frappe.local.reorder_email_notify = cint(frappe.db.get_value('Stock Settings', None,
|
||||
'reorder_email_notify'))
|
||||
|
||||
if(frappe.local.reorder_email_notify):
|
||||
@@ -288,7 +288,7 @@ def create_material_request(material_requests):
|
||||
def send_email_notification(mr_list):
|
||||
""" Notify user about auto creation of indent"""
|
||||
|
||||
email_list = frappe.conn.sql_list("""select distinct r.parent
|
||||
email_list = frappe.db.sql_list("""select distinct r.parent
|
||||
from tabUserRole r, tabProfile p
|
||||
where p.name = r.parent and p.enabled = 1 and p.docstatus < 2
|
||||
and r.role in ('Purchase Manager','Material Manager')
|
||||
|
||||
Reference in New Issue
Block a user