mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-15 01:43:10 +00:00
fixes during testing version 5
This commit is contained in:
@@ -357,7 +357,8 @@
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"description": "Auto-raise Material Request if quantity goes below re-order level in a warehouse",
|
||||
"depends_on": "eval:doc.is_stock_item==\"Yes\"",
|
||||
"description": "Auto-raise Material Request if quantity goes below re-order level in default warehouse",
|
||||
"fieldname": "reorder_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Re-order",
|
||||
@@ -366,7 +367,7 @@
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:doc.is_stock_item==\"Yes\"",
|
||||
"depends_on": "eval:(doc.is_stock_item==\"Yes\" && !doc.apply_warehouse_wise_reorder_level)",
|
||||
"fieldname": "re_order_level",
|
||||
"fieldtype": "Float",
|
||||
"label": "Re-Order Level",
|
||||
@@ -376,7 +377,7 @@
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:doc.is_stock_item==\"Yes\"",
|
||||
"depends_on": "eval:(doc.is_stock_item==\"Yes\" && !doc.apply_warehouse_wise_reorder_level)",
|
||||
"fieldname": "re_order_qty",
|
||||
"fieldtype": "Float",
|
||||
"label": "Re-Order Qty",
|
||||
@@ -384,12 +385,22 @@
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:doc.is_stock_item==\"Yes\"",
|
||||
"fieldname": "apply_warehouse_wise_reorder_level",
|
||||
"fieldtype": "Check",
|
||||
"label": "Apply Warehouse-wise Reorder Level",
|
||||
"permlevel": 0,
|
||||
"precision": ""
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:(doc.is_stock_item==\"Yes\" && doc.apply_warehouse_wise_reorder_level)",
|
||||
"fieldname": "section_break_31",
|
||||
"fieldtype": "Section Break",
|
||||
"permlevel": 0,
|
||||
"read_only": 0
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:(doc.is_stock_item==\"Yes\" && doc.apply_warehouse_wise_reorder_level)",
|
||||
"description": "Will also apply for variants unless overrridden",
|
||||
"fieldname": "item_reorder",
|
||||
"fieldtype": "Table",
|
||||
@@ -865,7 +876,7 @@
|
||||
"icon": "icon-tag",
|
||||
"idx": 1,
|
||||
"max_attachments": 1,
|
||||
"modified": "2014-11-25 18:39:56.226084",
|
||||
"modified": "2014-11-26 15:05:38.116026",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Item",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe import msgprint, _
|
||||
from frappe.utils import cstr, flt, getdate, now_datetime, formatdate
|
||||
from frappe.utils import cstr, flt, cint, getdate, now_datetime, formatdate
|
||||
from frappe.website.website_generator import WebsiteGenerator
|
||||
from erpnext.setup.doctype.item_group.item_group import invalidate_cache_for, get_parent_item_groups
|
||||
from frappe.website.render import clear_cache
|
||||
@@ -54,7 +54,7 @@ class Item(WebsiteGenerator):
|
||||
self.check_item_tax()
|
||||
self.validate_barcode()
|
||||
self.cant_change()
|
||||
self.validate_item_type_for_reorder()
|
||||
self.validate_reorder_level()
|
||||
self.validate_warehouse_for_reorder()
|
||||
self.validate_variants()
|
||||
|
||||
@@ -340,10 +340,15 @@ class Item(WebsiteGenerator):
|
||||
if self.check_if_sle_exists() == "exists":
|
||||
frappe.throw(_("As there are existing stock transactions for this item, you can not change the values of 'Has Serial No', 'Has Batch No', 'Is Stock Item' and 'Valuation Method'"))
|
||||
|
||||
def validate_item_type_for_reorder(self):
|
||||
def validate_reorder_level(self):
|
||||
if cint(self.apply_warehouse_wise_reorder_level):
|
||||
self.re_order_level, self.re_order_qty = 0, 0
|
||||
else:
|
||||
self.set("item_reorder", [])
|
||||
|
||||
if self.re_order_level or len(self.get("item_reorder", {"material_request_type": "Purchase"})):
|
||||
if not self.is_purchase_item:
|
||||
frappe.throw(_("""To set reorder level, item must be Purchase Item"""))
|
||||
frappe.throw(_("""To set reorder level, item must be a Purchase Item"""))
|
||||
|
||||
def validate_warehouse_for_reorder(self):
|
||||
warehouse = []
|
||||
@@ -411,13 +416,13 @@ class Item(WebsiteGenerator):
|
||||
def recalculate_bin_qty(self, newdn):
|
||||
from erpnext.utilities.repost_stock import repost_stock
|
||||
frappe.db.auto_commit_on_many_writes = 1
|
||||
frappe.db.set_default("allow_negative_stock", 1)
|
||||
existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock")
|
||||
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
|
||||
|
||||
for warehouse in frappe.db.sql("select name from `tabWarehouse`"):
|
||||
repost_stock(newdn, warehouse[0])
|
||||
|
||||
frappe.db.set_default("allow_negative_stock",
|
||||
frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
|
||||
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock)
|
||||
frappe.db.auto_commit_on_many_writes = 0
|
||||
|
||||
def copy_specification_from_item_group(self):
|
||||
|
||||
@@ -34,7 +34,7 @@ class TestItem(unittest.TestCase):
|
||||
se.purpose = "Material Receipt"
|
||||
se.append("mtn_details", {
|
||||
"item_code": item.name,
|
||||
"t_warehouse": "Stores - WP",
|
||||
"t_warehouse": "Stores - _TC",
|
||||
"qty": 1,
|
||||
"incoming_rate": 1
|
||||
})
|
||||
@@ -73,7 +73,7 @@ class TestItem(unittest.TestCase):
|
||||
se.purpose = "Material Receipt"
|
||||
se.append("mtn_details", {
|
||||
"item_code": item.name,
|
||||
"t_warehouse": "Stores - WP",
|
||||
"t_warehouse": "Stores - _TC",
|
||||
"qty": 1,
|
||||
"incoming_rate": 1
|
||||
})
|
||||
|
||||
@@ -399,7 +399,7 @@ class TestMaterialRequest(unittest.TestCase):
|
||||
self.assertEquals(se.doctype, "Stock Entry")
|
||||
self.assertEquals(len(se.get("mtn_details")), len(mr.get("indent_details")))
|
||||
|
||||
def test_compleated_qty_for_issue(self):
|
||||
def test_completed_qty_for_issue(self):
|
||||
def _get_requested_qty():
|
||||
return flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
|
||||
"warehouse": "_Test Warehouse - _TC"}, "indented_qty"))
|
||||
@@ -412,7 +412,7 @@ class TestMaterialRequest(unittest.TestCase):
|
||||
mr.material_request_type = "Material Issue"
|
||||
mr.submit()
|
||||
|
||||
#testing bin value after material request is submitted
|
||||
#testing bin value after material request is submitted
|
||||
self.assertEquals(_get_requested_qty(), existing_requested_qty + 54.0)
|
||||
|
||||
# receive items to allow issue
|
||||
@@ -431,7 +431,7 @@ class TestMaterialRequest(unittest.TestCase):
|
||||
self.assertEquals(mr.get("indent_details")[0].ordered_qty, 60.0)
|
||||
self.assertEquals(mr.get("indent_details")[1].ordered_qty, 3.0)
|
||||
|
||||
#testing bin requested qty after issuing stock against material request
|
||||
#testing bin requested qty after issuing stock against material request
|
||||
self.assertEquals(_get_requested_qty(), existing_requested_qty)
|
||||
|
||||
test_dependencies = ["Currency Exchange"]
|
||||
|
||||
@@ -103,7 +103,8 @@ class StockEntry(StockController):
|
||||
|
||||
for f in ("uom", "stock_uom", "description", "item_name", "expense_account",
|
||||
"cost_center", "conversion_factor"):
|
||||
item.set(f, item_details.get(f))
|
||||
if not item.get(f):
|
||||
item.set(f, item_details.get(f))
|
||||
|
||||
if not item.transfer_qty:
|
||||
item.transfer_qty = item.qty * item.conversion_factor
|
||||
|
||||
@@ -24,9 +24,9 @@ def make_zero(item_code, warehouse):
|
||||
sle = get_sle(item_code = item_code, warehouse = warehouse)
|
||||
qty = sle[0].qty_after_transaction if sle else 0
|
||||
if qty < 0:
|
||||
make_stock_entry(item_code, None, warehouse, abs(qty), incoming_rate=10)
|
||||
make_stock_entry(item_code=item_code, target=warehouse, qty=abs(qty), incoming_rate=10)
|
||||
elif qty > 0:
|
||||
make_stock_entry(item_code, warehouse, None, qty, incoming_rate=10)
|
||||
make_stock_entry(item_code=item_code, source=warehouse, qty=qty, incoming_rate=10)
|
||||
|
||||
class TestStockEntry(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
@@ -36,31 +36,31 @@ class TestStockEntry(unittest.TestCase):
|
||||
frappe.db.set_default("company", self.old_default_company)
|
||||
|
||||
def test_fifo(self):
|
||||
frappe.db.set_default("allow_negative_stock", 1)
|
||||
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
|
||||
item_code = "_Test Item 2"
|
||||
warehouse = "_Test Warehouse - _TC"
|
||||
make_zero(item_code, warehouse)
|
||||
|
||||
make_stock_entry(item_code, None, warehouse, 1, incoming_rate=10)
|
||||
make_stock_entry(item_code=item_code, target=warehouse, qty=1, incoming_rate=10)
|
||||
sle = get_sle(item_code = item_code, warehouse = warehouse)[0]
|
||||
|
||||
self.assertEqual([[1, 10]], eval(sle.stock_queue))
|
||||
|
||||
# negative qty
|
||||
make_zero(item_code, warehouse)
|
||||
make_stock_entry(item_code, warehouse, None, 1, incoming_rate=10)
|
||||
make_stock_entry(item_code=item_code, source=warehouse, qty=1, incoming_rate=10)
|
||||
sle = get_sle(item_code = item_code, warehouse = warehouse)[0]
|
||||
|
||||
self.assertEqual([[-1, 10]], eval(sle.stock_queue))
|
||||
|
||||
# further negative
|
||||
make_stock_entry(item_code, warehouse, None, 1)
|
||||
make_stock_entry(item_code=item_code, source=warehouse, qty=1)
|
||||
sle = get_sle(item_code = item_code, warehouse = warehouse)[0]
|
||||
|
||||
self.assertEqual([[-2, 10]], eval(sle.stock_queue))
|
||||
|
||||
# move stock to positive
|
||||
make_stock_entry(item_code, None, warehouse, 3, incoming_rate=10)
|
||||
make_stock_entry(item_code=item_code, target=warehouse, qty=3, incoming_rate=10)
|
||||
sle = get_sle(item_code = item_code, warehouse = warehouse)[0]
|
||||
|
||||
self.assertEqual([[1, 10]], eval(sle.stock_queue))
|
||||
@@ -84,7 +84,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
warehouse = "_Test Warehouse - _TC"
|
||||
|
||||
# stock entry reqd for auto-reorder
|
||||
make_stock_entry(item_code=item_code, target="_Test Warehouse 1 - _TC", qty=1, incoming_rate=1)
|
||||
make_stock_entry(item_code=item_code, target="_Test Warehouse - _TC", qty=1, incoming_rate=1)
|
||||
|
||||
frappe.db.set_value("Stock Settings", None, "auto_indent", 1)
|
||||
projected_qty = frappe.db.get_value("Bin", {"item_code": item_code,
|
||||
|
||||
@@ -195,7 +195,7 @@ class TestStockReconciliation(unittest.TestCase):
|
||||
|
||||
def insert_existing_sle(self, valuation_method):
|
||||
frappe.db.set_value("Item", "_Test Item", "valuation_method", valuation_method)
|
||||
frappe.db.set_default("allow_negative_stock", 1)
|
||||
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
|
||||
|
||||
stock_entry = {
|
||||
"company": "_Test Company",
|
||||
|
||||
@@ -142,7 +142,8 @@ class Warehouse(Document):
|
||||
def recalculate_bin_qty(self, newdn):
|
||||
from erpnext.utilities.repost_stock import repost_stock
|
||||
frappe.db.auto_commit_on_many_writes = 1
|
||||
frappe.db.set_default("allow_negative_stock", 1)
|
||||
existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock")
|
||||
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
|
||||
|
||||
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'
|
||||
@@ -150,6 +151,5 @@ class Warehouse(Document):
|
||||
select distinct item_code from tabBin) a"""):
|
||||
repost_stock(item[0], newdn)
|
||||
|
||||
frappe.db.set_default("allow_negative_stock",
|
||||
frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
|
||||
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock)
|
||||
frappe.db.auto_commit_on_many_writes = 0
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.utils import flt, cstr, nowdate, add_days, cint
|
||||
from erpnext.accounts.utils import get_fiscal_year, FiscalYearError
|
||||
|
||||
@@ -23,8 +22,7 @@ def _reorder_item():
|
||||
|
||||
item_warehouse_projected_qty = get_item_warehouse_projected_qty()
|
||||
|
||||
warehouse_company = frappe._dict(frappe.db.sql("""select name, company
|
||||
from `tabWarehouse`"""))
|
||||
warehouse_company = frappe._dict(frappe.db.sql("""select name, company from `tabWarehouse`"""))
|
||||
default_company = (frappe.defaults.get_defaults().get("company") or
|
||||
frappe.db.sql("""select name from tabCompany limit 1""")[0][0])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user