Merge branch 'develop' into maint_sch_link_fix
This commit is contained in:
commit
773ed2ba7b
@ -17,7 +17,7 @@ from erpnext.accounts.general_ledger import (
|
|||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
from erpnext.controllers.accounts_controller import AccountsController
|
from erpnext.controllers.accounts_controller import AccountsController
|
||||||
from erpnext.stock import get_warehouse_account_map
|
from erpnext.stock import get_warehouse_account_map
|
||||||
from erpnext.stock.stock_ledger import get_items_to_be_repost, get_valuation_rate
|
from erpnext.stock.stock_ledger import get_items_to_be_repost
|
||||||
|
|
||||||
|
|
||||||
class QualityInspectionRequiredError(frappe.ValidationError): pass
|
class QualityInspectionRequiredError(frappe.ValidationError): pass
|
||||||
@ -111,17 +111,6 @@ class StockController(AccountsController):
|
|||||||
|
|
||||||
self.check_expense_account(item_row)
|
self.check_expense_account(item_row)
|
||||||
|
|
||||||
# If the item does not have the allow zero valuation rate flag set
|
|
||||||
# and ( valuation rate not mentioned in an incoming entry
|
|
||||||
# or incoming entry not found while delivering the item),
|
|
||||||
# try to pick valuation rate from previous sle or Item master and update in SLE
|
|
||||||
# Otherwise, throw an exception
|
|
||||||
|
|
||||||
if not sle.stock_value_difference and self.doctype != "Stock Reconciliation" \
|
|
||||||
and not item_row.get("allow_zero_valuation_rate"):
|
|
||||||
|
|
||||||
sle = self.update_stock_ledger_entries(sle)
|
|
||||||
|
|
||||||
# expense account/ target_warehouse / source_warehouse
|
# expense account/ target_warehouse / source_warehouse
|
||||||
if item_row.get('target_warehouse'):
|
if item_row.get('target_warehouse'):
|
||||||
warehouse = item_row.get('target_warehouse')
|
warehouse = item_row.get('target_warehouse')
|
||||||
@ -164,26 +153,6 @@ class StockController(AccountsController):
|
|||||||
|
|
||||||
return frappe.flags.debit_field_precision
|
return frappe.flags.debit_field_precision
|
||||||
|
|
||||||
def update_stock_ledger_entries(self, sle):
|
|
||||||
sle.valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse,
|
|
||||||
self.doctype, self.name, currency=self.company_currency, company=self.company)
|
|
||||||
|
|
||||||
sle.stock_value = flt(sle.qty_after_transaction) * flt(sle.valuation_rate)
|
|
||||||
sle.stock_value_difference = flt(sle.actual_qty) * flt(sle.valuation_rate)
|
|
||||||
|
|
||||||
if sle.name:
|
|
||||||
frappe.db.sql("""
|
|
||||||
update
|
|
||||||
`tabStock Ledger Entry`
|
|
||||||
set
|
|
||||||
stock_value = %(stock_value)s,
|
|
||||||
valuation_rate = %(valuation_rate)s,
|
|
||||||
stock_value_difference = %(stock_value_difference)s
|
|
||||||
where
|
|
||||||
name = %(name)s""", (sle))
|
|
||||||
|
|
||||||
return sle
|
|
||||||
|
|
||||||
def get_voucher_details(self, default_expense_account, default_cost_center, sle_map):
|
def get_voucher_details(self, default_expense_account, default_cost_center, sle_map):
|
||||||
if self.doctype == "Stock Reconciliation":
|
if self.doctype == "Stock Reconciliation":
|
||||||
reconciliation_purpose = frappe.db.get_value(self.doctype, self.name, "purpose")
|
reconciliation_purpose = frappe.db.get_value(self.doctype, self.name, "purpose")
|
||||||
|
@ -131,16 +131,14 @@ frappe.ui.form.on("Work Order", {
|
|||||||
erpnext.work_order.set_custom_buttons(frm);
|
erpnext.work_order.set_custom_buttons(frm);
|
||||||
frm.set_intro("");
|
frm.set_intro("");
|
||||||
|
|
||||||
if (frm.doc.docstatus === 0 && !frm.doc.__islocal) {
|
if (frm.doc.docstatus === 0 && !frm.is_new()) {
|
||||||
frm.set_intro(__("Submit this Work Order for further processing."));
|
frm.set_intro(__("Submit this Work Order for further processing."));
|
||||||
|
} else {
|
||||||
|
frm.trigger("show_progress_for_items");
|
||||||
|
frm.trigger("show_progress_for_operations");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frm.doc.status != "Closed") {
|
if (frm.doc.status != "Closed") {
|
||||||
if (frm.doc.docstatus===1) {
|
|
||||||
frm.trigger('show_progress_for_items');
|
|
||||||
frm.trigger('show_progress_for_operations');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (frm.doc.docstatus === 1
|
if (frm.doc.docstatus === 1
|
||||||
&& frm.doc.operations && frm.doc.operations.length) {
|
&& frm.doc.operations && frm.doc.operations.length) {
|
||||||
|
|
||||||
|
@ -851,6 +851,34 @@ class TestStockEntry(ERPNextTestCase):
|
|||||||
self.assertEqual(se.get("items")[0].allow_zero_valuation_rate, 1)
|
self.assertEqual(se.get("items")[0].allow_zero_valuation_rate, 1)
|
||||||
self.assertEqual(se.get("items")[0].amount, 0)
|
self.assertEqual(se.get("items")[0].amount, 0)
|
||||||
|
|
||||||
|
def test_zero_incoming_rate(self):
|
||||||
|
""" Make sure incoming rate of 0 is allowed while consuming.
|
||||||
|
|
||||||
|
qty | rate | valuation rate
|
||||||
|
1 | 100 | 100
|
||||||
|
1 | 0 | 50
|
||||||
|
-1 | 100 | 0
|
||||||
|
-1 | 0 <--- assert this
|
||||||
|
"""
|
||||||
|
item_code = "_TestZeroVal"
|
||||||
|
warehouse = "_Test Warehouse - _TC"
|
||||||
|
create_item('_TestZeroVal')
|
||||||
|
_receipt = make_stock_entry(item_code=item_code, qty=1, to_warehouse=warehouse, rate=100)
|
||||||
|
receipt2 = make_stock_entry(item_code=item_code, qty=1, to_warehouse=warehouse, rate=0, do_not_save=True)
|
||||||
|
receipt2.items[0].allow_zero_valuation_rate = 1
|
||||||
|
receipt2.save()
|
||||||
|
receipt2.submit()
|
||||||
|
|
||||||
|
issue = make_stock_entry(item_code=item_code, qty=1, from_warehouse=warehouse)
|
||||||
|
|
||||||
|
value_diff = frappe.db.get_value("Stock Ledger Entry", {"voucher_no": issue.name, "voucher_type": "Stock Entry"}, "stock_value_difference")
|
||||||
|
self.assertEqual(value_diff, -100)
|
||||||
|
|
||||||
|
issue2 = make_stock_entry(item_code=item_code, qty=1, from_warehouse=warehouse)
|
||||||
|
value_diff = frappe.db.get_value("Stock Ledger Entry", {"voucher_no": issue2.name, "voucher_type": "Stock Entry"}, "stock_value_difference")
|
||||||
|
self.assertEqual(value_diff, 0)
|
||||||
|
|
||||||
|
|
||||||
def test_gle_for_opening_stock_entry(self):
|
def test_gle_for_opening_stock_entry(self):
|
||||||
mr = make_stock_entry(item_code="_Test Item", target="Stores - TCP1",
|
mr = make_stock_entry(item_code="_Test Item", target="Stores - TCP1",
|
||||||
company="_Test Company with perpetual inventory", qty=50, basic_rate=100,
|
company="_Test Company with perpetual inventory", qty=50, basic_rate=100,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user