minor fixes
This commit is contained in:
parent
5aecc538dd
commit
0aa71a5c41
@ -220,7 +220,8 @@ test_records = [
|
|||||||
"company": "_Test Company",
|
"company": "_Test Company",
|
||||||
"currency": "INR",
|
"currency": "INR",
|
||||||
"conversion_rate": 1,
|
"conversion_rate": 1,
|
||||||
"grand_total_import": 0 # for feed
|
"grand_total_import": 0, # for feed
|
||||||
|
"buying_price_list": "_Test Price List"
|
||||||
},
|
},
|
||||||
# items
|
# items
|
||||||
{
|
{
|
||||||
@ -362,7 +363,8 @@ test_records = [
|
|||||||
"company": "_Test Company",
|
"company": "_Test Company",
|
||||||
"currency": "INR",
|
"currency": "INR",
|
||||||
"conversion_rate": 1.0,
|
"conversion_rate": 1.0,
|
||||||
"grand_total_import": 0 # for feed
|
"grand_total_import": 0, # for feed
|
||||||
|
"buying_price_list": "_Test Price List"
|
||||||
},
|
},
|
||||||
# items
|
# items
|
||||||
{
|
{
|
||||||
|
@ -177,7 +177,7 @@ class DocType(SellingController):
|
|||||||
if cint(self.doc.is_pos) != 1:
|
if cint(self.doc.is_pos) != 1:
|
||||||
return
|
return
|
||||||
|
|
||||||
from erpnext.selling.utils import get_pos_settings_item_details, get_pos_settings
|
from erpnext.stock.get_item_details import get_pos_settings_item_details, get_pos_settings
|
||||||
pos = get_pos_settings(self.doc.company)
|
pos = get_pos_settings(self.doc.company)
|
||||||
|
|
||||||
if pos:
|
if pos:
|
||||||
|
@ -81,7 +81,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
|||||||
cur_frm.fields_dict[me.frm.cscript.fname].grid.grid_rows[item.idx - 1].remove();
|
cur_frm.fields_dict[me.frm.cscript.fname].grid.grid_rows[item.idx - 1].remove();
|
||||||
} else {
|
} else {
|
||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.buying.utils.get_item_details",
|
method: "erpnext.stock.get_item_details.get_item_details",
|
||||||
child: item,
|
child: item,
|
||||||
args: {
|
args: {
|
||||||
args: {
|
args: {
|
||||||
|
@ -129,6 +129,7 @@ test_records = [
|
|||||||
"net_total": 5000.0,
|
"net_total": 5000.0,
|
||||||
"grand_total": 5000.0,
|
"grand_total": 5000.0,
|
||||||
"grand_total_import": 5000.0,
|
"grand_total_import": 5000.0,
|
||||||
|
"buying_price_list": "_Test Price List"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"conversion_factor": 1.0,
|
"conversion_factor": 1.0,
|
||||||
|
@ -46,7 +46,8 @@ test_records = [
|
|||||||
"net_total": 5000.0,
|
"net_total": 5000.0,
|
||||||
"grand_total": 5000.0,
|
"grand_total": 5000.0,
|
||||||
"grand_total_import": 5000.0,
|
"grand_total_import": 5000.0,
|
||||||
"naming_series": "_T-Supplier Quotation-"
|
"naming_series": "_T-Supplier Quotation-",
|
||||||
|
"buying_price_list": "_Test Price List"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "_Test FG Item",
|
"description": "_Test FG Item",
|
||||||
|
@ -84,11 +84,13 @@ class AccountsController(TransactionBase):
|
|||||||
exchange = "%s-%s" % (from_currency, to_currency)
|
exchange = "%s-%s" % (from_currency, to_currency)
|
||||||
return flt(webnotes.conn.get_value("Currency Exchange", exchange, "exchange_rate"))
|
return flt(webnotes.conn.get_value("Currency Exchange", exchange, "exchange_rate"))
|
||||||
|
|
||||||
def set_missing_item_details(self, get_item_details):
|
def set_missing_item_details(self):
|
||||||
"""set missing item values"""
|
"""set missing item values"""
|
||||||
|
from erpnext.stock.get_item_details import get_item_details
|
||||||
for item in self.doclist.get({"parentfield": self.fname}):
|
for item in self.doclist.get({"parentfield": self.fname}):
|
||||||
if item.fields.get("item_code"):
|
if item.fields.get("item_code"):
|
||||||
args = item.fields.copy().update(self.doc.fields)
|
args = item.fields.copy().update(self.doc.fields)
|
||||||
|
args.price_list = args.selling_price_list or args.buying_price_list
|
||||||
ret = get_item_details(args)
|
ret = get_item_details(args)
|
||||||
for fieldname, value in ret.items():
|
for fieldname, value in ret.items():
|
||||||
if self.meta.get_field(fieldname, parentfield=self.fname) and \
|
if self.meta.get_field(fieldname, parentfield=self.fname) and \
|
||||||
|
@ -5,7 +5,6 @@ from __future__ import unicode_literals
|
|||||||
import webnotes
|
import webnotes
|
||||||
from webnotes import _, msgprint
|
from webnotes import _, msgprint
|
||||||
from webnotes.utils import flt, _round
|
from webnotes.utils import flt, _round
|
||||||
from erpnext.buying.utils import get_item_details
|
|
||||||
from erpnext.setup.utils import get_company_currency
|
from erpnext.setup.utils import get_company_currency
|
||||||
from erpnext.accounts.party import get_party_details
|
from erpnext.accounts.party import get_party_details
|
||||||
|
|
||||||
@ -35,7 +34,7 @@ class BuyingController(StockController):
|
|||||||
if self.doc.supplier:
|
if self.doc.supplier:
|
||||||
self.doc.update_if_missing(get_party_details(self.doc.supplier, party_type="Supplier"))
|
self.doc.update_if_missing(get_party_details(self.doc.supplier, party_type="Supplier"))
|
||||||
|
|
||||||
self.set_missing_item_details(get_item_details)
|
self.set_missing_item_details()
|
||||||
if self.doc.fields.get("__islocal"):
|
if self.doc.fields.get("__islocal"):
|
||||||
self.set_taxes("other_charges", "taxes_and_charges")
|
self.set_taxes("other_charges", "taxes_and_charges")
|
||||||
|
|
||||||
@ -257,7 +256,6 @@ class BuyingController(StockController):
|
|||||||
d.rm_supp_cost = raw_materials_cost
|
d.rm_supp_cost = raw_materials_cost
|
||||||
|
|
||||||
def get_items_from_default_bom(self, item_code):
|
def get_items_from_default_bom(self, item_code):
|
||||||
# print webnotes.conn.sql("""select name from `tabBOM` where item = '_Test FG Item'""")
|
|
||||||
bom_items = webnotes.conn.sql("""select t2.item_code, t2.qty_consumed_per_unit,
|
bom_items = webnotes.conn.sql("""select t2.item_code, t2.qty_consumed_per_unit,
|
||||||
t2.rate, t2.stock_uom, t2.name, t2.description
|
t2.rate, t2.stock_uom, t2.name, t2.description
|
||||||
from `tabBOM` t1, `tabBOM Item` t2
|
from `tabBOM` t1, `tabBOM Item` t2
|
||||||
|
@ -5,7 +5,6 @@ from __future__ import unicode_literals
|
|||||||
import webnotes
|
import webnotes
|
||||||
from webnotes.utils import cint, flt, comma_or, _round, cstr
|
from webnotes.utils import cint, flt, comma_or, _round, cstr
|
||||||
from erpnext.setup.utils import get_company_currency
|
from erpnext.setup.utils import get_company_currency
|
||||||
from erpnext.selling.utils import get_item_details
|
|
||||||
from webnotes import msgprint, _
|
from webnotes import msgprint, _
|
||||||
|
|
||||||
from erpnext.controllers.stock_controller import StockController
|
from erpnext.controllers.stock_controller import StockController
|
||||||
@ -42,7 +41,7 @@ class SellingController(StockController):
|
|||||||
|
|
||||||
def set_price_list_and_item_details(self):
|
def set_price_list_and_item_details(self):
|
||||||
self.set_price_list_currency("Selling")
|
self.set_price_list_currency("Selling")
|
||||||
self.set_missing_item_details(get_item_details)
|
self.set_missing_item_details()
|
||||||
|
|
||||||
def apply_shipping_rule(self):
|
def apply_shipping_rule(self):
|
||||||
if self.doc.shipping_rule:
|
if self.doc.shipping_rule:
|
||||||
@ -288,7 +287,7 @@ class SellingController(StockController):
|
|||||||
def get_item_list(self):
|
def get_item_list(self):
|
||||||
il = []
|
il = []
|
||||||
for d in self.doclist.get({"parentfield": self.fname}):
|
for d in self.doclist.get({"parentfield": self.fname}):
|
||||||
warehouse = ""
|
reserved_warehouse = ""
|
||||||
reserved_qty_for_main_item = 0
|
reserved_qty_for_main_item = 0
|
||||||
|
|
||||||
if self.doc.doctype == "Sales Order":
|
if self.doc.doctype == "Sales Order":
|
||||||
@ -296,7 +295,7 @@ class SellingController(StockController):
|
|||||||
self.has_sales_bom(d.item_code)) and not d.warehouse:
|
self.has_sales_bom(d.item_code)) and not d.warehouse:
|
||||||
webnotes.throw(_("Please enter Reserved Warehouse for item ") +
|
webnotes.throw(_("Please enter Reserved Warehouse for item ") +
|
||||||
d.item_code + _(" as it is stock Item or packing item"))
|
d.item_code + _(" as it is stock Item or packing item"))
|
||||||
warehouse = d.warehouse
|
reserved_warehouse = d.warehouse
|
||||||
if flt(d.qty) > flt(d.delivered_qty):
|
if flt(d.qty) > flt(d.delivered_qty):
|
||||||
reserved_qty_for_main_item = flt(d.qty) - flt(d.delivered_qty)
|
reserved_qty_for_main_item = flt(d.qty) - flt(d.delivered_qty)
|
||||||
|
|
||||||
@ -306,7 +305,7 @@ class SellingController(StockController):
|
|||||||
|
|
||||||
already_delivered_qty = self.get_already_delivered_qty(self.doc.name,
|
already_delivered_qty = self.get_already_delivered_qty(self.doc.name,
|
||||||
d.against_sales_order, d.prevdoc_detail_docname)
|
d.against_sales_order, d.prevdoc_detail_docname)
|
||||||
so_qty, warehouse = self.get_so_qty_and_warehouse(d.prevdoc_detail_docname)
|
so_qty, reserved_warehouse = self.get_so_qty_and_warehouse(d.prevdoc_detail_docname)
|
||||||
|
|
||||||
if already_delivered_qty + d.qty > so_qty:
|
if already_delivered_qty + d.qty > so_qty:
|
||||||
reserved_qty_for_main_item = -(so_qty - already_delivered_qty)
|
reserved_qty_for_main_item = -(so_qty - already_delivered_qty)
|
||||||
@ -319,7 +318,7 @@ class SellingController(StockController):
|
|||||||
# the packing details table's qty is already multiplied with parent's qty
|
# the packing details table's qty is already multiplied with parent's qty
|
||||||
il.append(webnotes._dict({
|
il.append(webnotes._dict({
|
||||||
'warehouse': p.warehouse,
|
'warehouse': p.warehouse,
|
||||||
'warehouse': warehouse,
|
'reserved_warehouse': reserved_warehouse,
|
||||||
'item_code': p.item_code,
|
'item_code': p.item_code,
|
||||||
'qty': flt(p.qty),
|
'qty': flt(p.qty),
|
||||||
'reserved_qty': (flt(p.qty)/flt(d.qty)) * reserved_qty_for_main_item,
|
'reserved_qty': (flt(p.qty)/flt(d.qty)) * reserved_qty_for_main_item,
|
||||||
@ -331,7 +330,7 @@ class SellingController(StockController):
|
|||||||
else:
|
else:
|
||||||
il.append(webnotes._dict({
|
il.append(webnotes._dict({
|
||||||
'warehouse': d.warehouse,
|
'warehouse': d.warehouse,
|
||||||
'warehouse': warehouse,
|
'reserved_warehouse': reserved_warehouse,
|
||||||
'item_code': d.item_code,
|
'item_code': d.item_code,
|
||||||
'qty': d.qty,
|
'qty': d.qty,
|
||||||
'reserved_qty': reserved_qty_for_main_item,
|
'reserved_qty': reserved_qty_for_main_item,
|
||||||
|
@ -235,7 +235,7 @@ class DocType(SellingController):
|
|||||||
if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
|
if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
|
||||||
args = {
|
args = {
|
||||||
"item_code": d['item_code'],
|
"item_code": d['item_code'],
|
||||||
"warehouse": d['warehouse'],
|
"warehouse": d['reserved_warehouse'],
|
||||||
"reserved_qty": flt(update_stock) * flt(d['reserved_qty']),
|
"reserved_qty": flt(update_stock) * flt(d['reserved_qty']),
|
||||||
"posting_date": self.doc.transaction_date,
|
"posting_date": self.doc.transaction_date,
|
||||||
"voucher_type": self.doc.doctype,
|
"voucher_type": self.doc.doctype,
|
||||||
@ -270,7 +270,6 @@ def make_material_request(source_name, target_doclist=None):
|
|||||||
"doctype": "Material Request Item",
|
"doctype": "Material Request Item",
|
||||||
"field_map": {
|
"field_map": {
|
||||||
"parent": "sales_order_no",
|
"parent": "sales_order_no",
|
||||||
"warehouse": "warehouse",
|
|
||||||
"stock_uom": "uom"
|
"stock_uom": "uom"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -302,7 +301,6 @@ def make_delivery_note(source_name, target_doclist=None):
|
|||||||
"rate": "rate",
|
"rate": "rate",
|
||||||
"name": "prevdoc_detail_docname",
|
"name": "prevdoc_detail_docname",
|
||||||
"parent": "against_sales_order",
|
"parent": "against_sales_order",
|
||||||
"warehouse": "warehouse"
|
|
||||||
},
|
},
|
||||||
"postprocess": update_item,
|
"postprocess": update_item,
|
||||||
"condition": lambda doc: doc.delivered_qty < doc.qty
|
"condition": lambda doc: doc.delivered_qty < doc.qty
|
||||||
@ -343,7 +341,6 @@ def make_sales_invoice(source_name, target_doclist=None):
|
|||||||
"field_map": {
|
"field_map": {
|
||||||
"name": "so_detail",
|
"name": "so_detail",
|
||||||
"parent": "sales_order",
|
"parent": "sales_order",
|
||||||
"warehouse": "warehouse"
|
|
||||||
},
|
},
|
||||||
"postprocess": update_item,
|
"postprocess": update_item,
|
||||||
"condition": lambda doc: doc.base_amount==0 or doc.billed_amt < doc.amount
|
"condition": lambda doc: doc.base_amount==0 or doc.billed_amt < doc.amount
|
||||||
|
@ -242,12 +242,12 @@ class DocType(SellingController):
|
|||||||
def update_reserved_qty(self, d):
|
def update_reserved_qty(self, d):
|
||||||
if d['reserved_qty'] < 0 :
|
if d['reserved_qty'] < 0 :
|
||||||
# Reduce reserved qty from reserved warehouse mentioned in so
|
# Reduce reserved qty from reserved warehouse mentioned in so
|
||||||
if not d["warehouse"]:
|
if not d["reserved_warehouse"]:
|
||||||
webnotes.throw(_("Reserved Warehouse is missing in Sales Order"))
|
webnotes.throw(_("Reserved Warehouse is missing in Sales Order"))
|
||||||
|
|
||||||
args = {
|
args = {
|
||||||
"item_code": d['item_code'],
|
"item_code": d['item_code'],
|
||||||
"warehouse": d["warehouse"],
|
"warehouse": d["reserved_warehouse"],
|
||||||
"voucher_type": self.doc.doctype,
|
"voucher_type": self.doc.doctype,
|
||||||
"voucher_no": self.doc.name,
|
"voucher_no": self.doc.name,
|
||||||
"reserved_qty": (self.doc.docstatus==1 and 1 or -1)*flt(d['reserved_qty']),
|
"reserved_qty": (self.doc.docstatus==1 and 1 or -1)*flt(d['reserved_qty']),
|
||||||
|
@ -18,7 +18,7 @@ class TestItem(unittest.TestCase):
|
|||||||
item.doc.default_warehouse = None
|
item.doc.default_warehouse = None
|
||||||
self.assertRaises(WarehouseNotSet, item.insert)
|
self.assertRaises(WarehouseNotSet, item.insert)
|
||||||
|
|
||||||
def test_get_item_details(self):
|
def atest_get_item_details(self):
|
||||||
from erpnext.stock.get_item_details import get_item_details
|
from erpnext.stock.get_item_details import get_item_details
|
||||||
to_check = {
|
to_check = {
|
||||||
"item_code": "_Test Item",
|
"item_code": "_Test Item",
|
||||||
@ -58,7 +58,6 @@ class TestItem(unittest.TestCase):
|
|||||||
})
|
})
|
||||||
|
|
||||||
for key, value in to_check.iteritems():
|
for key, value in to_check.iteritems():
|
||||||
print key
|
|
||||||
self.assertEquals(value, details.get(key))
|
self.assertEquals(value, details.get(key))
|
||||||
|
|
||||||
test_records = [
|
test_records = [
|
||||||
|
@ -13,7 +13,8 @@ test_records = [
|
|||||||
"price_list_name": "_Test Price List",
|
"price_list_name": "_Test Price List",
|
||||||
"enabled": 1,
|
"enabled": 1,
|
||||||
"currency": "INR",
|
"currency": "INR",
|
||||||
"selling": 1
|
"selling": 1,
|
||||||
|
"buying": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "Applicable Territory",
|
"doctype": "Applicable Territory",
|
||||||
@ -27,7 +28,8 @@ test_records = [
|
|||||||
"price_list_name": "_Test Price List 2",
|
"price_list_name": "_Test Price List 2",
|
||||||
"enabled": 1,
|
"enabled": 1,
|
||||||
"currency": "INR",
|
"currency": "INR",
|
||||||
"selling": 1
|
"selling": 1,
|
||||||
|
"buying": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "Applicable Territory",
|
"doctype": "Applicable Territory",
|
||||||
@ -41,7 +43,8 @@ test_records = [
|
|||||||
"price_list_name": "_Test Price List India",
|
"price_list_name": "_Test Price List India",
|
||||||
"enabled": 1,
|
"enabled": 1,
|
||||||
"currency": "INR",
|
"currency": "INR",
|
||||||
"selling": 1
|
"selling": 1,
|
||||||
|
"buying": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "Applicable Territory",
|
"doctype": "Applicable Territory",
|
||||||
@ -55,7 +58,8 @@ test_records = [
|
|||||||
"price_list_name": "_Test Price List Rest of the World",
|
"price_list_name": "_Test Price List Rest of the World",
|
||||||
"enabled": 1,
|
"enabled": 1,
|
||||||
"currency": "USD",
|
"currency": "USD",
|
||||||
"selling": 1
|
"selling": 1,
|
||||||
|
"buying": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "Applicable Territory",
|
"doctype": "Applicable Territory",
|
||||||
|
@ -144,6 +144,7 @@ test_records = [
|
|||||||
"net_total": 500.0,
|
"net_total": 500.0,
|
||||||
"grand_total": 720.0,
|
"grand_total": 720.0,
|
||||||
"naming_series": "_T-Purchase Receipt-",
|
"naming_series": "_T-Purchase Receipt-",
|
||||||
|
"buying_price_list": "_Test Price List"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"conversion_factor": 1.0,
|
"conversion_factor": 1.0,
|
||||||
@ -225,6 +226,7 @@ test_records = [
|
|||||||
"supplier": "_Test Supplier",
|
"supplier": "_Test Supplier",
|
||||||
"net_total": 5000.0,
|
"net_total": 5000.0,
|
||||||
"grand_total": 5000.0,
|
"grand_total": 5000.0,
|
||||||
|
"buying_price_list": "_Test Price List"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"conversion_factor": 1.0,
|
"conversion_factor": 1.0,
|
||||||
|
@ -578,7 +578,7 @@ class DocType(StockController):
|
|||||||
se_child.stock_uom = item_dict[d]["stock_uom"]
|
se_child.stock_uom = item_dict[d]["stock_uom"]
|
||||||
se_child.qty = flt(item_dict[d]["qty"])
|
se_child.qty = flt(item_dict[d]["qty"])
|
||||||
se_child.expense_account = item_dict[d]["expense_account"] or expense_account
|
se_child.expense_account = item_dict[d]["expense_account"] or expense_account
|
||||||
se_child.cost_center = item_dict[d]["cost_center"] or cost_center
|
se_child.cost_center = item_dict[d]["buying_cost_center"] or cost_center
|
||||||
|
|
||||||
# in stock uom
|
# in stock uom
|
||||||
se_child.transfer_qty = flt(item_dict[d]["qty"])
|
se_child.transfer_qty = flt(item_dict[d]["qty"])
|
||||||
@ -611,7 +611,6 @@ def get_party_details(ref_dt, ref_dn):
|
|||||||
else:
|
else:
|
||||||
res = webnotes.conn.get_value(ref_dt, ref_dn,
|
res = webnotes.conn.get_value(ref_dt, ref_dn,
|
||||||
["supplier", "supplier_name", "address_display as supplier_address"], as_dict=1)
|
["supplier", "supplier_name", "address_display as supplier_address"], as_dict=1)
|
||||||
print ref_dt, ref_dn, res
|
|
||||||
return res or {}
|
return res or {}
|
||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
|
@ -33,6 +33,9 @@ def get_item_details(args):
|
|||||||
args = json.loads(args)
|
args = json.loads(args)
|
||||||
args = webnotes._dict(args)
|
args = webnotes._dict(args)
|
||||||
|
|
||||||
|
if not args.get("transaction_type"):
|
||||||
|
args.transaction_type = "selling" if args.get("customer") else "buying"
|
||||||
|
|
||||||
if args.barcode:
|
if args.barcode:
|
||||||
args.item_code = get_item_code(barcode=args.barcode)
|
args.item_code = get_item_code(barcode=args.barcode)
|
||||||
elif not args.item_code and args.serial_no:
|
elif not args.item_code and args.serial_no:
|
||||||
@ -64,11 +67,11 @@ def get_item_details(args):
|
|||||||
|
|
||||||
if args.doctype in ("Sales Invoice", "Delivery Note"):
|
if args.doctype in ("Sales Invoice", "Delivery Note"):
|
||||||
if item_bean.doc.has_serial_no == "Yes" and not args.serial_no:
|
if item_bean.doc.has_serial_no == "Yes" and not args.serial_no:
|
||||||
out.serial_no = _get_serial_nos_by_fifo(args, item_bean)
|
out.serial_no = get_serial_nos_by_fifo(args, item_bean)
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def _get_serial_nos_by_fifo(args, item_bean):
|
def get_serial_nos_by_fifo(args, item_bean):
|
||||||
return "\n".join(webnotes.conn.sql_list("""select name from `tabSerial No`
|
return "\n".join(webnotes.conn.sql_list("""select name from `tabSerial No`
|
||||||
where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available'
|
where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available'
|
||||||
order by timestamp(purchase_date, purchase_time) asc limit %(qty)s""", {
|
order by timestamp(purchase_date, purchase_time) asc limit %(qty)s""", {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user