mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 07:54:46 +00:00
Merge pull request #50472 from frappe/mergify/bp/version-15-hotfix/pr-50469
fix: automatically append taxes if taxes_and_charges is set in Buying controller (backport #50469)
This commit is contained in:
@@ -76,6 +76,46 @@ class TestRequestforQuotation(FrappeTestCase):
|
|||||||
self.assertEqual(sq1.get("items")[0].item_code, "_Test Item")
|
self.assertEqual(sq1.get("items")[0].item_code, "_Test Item")
|
||||||
self.assertEqual(sq1.get("items")[0].qty, 5)
|
self.assertEqual(sq1.get("items")[0].qty, 5)
|
||||||
|
|
||||||
|
def test_make_supplier_quotation_with_taxes(self):
|
||||||
|
"""Test automatic tax addition when supplier quotation is created from RFQ taxes_and_charges are set"""
|
||||||
|
|
||||||
|
# Create a Purchase Taxes and Charges Template for testing
|
||||||
|
tax_template = frappe.new_doc("Purchase Taxes and Charges Template")
|
||||||
|
tax_template.doctype = "Purchase Taxes and Charges Template"
|
||||||
|
tax_template.title = "_Test Purchase Taxes Template for RFQ"
|
||||||
|
tax_template.company = "_Test Company"
|
||||||
|
tax_template.append(
|
||||||
|
"taxes",
|
||||||
|
{
|
||||||
|
"charge_type": "On Net Total",
|
||||||
|
"account_head": "_Test Account Service Tax - _TC",
|
||||||
|
"description": "VAT",
|
||||||
|
"rate": 10,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
tax_template.save()
|
||||||
|
|
||||||
|
rfq = make_request_for_quotation()
|
||||||
|
supplier = rfq.get("suppliers")[0].supplier
|
||||||
|
|
||||||
|
tax_rule = frappe.new_doc("Tax Rule")
|
||||||
|
tax_rule.company = "_Test Company"
|
||||||
|
tax_rule.tax_type = "Purchase"
|
||||||
|
tax_rule.supplier = supplier
|
||||||
|
tax_rule.purchase_tax_template = tax_template.name
|
||||||
|
tax_rule.save()
|
||||||
|
|
||||||
|
sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=supplier)
|
||||||
|
|
||||||
|
# Verify that taxes_and_charges is set from get_party_details
|
||||||
|
self.assertEqual(sq.taxes_and_charges, tax_template.name)
|
||||||
|
|
||||||
|
# Verify that taxes are automatically added
|
||||||
|
self.assertGreaterEqual(len(sq.get("taxes")), 1)
|
||||||
|
|
||||||
|
tax_rule.delete()
|
||||||
|
tax_template.delete()
|
||||||
|
|
||||||
def test_make_supplier_quotation_with_special_characters(self):
|
def test_make_supplier_quotation_with_special_characters(self):
|
||||||
frappe.delete_doc_if_exists("Supplier", "_Test Supplier '1", force=1)
|
frappe.delete_doc_if_exists("Supplier", "_Test Supplier '1", force=1)
|
||||||
supplier = frappe.new_doc("Supplier")
|
supplier = frappe.new_doc("Supplier")
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import g
|
|||||||
from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget
|
from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget
|
||||||
from erpnext.accounts.party import get_party_details
|
from erpnext.accounts.party import get_party_details
|
||||||
from erpnext.buying.utils import update_last_purchase_rate, validate_for_items
|
from erpnext.buying.utils import update_last_purchase_rate, validate_for_items
|
||||||
|
from erpnext.controllers.accounts_controller import get_taxes_and_charges
|
||||||
from erpnext.controllers.sales_and_purchase_return import get_rate_for_return
|
from erpnext.controllers.sales_and_purchase_return import get_rate_for_return
|
||||||
from erpnext.controllers.subcontracting_controller import SubcontractingController
|
from erpnext.controllers.subcontracting_controller import SubcontractingController
|
||||||
from erpnext.stock.get_item_details import get_conversion_factor
|
from erpnext.stock.get_item_details import get_conversion_factor
|
||||||
@@ -180,6 +181,12 @@ class BuyingController(SubcontractingController):
|
|||||||
|
|
||||||
self.set_missing_item_details(for_validate)
|
self.set_missing_item_details(for_validate)
|
||||||
|
|
||||||
|
if self.meta.get_field("taxes"):
|
||||||
|
if self.get("taxes_and_charges") and not self.get("taxes") and not for_validate:
|
||||||
|
taxes = get_taxes_and_charges("Purchase Taxes and Charges Template", self.taxes_and_charges)
|
||||||
|
for tax in taxes:
|
||||||
|
self.append("taxes", tax)
|
||||||
|
|
||||||
def set_supplier_from_item_default(self):
|
def set_supplier_from_item_default(self):
|
||||||
if self.meta.get_field("supplier") and not self.supplier:
|
if self.meta.get_field("supplier") and not self.supplier:
|
||||||
for d in self.get("items"):
|
for d in self.get("items"):
|
||||||
|
|||||||
Reference in New Issue
Block a user