feat: Inter warehouse stock transfer on valuation rate with taxation (#20083)

* fix: Validation for target warehouse

* feat: Get items on valuation rate in delivery note on Internal transfers

* fix: Create Inter company purchase receipt from delivery note

* feat: Inter company stock transfer on valuation rate with taxation

* fix: Add from warehouse in purchase invoice

* fix: Use get_value instead of get_cached_value

* fix: Get incoming rate instead of valuation rate

* fix: GL entry for from warehouse in purchase receipt

* fix: GL Entries fixes in purchase invoice

* fix: Address and tax fetching fixes

* fix: Add test case for stock transfer via purchase receipt

* fix: Code cleanup, added validations and test cases

* fix: Validation for supplier warehouse

* fix: Test Cases

* fix: Change validation condition

* fix: Address fixes while creating Purchase Receipt from delivery note

* fix: Set taxes while creating Purchase Receipt from Delivery Note

* fix: Update set_missing_value function

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
This commit is contained in:
Deepesh Garg
2020-02-18 12:28:41 +05:30
committed by GitHub
parent db00270895
commit 15ff6a594b
29 changed files with 887 additions and 1676 deletions

View File

@@ -180,7 +180,7 @@ class SellingController(StockController):
last_purchase_rate, is_stock_item = frappe.get_cached_value("Item", it.item_code, ["last_purchase_rate", "is_stock_item"])
last_purchase_rate_in_sales_uom = last_purchase_rate / (it.conversion_factor or 1)
if flt(it.base_rate) < flt(last_purchase_rate_in_sales_uom):
if flt(it.base_rate) < flt(last_purchase_rate_in_sales_uom) and not self.get('is_internal_customer'):
throw_message(it.item_name, last_purchase_rate_in_sales_uom, "last purchase rate")
last_valuation_rate = frappe.db.sql("""
@@ -190,7 +190,8 @@ class SellingController(StockController):
""", (it.item_code, it.warehouse))
if last_valuation_rate:
last_valuation_rate_in_sales_uom = last_valuation_rate[0][0] / (it.conversion_factor or 1)
if is_stock_item and flt(it.base_rate) < flt(last_valuation_rate_in_sales_uom):
if is_stock_item and flt(it.base_rate) < flt(last_valuation_rate_in_sales_uom) \
and not self.get('is_internal_customer'):
throw_message(it.name, last_valuation_rate_in_sales_uom, "valuation rate")
@@ -300,7 +301,7 @@ class SellingController(StockController):
d.conversion_factor = get_conversion_factor(d.item_code, d.uom).get("conversion_factor") or 1.0
return_rate = 0
if cint(self.is_return) and self.return_against and self.docstatus==1:
return_rate = self.get_incoming_rate_for_sales_return(d.item_code, self.return_against)
return_rate = self.get_incoming_rate_for_return(d.item_code, self.return_against)
# On cancellation or if return entry submission, make stock ledger entry for
# target warehouse first, to update serial no values properly