mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-31 18:59:08 +00:00
Test case for landed cost voucher
This commit is contained in:
@@ -14,6 +14,7 @@ def _make_test_records(verbose):
|
|||||||
["_Test Account Stock Expenses", "Direct Expenses", "Group", None],
|
["_Test Account Stock Expenses", "Direct Expenses", "Group", None],
|
||||||
["_Test Account Shipping Charges", "_Test Account Stock Expenses", "Ledger", "Chargeable"],
|
["_Test Account Shipping Charges", "_Test Account Stock Expenses", "Ledger", "Chargeable"],
|
||||||
["_Test Account Customs Duty", "_Test Account Stock Expenses", "Ledger", "Tax"],
|
["_Test Account Customs Duty", "_Test Account Stock Expenses", "Ledger", "Tax"],
|
||||||
|
["_Test Account Insurance Charges", "_Test Account Stock Expenses", "Ledger", "Chargeable"],
|
||||||
|
|
||||||
|
|
||||||
["_Test Account Tax Assets", "Current Assets", "Group", None],
|
["_Test Account Tax Assets", "Current Assets", "Group", None],
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import unittest
|
||||||
|
import frappe
|
||||||
|
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt \
|
||||||
|
import set_perpetual_inventory, get_gl_entries, test_records as pr_test_records
|
||||||
|
|
||||||
|
|
||||||
|
class TestLandedCostVoucher(unittest.TestCase):
|
||||||
|
def test_landed_cost_voucher(self):
|
||||||
|
frappe.db.set_default("cost_center", "Main - _TC")
|
||||||
|
set_perpetual_inventory(1)
|
||||||
|
pr = self.submit_pr()
|
||||||
|
self.submit_landed_cost_voucher(pr)
|
||||||
|
|
||||||
|
pr_lc_value = frappe.db.get_value("Purchase Receipt Item", {"parent": pr.name}, "landed_cost_voucher_amount")
|
||||||
|
self.assertEquals(pr_lc_value, 25.0)
|
||||||
|
|
||||||
|
gl_entries = get_gl_entries("Purchase Receipt", pr.name)
|
||||||
|
|
||||||
|
self.assertTrue(gl_entries)
|
||||||
|
|
||||||
|
stock_in_hand_account = pr.get("purchase_receipt_details")[0].warehouse
|
||||||
|
fixed_asset_account = pr.get("purchase_receipt_details")[1].warehouse
|
||||||
|
|
||||||
|
|
||||||
|
expected_values = {
|
||||||
|
stock_in_hand_account: [400.0, 0.0],
|
||||||
|
fixed_asset_account: [400.0, 0.0],
|
||||||
|
"Stock Received But Not Billed - _TC": [0.0, 750.0],
|
||||||
|
"Expenses Included In Valuation - _TC": [0.0, 50.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
for gle in gl_entries:
|
||||||
|
self.assertEquals(expected_values[gle.account][0], gle.debit)
|
||||||
|
self.assertEquals(expected_values[gle.account][1], gle.credit)
|
||||||
|
|
||||||
|
set_perpetual_inventory(0)
|
||||||
|
|
||||||
|
def submit_landed_cost_voucher(self, pr):
|
||||||
|
lcv = frappe.new_doc("Landed Cost Voucher")
|
||||||
|
lcv.company = "_Test Company"
|
||||||
|
lcv.set("landed_cost_purchase_receipts", [{
|
||||||
|
"purchase_receipt": pr.name,
|
||||||
|
"supplier": pr.supplier,
|
||||||
|
"posting_date": pr.posting_date,
|
||||||
|
"grand_total": pr.grand_total
|
||||||
|
}])
|
||||||
|
lcv.set("landed_cost_taxes_and_charges", [{
|
||||||
|
"description": "Insurance Charges",
|
||||||
|
"account": "_Test Account Insurance Charges - _TC",
|
||||||
|
"amount": 50.0
|
||||||
|
}])
|
||||||
|
|
||||||
|
lcv.insert()
|
||||||
|
lcv.submit()
|
||||||
|
|
||||||
|
def submit_pr(self):
|
||||||
|
pr = frappe.copy_doc(pr_test_records[0])
|
||||||
|
pr.submit()
|
||||||
|
return pr
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
test_records = frappe.get_test_records('Landed Cost Voucher')
|
||||||
@@ -289,7 +289,6 @@ class PurchaseReceipt(BuyingController):
|
|||||||
stock_rbnb = self.get_company_default("stock_received_but_not_billed")
|
stock_rbnb = self.get_company_default("stock_received_but_not_billed")
|
||||||
expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
|
expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
|
||||||
default_cost_center = self.get_company_default("cost_center")
|
default_cost_center = self.get_company_default("cost_center")
|
||||||
against_expense_account = None
|
|
||||||
|
|
||||||
gl_entries = []
|
gl_entries = []
|
||||||
warehouse_with_no_account = []
|
warehouse_with_no_account = []
|
||||||
@@ -301,7 +300,7 @@ class PurchaseReceipt(BuyingController):
|
|||||||
# warehouse account
|
# warehouse account
|
||||||
gl_entries.append(self.get_gl_dict({
|
gl_entries.append(self.get_gl_dict({
|
||||||
"account": warehouse_account[d.warehouse],
|
"account": warehouse_account[d.warehouse],
|
||||||
"against": against_expense_account,
|
"against": stock_rbnb,
|
||||||
"cost_center": d.cost_center,
|
"cost_center": d.cost_center,
|
||||||
"remarks": self.get("remarks") or "Accounting Entry for Stock",
|
"remarks": self.get("remarks") or "Accounting Entry for Stock",
|
||||||
"debit": flt(d.valuation_rate) * flt(d.qty) * flt(d.conversion_factor)
|
"debit": flt(d.valuation_rate) * flt(d.qty) * flt(d.conversion_factor)
|
||||||
@@ -313,7 +312,7 @@ class PurchaseReceipt(BuyingController):
|
|||||||
"against": warehouse_account[d.warehouse],
|
"against": warehouse_account[d.warehouse],
|
||||||
"cost_center": d.cost_center,
|
"cost_center": d.cost_center,
|
||||||
"remarks": self.get("remarks") or "Accounting Entry for Stock",
|
"remarks": self.get("remarks") or "Accounting Entry for Stock",
|
||||||
"credit": flt(d.base_amount, 2)
|
"credit": flt(d.base_amount + d.item_tax_amount, self.precision("base_amount", d))
|
||||||
}))
|
}))
|
||||||
|
|
||||||
# Amount added through landed-cost-voucher
|
# Amount added through landed-cost-voucher
|
||||||
@@ -339,35 +338,6 @@ class PurchaseReceipt(BuyingController):
|
|||||||
elif d.warehouse not in warehouse_with_no_account or \
|
elif d.warehouse not in warehouse_with_no_account or \
|
||||||
d.rejected_warehouse not in warehouse_with_no_account:
|
d.rejected_warehouse not in warehouse_with_no_account:
|
||||||
warehouse_with_no_account.append(d.warehouse)
|
warehouse_with_no_account.append(d.warehouse)
|
||||||
|
|
||||||
# Cost center-wise amount breakup for other charges included for valuation
|
|
||||||
valuation_tax = {}
|
|
||||||
for tax in self.get("other_charges"):
|
|
||||||
if tax.category in ("Valuation", "Valuation and Total") and flt(tax.tax_amount):
|
|
||||||
if not tax.cost_center:
|
|
||||||
frappe.throw(_("Cost Center is required in row {0} in Taxes table for type {1}").format(tax.idx, _(tax.category)))
|
|
||||||
valuation_tax.setdefault(tax.cost_center, 0)
|
|
||||||
valuation_tax[tax.cost_center] += \
|
|
||||||
(tax.add_deduct_tax == "Add" and 1 or -1) * flt(tax.tax_amount)
|
|
||||||
|
|
||||||
# Backward compatibility:
|
|
||||||
# If PI exists and charges added via Landed Cost Voucher,
|
|
||||||
# post valuation related charges on "Stock Received But Not Billed"
|
|
||||||
# as that account has been debited in PI
|
|
||||||
if frappe.db.get_value("Purchase Invoice Item", {"purchase_receipt": self.name, "docstatus": 1}):
|
|
||||||
expenses_included_in_valuation = stock_rbnb
|
|
||||||
|
|
||||||
# Expense included in valuation
|
|
||||||
for cost_center, amount in valuation_tax.items():
|
|
||||||
gl_entries.append(
|
|
||||||
self.get_gl_dict({
|
|
||||||
"account": expenses_included_in_valuation,
|
|
||||||
"cost_center": cost_center,
|
|
||||||
# "against": ,
|
|
||||||
"credit": amount,
|
|
||||||
"remarks": self.remarks or "Accounting Entry for Stock"
|
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
if warehouse_with_no_account:
|
if warehouse_with_no_account:
|
||||||
msgprint(_("No accounting entries for the following warehouses") + ": \n" +
|
msgprint(_("No accounting entries for the following warehouses") + ": \n" +
|
||||||
|
|||||||
Reference in New Issue
Block a user