feat: allow selecting LIFO valuation
This commit is contained in:
parent
9c49d2d3aa
commit
97e18a1cd0
@ -346,7 +346,7 @@
|
|||||||
"fieldname": "valuation_method",
|
"fieldname": "valuation_method",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"label": "Valuation Method",
|
"label": "Valuation Method",
|
||||||
"options": "\nFIFO\nMoving Average"
|
"options": "\nFIFO\nMoving Average\nLIFO"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "is_stock_item",
|
"depends_on": "is_stock_item",
|
||||||
@ -987,4 +987,4 @@
|
|||||||
"states": [],
|
"states": [],
|
||||||
"title_field": "item_name",
|
"title_field": "item_name",
|
||||||
"track_changes": 1
|
"track_changes": 1
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@
|
|||||||
"fieldname": "valuation_method",
|
"fieldname": "valuation_method",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"label": "Default Valuation Method",
|
"label": "Default Valuation Method",
|
||||||
"options": "FIFO\nMoving Average"
|
"options": "FIFO\nMoving Average\nLIFO"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "The percentage you are allowed to receive or deliver more against the quantity ordered. For example, if you have ordered 100 units, and your Allowance is 10%, then you are allowed to receive 110 units.",
|
"description": "The percentage you are allowed to receive or deliver more against the quantity ordered. For example, if you have ordered 100 units, and your Allowance is 10%, then you are allowed to receive 110 units.",
|
||||||
@ -305,7 +305,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-11-06 19:40:02.183592",
|
"modified": "2022-01-15 17:42:53.174865",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Stock Settings",
|
"name": "Stock Settings",
|
||||||
@ -324,5 +324,6 @@
|
|||||||
"quick_entry": 1,
|
"quick_entry": 1,
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "ASC",
|
"sort_order": "ASC",
|
||||||
|
"states": [],
|
||||||
"track_changes": 1
|
"track_changes": 1
|
||||||
}
|
}
|
@ -16,7 +16,7 @@ from erpnext.stock.utils import (
|
|||||||
get_or_make_bin,
|
get_or_make_bin,
|
||||||
get_valuation_method,
|
get_valuation_method,
|
||||||
)
|
)
|
||||||
from erpnext.stock.valuation import FIFOValuation
|
from erpnext.stock.valuation import FIFOValuation, LIFOValuation
|
||||||
|
|
||||||
|
|
||||||
class NegativeStockError(frappe.ValidationError): pass
|
class NegativeStockError(frappe.ValidationError): pass
|
||||||
@ -461,7 +461,7 @@ class update_entries_after(object):
|
|||||||
self.wh_data.qty_after_transaction += flt(sle.actual_qty)
|
self.wh_data.qty_after_transaction += flt(sle.actual_qty)
|
||||||
self.wh_data.stock_value = flt(self.wh_data.qty_after_transaction) * flt(self.wh_data.valuation_rate)
|
self.wh_data.stock_value = flt(self.wh_data.qty_after_transaction) * flt(self.wh_data.valuation_rate)
|
||||||
else:
|
else:
|
||||||
self.update_fifo_values(sle)
|
self.update_fifo_lifo_values(sle)
|
||||||
self.wh_data.qty_after_transaction += flt(sle.actual_qty)
|
self.wh_data.qty_after_transaction += flt(sle.actual_qty)
|
||||||
|
|
||||||
# rounding as per precision
|
# rounding as per precision
|
||||||
@ -701,14 +701,18 @@ class update_entries_after(object):
|
|||||||
sle.voucher_type, sle.voucher_no, self.allow_zero_rate,
|
sle.voucher_type, sle.voucher_no, self.allow_zero_rate,
|
||||||
currency=erpnext.get_company_currency(sle.company), company=sle.company)
|
currency=erpnext.get_company_currency(sle.company), company=sle.company)
|
||||||
|
|
||||||
def update_fifo_values(self, sle):
|
def update_fifo_lifo_values(self, sle):
|
||||||
incoming_rate = flt(sle.incoming_rate)
|
incoming_rate = flt(sle.incoming_rate)
|
||||||
actual_qty = flt(sle.actual_qty)
|
actual_qty = flt(sle.actual_qty)
|
||||||
outgoing_rate = flt(sle.outgoing_rate)
|
outgoing_rate = flt(sle.outgoing_rate)
|
||||||
|
|
||||||
fifo_queue = FIFOValuation(self.wh_data.stock_queue)
|
if self.valuation_method == "LIFO":
|
||||||
|
stock_queue = LIFOValuation(self.wh_data.stock_queue)
|
||||||
|
else:
|
||||||
|
stock_queue = FIFOValuation(self.wh_data.stock_queue)
|
||||||
|
|
||||||
if actual_qty > 0:
|
if actual_qty > 0:
|
||||||
fifo_queue.add_stock(qty=actual_qty, rate=incoming_rate)
|
stock_queue.add_stock(qty=actual_qty, rate=incoming_rate)
|
||||||
else:
|
else:
|
||||||
def rate_generator() -> float:
|
def rate_generator() -> float:
|
||||||
allow_zero_valuation_rate = self.check_if_allow_zero_valuation_rate(sle.voucher_type, sle.voucher_detail_no)
|
allow_zero_valuation_rate = self.check_if_allow_zero_valuation_rate(sle.voucher_type, sle.voucher_detail_no)
|
||||||
@ -719,11 +723,11 @@ class update_entries_after(object):
|
|||||||
else:
|
else:
|
||||||
return 0.0
|
return 0.0
|
||||||
|
|
||||||
fifo_queue.remove_stock(qty=abs(actual_qty), outgoing_rate=outgoing_rate, rate_generator=rate_generator)
|
stock_queue.remove_stock(qty=abs(actual_qty), outgoing_rate=outgoing_rate, rate_generator=rate_generator)
|
||||||
|
|
||||||
stock_qty, stock_value = fifo_queue.get_total_stock_and_value()
|
stock_qty, stock_value = stock_queue.get_total_stock_and_value()
|
||||||
|
|
||||||
self.wh_data.stock_queue = fifo_queue.state
|
self.wh_data.stock_queue = stock_queue.state
|
||||||
self.wh_data.stock_value = stock_value
|
self.wh_data.stock_value = stock_value
|
||||||
if stock_qty:
|
if stock_qty:
|
||||||
self.wh_data.valuation_rate = stock_value / stock_qty
|
self.wh_data.valuation_rate = stock_value / stock_qty
|
||||||
|
Loading…
x
Reference in New Issue
Block a user