mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-05 13:24:47 +00:00
refactor: resolve regression-safe CodeQL code-quality findings (#55531)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -47,7 +47,7 @@ class TestBankTransaction(ERPNextTestSuite):
|
|||||||
from_date=bank_transaction.date,
|
from_date=bank_transaction.date,
|
||||||
to_date=utils.today(),
|
to_date=utils.today(),
|
||||||
)
|
)
|
||||||
self.assertTrue(linked_payments[0]["party"] == "Conrad Electronic")
|
self.assertEqual(linked_payments[0]["party"], "Conrad Electronic")
|
||||||
|
|
||||||
# This test validates a simple reconciliation leading to the clearance of the bank transaction and the payment
|
# This test validates a simple reconciliation leading to the clearance of the bank transaction and the payment
|
||||||
def test_reconcile(self):
|
def test_reconcile(self):
|
||||||
@@ -70,10 +70,10 @@ class TestBankTransaction(ERPNextTestSuite):
|
|||||||
unallocated_amount = frappe.db.get_value(
|
unallocated_amount = frappe.db.get_value(
|
||||||
"Bank Transaction", bank_transaction.name, "unallocated_amount"
|
"Bank Transaction", bank_transaction.name, "unallocated_amount"
|
||||||
)
|
)
|
||||||
self.assertTrue(unallocated_amount == 0)
|
self.assertEqual(unallocated_amount, 0)
|
||||||
|
|
||||||
clearance_date = frappe.db.get_value("Payment Entry", payment.name, "clearance_date")
|
clearance_date = frappe.db.get_value("Payment Entry", payment.name, "clearance_date")
|
||||||
self.assertTrue(clearance_date is not None)
|
self.assertIsNot(clearance_date, None)
|
||||||
|
|
||||||
bank_transaction.reload()
|
bank_transaction.reload()
|
||||||
bank_transaction.cancel()
|
bank_transaction.cancel()
|
||||||
@@ -178,9 +178,8 @@ class TestBankTransaction(ERPNextTestSuite):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
frappe.db.get_value("Bank Transaction", bank_transaction.name, "unallocated_amount"), 0
|
frappe.db.get_value("Bank Transaction", bank_transaction.name, "unallocated_amount"), 0
|
||||||
)
|
)
|
||||||
self.assertTrue(
|
self.assertIsNot(
|
||||||
frappe.db.get_value("Sales Invoice Payment", dict(parent=payment.name), "clearance_date")
|
frappe.db.get_value("Sales Invoice Payment", dict(parent=payment.name), "clearance_date"), None
|
||||||
is not None
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@if_lending_app_installed
|
@if_lending_app_installed
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ class TestCostCenterAllocation(ERPNextTestSuite):
|
|||||||
self.assertTrue(gl_entries)
|
self.assertTrue(gl_entries)
|
||||||
|
|
||||||
for gle in gl_entries:
|
for gle in gl_entries:
|
||||||
self.assertTrue(gle.cost_center in expected_values)
|
self.assertIn(gle.cost_center, expected_values)
|
||||||
self.assertEqual(gle.debit, 0)
|
self.assertEqual(gle.debit, 0)
|
||||||
self.assertEqual(gle.credit, expected_values[gle.cost_center])
|
self.assertEqual(gle.credit, expected_values[gle.cost_center])
|
||||||
|
|
||||||
|
|||||||
@@ -361,7 +361,7 @@ class CalculationFormulaValidator(Validator):
|
|||||||
"sqrt": lambda x: x**0.5,
|
"sqrt": lambda x: x**0.5,
|
||||||
"pow": pow,
|
"pow": pow,
|
||||||
"ceil": lambda x: int(x) + (1 if x % 1 else 0),
|
"ceil": lambda x: int(x) + (1 if x % 1 else 0),
|
||||||
"floor": lambda x: int(x),
|
"floor": int,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ class TestJournalEntry(ERPNextTestSuite):
|
|||||||
)
|
)
|
||||||
payment_against_order = base_jv.get("accounts")[0].get(dr_or_cr)
|
payment_against_order = base_jv.get("accounts")[0].get(dr_or_cr)
|
||||||
|
|
||||||
self.assertTrue(flt(advance_paid[0][0]) == flt(payment_against_order))
|
self.assertEqual(flt(advance_paid[0][0]), flt(payment_against_order))
|
||||||
|
|
||||||
def cancel_against_voucher_testcase(self, test_voucher):
|
def cancel_against_voucher_testcase(self, test_voucher):
|
||||||
if test_voucher.doctype == "Journal Entry":
|
if test_voucher.doctype == "Journal Entry":
|
||||||
|
|||||||
@@ -1119,7 +1119,7 @@ class TestPaymentEntry(ERPNextTestSuite):
|
|||||||
with self.assertRaises(frappe.ValidationError) as err:
|
with self.assertRaises(frappe.ValidationError) as err:
|
||||||
pe.save()
|
pe.save()
|
||||||
|
|
||||||
self.assertTrue("is on hold" in str(err.exception).lower())
|
self.assertIn("is on hold", str(err.exception).lower())
|
||||||
|
|
||||||
def test_payment_entry_for_employee(self):
|
def test_payment_entry_for_employee(self):
|
||||||
employee = make_employee("test_payment_entry@salary.com", company="_Test Company")
|
employee = make_employee("test_payment_entry@salary.com", company="_Test Company")
|
||||||
@@ -2035,8 +2035,8 @@ class TestPaymentEntry(ERPNextTestSuite):
|
|||||||
|
|
||||||
# check cancellation of payment entry and journal entry
|
# check cancellation of payment entry and journal entry
|
||||||
pe.cancel()
|
pe.cancel()
|
||||||
self.assertTrue(pe.docstatus == 2)
|
self.assertEqual(pe.docstatus, 2)
|
||||||
self.assertTrue(frappe.db.get_value("Journal Entry", {"name": jv[0]}, "docstatus") == 2)
|
self.assertEqual(frappe.db.get_value("Journal Entry", {"name": jv[0]}, "docstatus"), 2)
|
||||||
|
|
||||||
# check deletion of payment entry and journal entry
|
# check deletion of payment entry and journal entry
|
||||||
pe.delete()
|
pe.delete()
|
||||||
|
|||||||
@@ -3,11 +3,9 @@
|
|||||||
|
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import qb
|
|
||||||
from frappe.utils import add_days, add_years, flt, getdate, nowdate, today
|
from frappe.utils import add_days, add_years, flt, getdate, nowdate, today
|
||||||
from frappe.utils.data import getdate as convert_to_date
|
from frappe.utils.data import getdate as convert_to_date
|
||||||
|
|
||||||
from erpnext import get_default_cost_center
|
|
||||||
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
|
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
|
||||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
|
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
|
||||||
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
|
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
|
||||||
@@ -15,7 +13,6 @@ from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sal
|
|||||||
from erpnext.accounts.party import get_party_account
|
from erpnext.accounts.party import get_party_account
|
||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
|
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
|
||||||
from erpnext.stock.doctype.item.test_item import create_item
|
|
||||||
from erpnext.tests.utils import ERPNextTestSuite
|
from erpnext.tests.utils import ERPNextTestSuite
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class TestPOSInvoiceMergeLog(ERPNextTestSuite):
|
|||||||
pos_inv3.load_from_db()
|
pos_inv3.load_from_db()
|
||||||
self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv3.consolidated_invoice))
|
self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv3.consolidated_invoice))
|
||||||
|
|
||||||
self.assertFalse(pos_inv.consolidated_invoice == pos_inv3.consolidated_invoice)
|
self.assertNotEqual(pos_inv.consolidated_invoice, pos_inv3.consolidated_invoice)
|
||||||
|
|
||||||
def test_consolidated_credit_note_creation(self):
|
def test_consolidated_credit_note_creation(self):
|
||||||
pos_inv = create_pos_invoice(rate=300, do_not_submit=1)
|
pos_inv = create_pos_invoice(rate=300, do_not_submit=1)
|
||||||
@@ -454,12 +454,12 @@ class TestPOSInvoiceMergeLog(ERPNextTestSuite):
|
|||||||
pos_inv2.load_from_db()
|
pos_inv2.load_from_db()
|
||||||
self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv2.consolidated_invoice))
|
self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv2.consolidated_invoice))
|
||||||
|
|
||||||
self.assertFalse(pos_inv.consolidated_invoice == pos_inv3.consolidated_invoice)
|
self.assertNotEqual(pos_inv.consolidated_invoice, pos_inv3.consolidated_invoice)
|
||||||
|
|
||||||
pos_inv3.load_from_db()
|
pos_inv3.load_from_db()
|
||||||
self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv3.consolidated_invoice))
|
self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv3.consolidated_invoice))
|
||||||
|
|
||||||
self.assertTrue(pos_inv2.consolidated_invoice == pos_inv3.consolidated_invoice)
|
self.assertEqual(pos_inv2.consolidated_invoice, pos_inv3.consolidated_invoice)
|
||||||
|
|
||||||
def test_company_in_pos_invoice_merge_log(self):
|
def test_company_in_pos_invoice_merge_log(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -2077,7 +2077,7 @@ class TestPurchaseInvoice(ERPNextTestSuite, StockTestMixin):
|
|||||||
return_pi = make_return_doc(pi.doctype, pi.name)
|
return_pi = make_return_doc(pi.doctype, pi.name)
|
||||||
return_pi.save().submit()
|
return_pi.save().submit()
|
||||||
|
|
||||||
self.assertTrue(return_pi.docstatus == 1)
|
self.assertEqual(return_pi.docstatus, 1)
|
||||||
|
|
||||||
def test_advance_entries_as_asset(self):
|
def test_advance_entries_as_asset(self):
|
||||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
|
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
|
||||||
|
|||||||
@@ -881,7 +881,7 @@ class TestSalesInvoice(ERPNextTestSuite):
|
|||||||
link_doctypes = [d.parent for d in link_data]
|
link_doctypes = [d.parent for d in link_data]
|
||||||
|
|
||||||
# test case for dynamic link order
|
# test case for dynamic link order
|
||||||
self.assertTrue(link_doctypes.index("GL Entry") > link_doctypes.index("Journal Entry Account"))
|
self.assertGreater(link_doctypes.index("GL Entry"), link_doctypes.index("Journal Entry Account"))
|
||||||
|
|
||||||
jv.cancel()
|
jv.cancel()
|
||||||
self.assertEqual(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 562.0)
|
self.assertEqual(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 562.0)
|
||||||
@@ -3517,7 +3517,7 @@ class TestSalesInvoice(ERPNextTestSuite):
|
|||||||
with self.assertRaises(frappe.ValidationError) as err:
|
with self.assertRaises(frappe.ValidationError) as err:
|
||||||
si.save()
|
si.save()
|
||||||
|
|
||||||
self.assertTrue("cannot overbill" in str(err.exception).lower())
|
self.assertIn("cannot overbill", str(err.exception).lower())
|
||||||
dn.cancel()
|
dn.cancel()
|
||||||
|
|
||||||
@ERPNextTestSuite.change_settings(
|
@ERPNextTestSuite.change_settings(
|
||||||
@@ -3630,9 +3630,7 @@ class TestSalesInvoice(ERPNextTestSuite):
|
|||||||
with self.assertRaises(frappe.ValidationError) as err:
|
with self.assertRaises(frappe.ValidationError) as err:
|
||||||
si.submit()
|
si.submit()
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertIn("Cannot create accounting entries against disabled accounts", str(err.exception))
|
||||||
"Cannot create accounting entries against disabled accounts" in str(err.exception)
|
|
||||||
)
|
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
account.disabled = 0
|
account.disabled = 0
|
||||||
@@ -3727,7 +3725,7 @@ class TestSalesInvoice(ERPNextTestSuite):
|
|||||||
return_si = make_return_doc(si.doctype, si.name)
|
return_si = make_return_doc(si.doctype, si.name)
|
||||||
return_si.save().submit()
|
return_si.save().submit()
|
||||||
|
|
||||||
self.assertTrue(return_si.docstatus == 1)
|
self.assertEqual(return_si.docstatus, 1)
|
||||||
|
|
||||||
def test_sales_invoice_with_payable_tax_account(self):
|
def test_sales_invoice_with_payable_tax_account(self):
|
||||||
si = create_sales_invoice(do_not_submit=True)
|
si = create_sales_invoice(do_not_submit=True)
|
||||||
|
|||||||
@@ -387,7 +387,7 @@ class TestTaxRule(ERPNextTestSuite):
|
|||||||
self.assertEqual(quotation.taxes_and_charges, "_Test Sales Taxes and Charges Template - _TC")
|
self.assertEqual(quotation.taxes_and_charges, "_Test Sales Taxes and Charges Template - _TC")
|
||||||
|
|
||||||
# Check if accounts heads and rate fetched are also fetched from tax template or not
|
# Check if accounts heads and rate fetched are also fetched from tax template or not
|
||||||
self.assertTrue(len(quotation.taxes) > 0)
|
self.assertGreater(len(quotation.taxes), 0)
|
||||||
|
|
||||||
|
|
||||||
def make_tax_rule(**args):
|
def make_tax_rule(**args):
|
||||||
|
|||||||
@@ -476,7 +476,7 @@ class TestTaxWithholdingCategory(ERPNextTestSuite):
|
|||||||
|
|
||||||
# Cumulative threshold is 10,000
|
# Cumulative threshold is 10,000
|
||||||
# Threshold calculation should be only on the third invoice
|
# Threshold calculation should be only on the third invoice
|
||||||
self.assertTrue(len(pi1.taxes) > 0)
|
self.assertGreater(len(pi1.taxes), 0)
|
||||||
self.assertEqual(pi1.taxes[0].tax_amount, 1000)
|
self.assertEqual(pi1.taxes[0].tax_amount, 1000)
|
||||||
|
|
||||||
self.cleanup_invoices(invoices)
|
self.cleanup_invoices(invoices)
|
||||||
@@ -3654,7 +3654,7 @@ class TestTaxWithholdingCategory(ERPNextTestSuite):
|
|||||||
pi = create_purchase_invoice(supplier="Test TDS Supplier", rate=50000, do_not_save=True)
|
pi = create_purchase_invoice(supplier="Test TDS Supplier", rate=50000, do_not_save=True)
|
||||||
pi.save()
|
pi.save()
|
||||||
|
|
||||||
self.assertTrue(len(pi.tax_withholding_entries) > 0)
|
self.assertGreater(len(pi.tax_withholding_entries), 0)
|
||||||
pi.delete()
|
pi.delete()
|
||||||
|
|
||||||
def test_tds_rounding_with_decimal_amounts(self):
|
def test_tds_rounding_with_decimal_amounts(self):
|
||||||
@@ -3720,7 +3720,7 @@ class TestTaxWithholdingCategory(ERPNextTestSuite):
|
|||||||
self.setup_party_with_category("Supplier", "Test TDS Supplier", "Cumulative Threshold TDS")
|
self.setup_party_with_category("Supplier", "Test TDS Supplier", "Cumulative Threshold TDS")
|
||||||
pi = create_purchase_invoice(supplier="Test TDS Supplier", rate=50000)
|
pi = create_purchase_invoice(supplier="Test TDS Supplier", rate=50000)
|
||||||
|
|
||||||
self.assertTrue(len(pi.tax_withholding_entries) > 0)
|
self.assertGreater(len(pi.tax_withholding_entries), 0)
|
||||||
pi.override_tax_withholding_entries = 1
|
pi.override_tax_withholding_entries = 1
|
||||||
|
|
||||||
entry = pi.tax_withholding_entries[0]
|
entry = pi.tax_withholding_entries[0]
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ from collections import OrderedDict
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _, qb, query_builder, scrub
|
from frappe import _, qb, query_builder, scrub
|
||||||
from frappe.database.schema import get_definition
|
|
||||||
from frappe.query_builder import Criterion
|
from frappe.query_builder import Criterion
|
||||||
from frappe.query_builder.functions import Date, Substring, Sum
|
from frappe.query_builder.functions import Date, Substring, Sum
|
||||||
from frappe.utils import cint, cstr, flt, getdate, nowdate
|
from frappe.utils import cint, cstr, flt, getdate, nowdate
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ class TestAccountsReceivable(ERPNextTestSuite, AccountsTestMixin):
|
|||||||
report = execute(filters)
|
report = execute(filters)
|
||||||
|
|
||||||
row = report[1]
|
row = report[1]
|
||||||
self.assertTrue(len(row) == 0)
|
self.assertEqual(len(row), 0)
|
||||||
|
|
||||||
@ERPNextTestSuite.change_settings(
|
@ERPNextTestSuite.change_settings(
|
||||||
"Accounts Settings",
|
"Accounts Settings",
|
||||||
@@ -764,7 +764,7 @@ class TestAccountsReceivable(ERPNextTestSuite, AccountsTestMixin):
|
|||||||
report = execute(filters)[1]
|
report = execute(filters)[1]
|
||||||
|
|
||||||
# Assert that the report contains data for the specified customer groups
|
# Assert that the report contains data for the specified customer groups
|
||||||
self.assertTrue(len(report) > 0)
|
self.assertGreater(len(report), 0)
|
||||||
|
|
||||||
for row in report:
|
for row in report:
|
||||||
# Assert that the customer group of each row is in the list of customer groups
|
# Assert that the customer group of each row is in the list of customer groups
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ class TestSalesPaymentSummary(ERPNextTestSuite):
|
|||||||
pe.submit()
|
pe.submit()
|
||||||
|
|
||||||
mop = get_mode_of_payments(filters)
|
mop = get_mode_of_payments(filters)
|
||||||
self.assertTrue("Credit Card" in next(iter(mop.values())))
|
self.assertIn("Credit Card", next(iter(mop.values())))
|
||||||
self.assertTrue("Cash" in next(iter(mop.values())))
|
self.assertIn("Cash", next(iter(mop.values())))
|
||||||
|
|
||||||
# Cancel all Cash payment entry and check if this mode of payment is still fetched.
|
# Cancel all Cash payment entry and check if this mode of payment is still fetched.
|
||||||
payment_entries = frappe.get_all(
|
payment_entries = frappe.get_all(
|
||||||
@@ -50,8 +50,8 @@ class TestSalesPaymentSummary(ERPNextTestSuite):
|
|||||||
pe.cancel()
|
pe.cancel()
|
||||||
|
|
||||||
mop = get_mode_of_payments(filters)
|
mop = get_mode_of_payments(filters)
|
||||||
self.assertTrue("Credit Card" in next(iter(mop.values())))
|
self.assertIn("Credit Card", next(iter(mop.values())))
|
||||||
self.assertTrue("Cash" not in next(iter(mop.values())))
|
self.assertNotIn("Cash", next(iter(mop.values())))
|
||||||
|
|
||||||
def test_get_mode_of_payments_details(self):
|
def test_get_mode_of_payments_details(self):
|
||||||
filters = get_filters()
|
filters = get_filters()
|
||||||
@@ -100,7 +100,7 @@ class TestSalesPaymentSummary(ERPNextTestSuite):
|
|||||||
if mopd_value[0] == "Credit Card":
|
if mopd_value[0] == "Credit Card":
|
||||||
cc_final_amount = mopd_value[1]
|
cc_final_amount = mopd_value[1]
|
||||||
|
|
||||||
self.assertTrue(cc_init_amount > cc_final_amount)
|
self.assertGreater(cc_init_amount, cc_final_amount)
|
||||||
|
|
||||||
|
|
||||||
def get_filters():
|
def get_filters():
|
||||||
|
|||||||
@@ -37,15 +37,17 @@ class TestUtils(ERPNextTestSuite):
|
|||||||
future_vouchers = get_future_stock_vouchers("2021-01-01", "00:00:00", for_items=["_Test Item"])
|
future_vouchers = get_future_stock_vouchers("2021-01-01", "00:00:00", for_items=["_Test Item"])
|
||||||
|
|
||||||
voucher_type_and_no = ("Purchase Receipt", pr.name)
|
voucher_type_and_no = ("Purchase Receipt", pr.name)
|
||||||
self.assertTrue(
|
self.assertIn(
|
||||||
voucher_type_and_no in future_vouchers,
|
voucher_type_and_no,
|
||||||
|
future_vouchers,
|
||||||
msg="get_future_stock_vouchers not returning correct value",
|
msg="get_future_stock_vouchers not returning correct value",
|
||||||
)
|
)
|
||||||
|
|
||||||
posting_date = "2021-01-01"
|
posting_date = "2021-01-01"
|
||||||
gl_entries = get_voucherwise_gl_entries(future_vouchers, posting_date)
|
gl_entries = get_voucherwise_gl_entries(future_vouchers, posting_date)
|
||||||
self.assertTrue(
|
self.assertIn(
|
||||||
voucher_type_and_no in gl_entries,
|
voucher_type_and_no,
|
||||||
|
gl_entries,
|
||||||
msg="get_voucherwise_gl_entries not returning expected GLes",
|
msg="get_voucherwise_gl_entries not returning expected GLes",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1288,8 +1288,6 @@ def make_asset_movement(
|
|||||||
assets: list[dict] | str,
|
assets: list[dict] | str,
|
||||||
purpose: str = "Transfer",
|
purpose: str = "Transfer",
|
||||||
):
|
):
|
||||||
import json
|
|
||||||
|
|
||||||
if isinstance(assets, str):
|
if isinstance(assets, str):
|
||||||
assets = json.loads(assets)
|
assets = json.loads(assets)
|
||||||
|
|
||||||
|
|||||||
@@ -885,9 +885,9 @@ class TestAsset(AssetSetup):
|
|||||||
with self.assertRaises(frappe.ValidationError) as err:
|
with self.assertRaises(frappe.ValidationError) as err:
|
||||||
asset.save()
|
asset.save()
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertIn(
|
||||||
"Please set Depreciation related Accounts in Asset Category Computers or Company"
|
"Please set Depreciation related Accounts in Asset Category Computers or Company",
|
||||||
in str(err.exception)
|
str(err.exception),
|
||||||
)
|
)
|
||||||
finally:
|
finally:
|
||||||
frappe.db.set_value("Company", "_Test Company", company_depreciation_accounts)
|
frappe.db.set_value("Company", "_Test Company", company_depreciation_accounts)
|
||||||
@@ -1699,8 +1699,8 @@ class TestDepreciationBasics(AssetSetup):
|
|||||||
accumulated_depreciation_after_full_schedule
|
accumulated_depreciation_after_full_schedule
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertGreaterEqual(
|
||||||
asset.finance_books[0].expected_value_after_useful_life >= asset_value_after_full_schedule
|
asset.finance_books[0].expected_value_after_useful_life, asset_value_after_full_schedule
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_gle_made_by_depreciation_entries(self):
|
def test_gle_made_by_depreciation_entries(self):
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class TestAssetCategory(ERPNextTestSuite):
|
|||||||
)
|
)
|
||||||
with self.assertRaises(frappe.ValidationError) as err:
|
with self.assertRaises(frappe.ValidationError) as err:
|
||||||
asset_category.save()
|
asset_category.save()
|
||||||
self.assertTrue("Cannot set multiple account rows for the same company" in str(err.exception))
|
self.assertIn("Cannot set multiple account rows for the same company", str(err.exception))
|
||||||
|
|
||||||
def test_depreciation_accounts_required_for_existing_depreciable_assets(self):
|
def test_depreciation_accounts_required_for_existing_depreciable_assets(self):
|
||||||
asset = create_asset(
|
asset = create_asset(
|
||||||
@@ -110,9 +110,9 @@ class TestAssetCategory(ERPNextTestSuite):
|
|||||||
with self.assertRaises(frappe.ValidationError) as err:
|
with self.assertRaises(frappe.ValidationError) as err:
|
||||||
asset_category.save()
|
asset_category.save()
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertIn(
|
||||||
"Since there are active depreciable assets under this category, the following accounts are required."
|
"Since there are active depreciable assets under this category, the following accounts are required.",
|
||||||
in str(err.exception)
|
str(err.exception),
|
||||||
)
|
)
|
||||||
finally:
|
finally:
|
||||||
frappe.db.set_value("Company", asset.company, company_acccount_depreciation)
|
frappe.db.set_value("Company", asset.company, company_acccount_depreciation)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _, msgprint
|
from frappe import _
|
||||||
from frappe.desk.notifications import clear_doctype_notifications
|
from frappe.desk.notifications import clear_doctype_notifications
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
@@ -25,7 +25,6 @@ from erpnext.manufacturing.doctype.blanket_order.blanket_order import (
|
|||||||
from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults
|
from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults
|
||||||
from erpnext.stock.doctype.item.item import get_item_defaults, get_last_purchase_details
|
from erpnext.stock.doctype.item.item import get_item_defaults, get_last_purchase_details
|
||||||
from erpnext.stock.stock_balance import get_ordered_qty, update_bin_qty
|
from erpnext.stock.stock_balance import get_ordered_qty, update_bin_qty
|
||||||
from erpnext.stock.utils import get_bin
|
|
||||||
from erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom import (
|
from erpnext.subcontracting.doctype.subcontracting_bom.subcontracting_bom import (
|
||||||
get_subcontracting_boms_for_finished_goods,
|
get_subcontracting_boms_for_finished_goods,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1469,7 +1469,7 @@ class TestPurchaseOrder(ERPNextTestSuite):
|
|||||||
pi1.submit()
|
pi1.submit()
|
||||||
|
|
||||||
self.assertEqual(pi1.grand_total, 10000.0)
|
self.assertEqual(pi1.grand_total, 10000.0)
|
||||||
self.assertTrue(len(pi1.items) == 1)
|
self.assertEqual(len(pi1.items), 1)
|
||||||
|
|
||||||
pi2 = make_pi_from_po(po.name)
|
pi2 = make_pi_from_po(po.name)
|
||||||
self.assertEqual(len(pi2.items), 2)
|
self.assertEqual(len(pi2.items), 2)
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ class TestSupplier(ERPNextTestSuite):
|
|||||||
def test_supplier_country(self):
|
def test_supplier_country(self):
|
||||||
# Test that country field exists in Supplier DocType
|
# Test that country field exists in Supplier DocType
|
||||||
supplier = frappe.get_doc("Supplier", "_Test Supplier with Country")
|
supplier = frappe.get_doc("Supplier", "_Test Supplier with Country")
|
||||||
self.assertTrue("country" in supplier.as_dict())
|
self.assertIn("country", supplier.as_dict())
|
||||||
|
|
||||||
# Test if test supplier field record is 'Greece'
|
# Test if test supplier field record is 'Greece'
|
||||||
self.assertEqual(supplier.country, "Greece")
|
self.assertEqual(supplier.country, "Greece")
|
||||||
|
|||||||
@@ -9,11 +9,10 @@ import frappe
|
|||||||
from frappe import qb, scrub
|
from frappe import qb, scrub
|
||||||
from frappe.desk.reportview import get_filters_cond, get_match_cond
|
from frappe.desk.reportview import get_filters_cond, get_match_cond
|
||||||
from frappe.permissions import has_permission
|
from frappe.permissions import has_permission
|
||||||
from frappe.query_builder import Case, Criterion, DocType, Field
|
from frappe.query_builder import Case, Criterion, DocType
|
||||||
from frappe.query_builder.functions import Concat, CustomFunction, Length, Locate, Substring, Sum
|
from frappe.query_builder.functions import Concat, CustomFunction, Length, Locate, Substring, Sum
|
||||||
from frappe.utils import nowdate, today, unique
|
from frappe.utils import nowdate, today, unique
|
||||||
from pypika import Order
|
from pypika import Order
|
||||||
from pypika.terms import LiteralValue
|
|
||||||
|
|
||||||
import erpnext
|
import erpnext
|
||||||
from erpnext.accounts.utils import build_qb_match_conditions
|
from erpnext.accounts.utils import build_qb_match_conditions
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from erpnext.tests.utils import ERPNextTestSuite
|
|||||||
class TestPlaidSettings(ERPNextTestSuite):
|
class TestPlaidSettings(ERPNextTestSuite):
|
||||||
def test_plaid_disabled(self):
|
def test_plaid_disabled(self):
|
||||||
frappe.db.set_single_value("Plaid Settings", "enabled", 0)
|
frappe.db.set_single_value("Plaid Settings", "enabled", 0)
|
||||||
self.assertTrue(get_plaid_configuration() == "disabled")
|
self.assertEqual(get_plaid_configuration(), "disabled")
|
||||||
|
|
||||||
def test_add_account_type(self):
|
def test_add_account_type(self):
|
||||||
add_account_type("brokerage")
|
add_account_type("brokerage")
|
||||||
@@ -98,4 +98,4 @@ class TestPlaidSettings(ERPNextTestSuite):
|
|||||||
|
|
||||||
new_bank_transaction(transactions)
|
new_bank_transaction(transactions)
|
||||||
|
|
||||||
self.assertTrue(len(frappe.get_all("Bank Transaction")) == 1)
|
self.assertEqual(len(frappe.get_all("Bank Transaction")), 1)
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ class TestMaintenanceSchedule(ERPNextTestSuite):
|
|||||||
ms.submit()
|
ms.submit()
|
||||||
|
|
||||||
all_events = get_events(ms)
|
all_events = get_events(ms)
|
||||||
self.assertTrue(len(all_events) > 0)
|
self.assertGreater(len(all_events), 0)
|
||||||
|
|
||||||
ms.cancel()
|
ms.cancel()
|
||||||
events_after_cancel = get_events(ms)
|
events_after_cancel = get_events(ms)
|
||||||
self.assertTrue(len(events_after_cancel) == 0)
|
self.assertEqual(len(events_after_cancel), 0)
|
||||||
|
|
||||||
def test_make_schedule(self):
|
def test_make_schedule(self):
|
||||||
ms = make_maintenance_schedule()
|
ms = make_maintenance_schedule()
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ class TestBOM(ERPNextTestSuite):
|
|||||||
items_dict = get_bom_items_as_dict(
|
items_dict = get_bom_items_as_dict(
|
||||||
bom=get_default_bom(), company="_Test Company", qty=1, fetch_exploded=0
|
bom=get_default_bom(), company="_Test Company", qty=1, fetch_exploded=0
|
||||||
)
|
)
|
||||||
self.assertTrue(self.globalTestRecords["BOM"][2]["items"][0]["item_code"] in items_dict)
|
self.assertIn(self.globalTestRecords["BOM"][2]["items"][0]["item_code"], items_dict)
|
||||||
self.assertTrue(self.globalTestRecords["BOM"][2]["items"][1]["item_code"] in items_dict)
|
self.assertIn(self.globalTestRecords["BOM"][2]["items"][1]["item_code"], items_dict)
|
||||||
self.assertEqual(len(items_dict.values()), 2)
|
self.assertEqual(len(items_dict.values()), 2)
|
||||||
|
|
||||||
@timeout
|
@timeout
|
||||||
@@ -45,10 +45,10 @@ class TestBOM(ERPNextTestSuite):
|
|||||||
items_dict = get_bom_items_as_dict(
|
items_dict = get_bom_items_as_dict(
|
||||||
bom=get_default_bom(), company="_Test Company", qty=1, fetch_exploded=1
|
bom=get_default_bom(), company="_Test Company", qty=1, fetch_exploded=1
|
||||||
)
|
)
|
||||||
self.assertTrue(self.globalTestRecords["BOM"][2]["items"][0]["item_code"] in items_dict)
|
self.assertIn(self.globalTestRecords["BOM"][2]["items"][0]["item_code"], items_dict)
|
||||||
self.assertFalse(self.globalTestRecords["BOM"][2]["items"][1]["item_code"] in items_dict)
|
self.assertNotIn(self.globalTestRecords["BOM"][2]["items"][1]["item_code"], items_dict)
|
||||||
self.assertTrue(self.globalTestRecords["BOM"][0]["items"][0]["item_code"] in items_dict)
|
self.assertIn(self.globalTestRecords["BOM"][0]["items"][0]["item_code"], items_dict)
|
||||||
self.assertTrue(self.globalTestRecords["BOM"][0]["items"][1]["item_code"] in items_dict)
|
self.assertIn(self.globalTestRecords["BOM"][0]["items"][1]["item_code"], items_dict)
|
||||||
self.assertEqual(len(items_dict.values()), 3)
|
self.assertEqual(len(items_dict.values()), 3)
|
||||||
|
|
||||||
@timeout
|
@timeout
|
||||||
@@ -763,9 +763,9 @@ class TestBOM(ERPNextTestSuite):
|
|||||||
for row in data:
|
for row in data:
|
||||||
items.append(row[0])
|
items.append(row[0])
|
||||||
|
|
||||||
self.assertTrue("_Test RM Item 1 Do Not Include In Manufacture" not in items)
|
self.assertNotIn("_Test RM Item 1 Do Not Include In Manufacture", items)
|
||||||
self.assertTrue("_Test RM Item 2 Fixed Asset Item" not in items)
|
self.assertNotIn("_Test RM Item 2 Fixed Asset Item", items)
|
||||||
self.assertTrue("_Test RM Item 3 Manufacture Item" in items)
|
self.assertIn("_Test RM Item 3 Manufacture Item", items)
|
||||||
|
|
||||||
def test_bom_raw_materials_stock_uom(self):
|
def test_bom_raw_materials_stock_uom(self):
|
||||||
rm_item = make_item(
|
rm_item = make_item(
|
||||||
|
|||||||
@@ -1895,8 +1895,6 @@ def get_materials_from_other_locations(item, warehouses, new_mr_items, company):
|
|||||||
|
|
||||||
precision = frappe.get_precision("Material Request Plan Item", "quantity")
|
precision = frappe.get_precision("Material Request Plan Item", "quantity")
|
||||||
if flt(required_qty, precision) > 0:
|
if flt(required_qty, precision) > 0:
|
||||||
required_qty = required_qty
|
|
||||||
|
|
||||||
if frappe.db.get_value("UOM", purchase_uom, "must_be_whole_number"):
|
if frappe.db.get_value("UOM", purchase_uom, "must_be_whole_number"):
|
||||||
required_qty = ceil(required_qty)
|
required_qty = ceil(required_qty)
|
||||||
|
|
||||||
|
|||||||
@@ -900,8 +900,9 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
missing_warehouse = expected_warehouses - warehouses
|
missing_warehouse = expected_warehouses - warehouses
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertEqual(
|
||||||
len(missing_warehouse) == 0,
|
len(missing_warehouse),
|
||||||
|
0,
|
||||||
msg=f"Following warehouses were expected {', '.join(missing_warehouse)}",
|
msg=f"Following warehouses were expected {', '.join(missing_warehouse)}",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1392,7 +1393,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
validate_mr_items = [d.get("item_code") for d in items]
|
validate_mr_items = [d.get("item_code") for d in items]
|
||||||
for item_code in mr_items:
|
for item_code in mr_items:
|
||||||
self.assertTrue(item_code in validate_mr_items)
|
self.assertIn(item_code, validate_mr_items)
|
||||||
|
|
||||||
def test_reserved_qty_for_production_plan_for_material_requests(self):
|
def test_reserved_qty_for_production_plan_for_material_requests(self):
|
||||||
from erpnext.stock.utils import get_or_make_bin
|
from erpnext.stock.utils import get_or_make_bin
|
||||||
@@ -1510,7 +1511,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
non_completed_plans = get_non_completed_production_plans()
|
non_completed_plans = get_non_completed_production_plans()
|
||||||
|
|
||||||
for plan in plans:
|
for plan in plans:
|
||||||
self.assertTrue(plan in non_completed_plans)
|
self.assertIn(plan, non_completed_plans)
|
||||||
|
|
||||||
def test_reserved_qty_for_production_plan_for_material_requests_with_multi_UOM(self):
|
def test_reserved_qty_for_production_plan_for_material_requests_with_multi_UOM(self):
|
||||||
from erpnext.stock.utils import get_or_make_bin
|
from erpnext.stock.utils import get_or_make_bin
|
||||||
@@ -1721,13 +1722,13 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
for row in items:
|
for row in items:
|
||||||
row = frappe._dict(row)
|
row = frappe._dict(row)
|
||||||
if row.material_request_type == "Material Transfer":
|
if row.material_request_type == "Material Transfer":
|
||||||
self.assertTrue(row.uom == row.stock_uom)
|
self.assertEqual(row.uom, row.stock_uom)
|
||||||
self.assertTrue(row.from_warehouse in [wh1, wh2])
|
self.assertIn(row.from_warehouse, [wh1, wh2])
|
||||||
self.assertEqual(row.quantity, 2)
|
self.assertEqual(row.quantity, 2)
|
||||||
|
|
||||||
if row.material_request_type == "Purchase":
|
if row.material_request_type == "Purchase":
|
||||||
self.assertTrue(row.uom != row.stock_uom)
|
self.assertNotEqual(row.uom, row.stock_uom)
|
||||||
self.assertTrue(row.warehouse == mrp_warhouse)
|
self.assertEqual(row.warehouse, mrp_warhouse)
|
||||||
self.assertEqual(row.quantity, 12.0)
|
self.assertEqual(row.quantity, 12.0)
|
||||||
|
|
||||||
def test_mr_qty_for_complex_bom(self):
|
def test_mr_qty_for_complex_bom(self):
|
||||||
@@ -2257,12 +2258,12 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
plan.save()
|
plan.save()
|
||||||
|
|
||||||
self.assertTrue(len(plan.sub_assembly_items) == 3)
|
self.assertEqual(len(plan.sub_assembly_items), 3)
|
||||||
for row in plan.sub_assembly_items:
|
for row in plan.sub_assembly_items:
|
||||||
self.assertEqual(row.required_qty, 15.0)
|
self.assertEqual(row.required_qty, 15.0)
|
||||||
self.assertEqual(row.qty, 10.0)
|
self.assertEqual(row.qty, 10.0)
|
||||||
|
|
||||||
self.assertTrue(len(plan.mr_items) == 3)
|
self.assertEqual(len(plan.mr_items), 3)
|
||||||
for row in plan.mr_items:
|
for row in plan.mr_items:
|
||||||
self.assertEqual(row.required_bom_qty, 10.0)
|
self.assertEqual(row.required_bom_qty, 10.0)
|
||||||
self.assertEqual(row.quantity, 5.0)
|
self.assertEqual(row.quantity, 5.0)
|
||||||
@@ -2271,7 +2272,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 6)
|
self.assertEqual(len(reserved_entries), 6)
|
||||||
|
|
||||||
for row in reserved_entries:
|
for row in reserved_entries:
|
||||||
self.assertEqual(row.reserved_qty, 5.0)
|
self.assertEqual(row.reserved_qty, 5.0)
|
||||||
@@ -2284,7 +2285,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
"Material Request", filters={"production_plan": plan.name}, pluck="name"
|
"Material Request", filters={"production_plan": plan.name}, pluck="name"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(len(material_requests) > 0)
|
self.assertGreater(len(material_requests), 0)
|
||||||
for mr_name in list(set(material_requests)):
|
for mr_name in list(set(material_requests)):
|
||||||
po = make_purchase_order(mr_name)
|
po = make_purchase_order(mr_name)
|
||||||
po.supplier = "_Test Supplier"
|
po.supplier = "_Test Supplier"
|
||||||
@@ -2295,7 +2296,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 9)
|
self.assertEqual(len(reserved_entries), 9)
|
||||||
|
|
||||||
work_orders = frappe.get_all("Work Order", filters={"production_plan": plan.name}, pluck="name")
|
work_orders = frappe.get_all("Work Order", filters={"production_plan": plan.name}, pluck="name")
|
||||||
for wo_name in list(set(work_orders)):
|
for wo_name in list(set(work_orders)):
|
||||||
@@ -2318,7 +2319,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 0)
|
self.assertEqual(len(reserved_entries), 0)
|
||||||
frappe.db.set_single_value("Stock Settings", "enable_stock_reservation", 0)
|
frappe.db.set_single_value("Stock Settings", "enable_stock_reservation", 0)
|
||||||
|
|
||||||
def test_stock_reservation_of_serial_nos_against_production_plan(self):
|
def test_stock_reservation_of_serial_nos_against_production_plan(self):
|
||||||
@@ -2374,12 +2375,12 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
plan.save()
|
plan.save()
|
||||||
|
|
||||||
self.assertTrue(len(plan.sub_assembly_items) == 3)
|
self.assertEqual(len(plan.sub_assembly_items), 3)
|
||||||
for row in plan.sub_assembly_items:
|
for row in plan.sub_assembly_items:
|
||||||
self.assertEqual(row.required_qty, 15.0)
|
self.assertEqual(row.required_qty, 15.0)
|
||||||
self.assertEqual(row.qty, 10.0)
|
self.assertEqual(row.qty, 10.0)
|
||||||
|
|
||||||
self.assertTrue(len(plan.mr_items) == 3)
|
self.assertEqual(len(plan.mr_items), 3)
|
||||||
for row in plan.mr_items:
|
for row in plan.mr_items:
|
||||||
self.assertEqual(row.required_bom_qty, 10.0)
|
self.assertEqual(row.required_bom_qty, 10.0)
|
||||||
self.assertEqual(row.quantity, 5.0)
|
self.assertEqual(row.quantity, 5.0)
|
||||||
@@ -2388,7 +2389,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 30)
|
self.assertEqual(len(reserved_entries), 30)
|
||||||
|
|
||||||
for row in reserved_entries:
|
for row in reserved_entries:
|
||||||
self.assertEqual(row.reserved_qty, 5.0)
|
self.assertEqual(row.reserved_qty, 5.0)
|
||||||
@@ -2416,7 +2417,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
self.assertTrue(additional_serial_nos)
|
self.assertTrue(additional_serial_nos)
|
||||||
|
|
||||||
self.assertTrue(len(material_requests) > 0)
|
self.assertGreater(len(material_requests), 0)
|
||||||
for mr_name in list(set(material_requests)):
|
for mr_name in list(set(material_requests)):
|
||||||
po = make_purchase_order(mr_name)
|
po = make_purchase_order(mr_name)
|
||||||
po.supplier = "_Test Supplier"
|
po.supplier = "_Test Supplier"
|
||||||
@@ -2427,7 +2428,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 45)
|
self.assertEqual(len(reserved_entries), 45)
|
||||||
serial_nos_res_for_pp = frappe.get_all(
|
serial_nos_res_for_pp = frappe.get_all(
|
||||||
"Serial and Batch Entry",
|
"Serial and Batch Entry",
|
||||||
filters={"parent": ("in", [x.name for x in reserved_entries]), "docstatus": 1},
|
filters={"parent": ("in", [x.name for x in reserved_entries]), "docstatus": 1},
|
||||||
@@ -2453,8 +2454,8 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
)
|
)
|
||||||
|
|
||||||
for serial_no in serial_nos_res_for_wo:
|
for serial_no in serial_nos_res_for_wo:
|
||||||
self.assertTrue(serial_no in serial_nos_res_for_pp)
|
self.assertIn(serial_no, serial_nos_res_for_pp)
|
||||||
self.assertFalse(serial_no in additional_serial_nos)
|
self.assertNotIn(serial_no, additional_serial_nos)
|
||||||
|
|
||||||
if wo_doc.production_item == "Finished Good For SR":
|
if wo_doc.production_item == "Finished Good For SR":
|
||||||
self.assertEqual(len(reserved_entries), 15)
|
self.assertEqual(len(reserved_entries), 15)
|
||||||
@@ -2465,7 +2466,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 0)
|
self.assertEqual(len(reserved_entries), 0)
|
||||||
frappe.db.set_single_value("Stock Settings", "enable_stock_reservation", 0)
|
frappe.db.set_single_value("Stock Settings", "enable_stock_reservation", 0)
|
||||||
|
|
||||||
def test_stock_reservation_of_batch_nos_against_production_plan(self):
|
def test_stock_reservation_of_batch_nos_against_production_plan(self):
|
||||||
@@ -2522,12 +2523,12 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
plan.save()
|
plan.save()
|
||||||
|
|
||||||
self.assertTrue(len(plan.sub_assembly_items) == 3)
|
self.assertEqual(len(plan.sub_assembly_items), 3)
|
||||||
for row in plan.sub_assembly_items:
|
for row in plan.sub_assembly_items:
|
||||||
self.assertEqual(row.required_qty, 15.0)
|
self.assertEqual(row.required_qty, 15.0)
|
||||||
self.assertEqual(row.qty, 10.0)
|
self.assertEqual(row.qty, 10.0)
|
||||||
|
|
||||||
self.assertTrue(len(plan.mr_items) == 3)
|
self.assertEqual(len(plan.mr_items), 3)
|
||||||
for row in plan.mr_items:
|
for row in plan.mr_items:
|
||||||
self.assertEqual(row.required_bom_qty, 10.0)
|
self.assertEqual(row.required_bom_qty, 10.0)
|
||||||
self.assertEqual(row.quantity, 5.0)
|
self.assertEqual(row.quantity, 5.0)
|
||||||
@@ -2536,7 +2537,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 6)
|
self.assertEqual(len(reserved_entries), 6)
|
||||||
|
|
||||||
for row in reserved_entries:
|
for row in reserved_entries:
|
||||||
self.assertEqual(row.reserved_qty, 5.0)
|
self.assertEqual(row.reserved_qty, 5.0)
|
||||||
@@ -2565,7 +2566,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
self.assertTrue(additional_batches)
|
self.assertTrue(additional_batches)
|
||||||
|
|
||||||
self.assertTrue(len(material_requests) > 0)
|
self.assertGreater(len(material_requests), 0)
|
||||||
for mr_name in list(set(material_requests)):
|
for mr_name in list(set(material_requests)):
|
||||||
po = make_purchase_order(mr_name)
|
po = make_purchase_order(mr_name)
|
||||||
po.supplier = "_Test Supplier"
|
po.supplier = "_Test Supplier"
|
||||||
@@ -2576,7 +2577,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 9)
|
self.assertEqual(len(reserved_entries), 9)
|
||||||
batches_reserved_for_pp = frappe.get_all(
|
batches_reserved_for_pp = frappe.get_all(
|
||||||
"Serial and Batch Entry",
|
"Serial and Batch Entry",
|
||||||
filters={"parent": ("in", [x.name for x in reserved_entries]), "docstatus": 1},
|
filters={"parent": ("in", [x.name for x in reserved_entries]), "docstatus": 1},
|
||||||
@@ -2602,8 +2603,8 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
)
|
)
|
||||||
|
|
||||||
for batch_no in batches_reserved_for_wo:
|
for batch_no in batches_reserved_for_wo:
|
||||||
self.assertTrue(batch_no in batches_reserved_for_pp)
|
self.assertIn(batch_no, batches_reserved_for_pp)
|
||||||
self.assertFalse(batch_no in additional_batches)
|
self.assertNotIn(batch_no, additional_batches)
|
||||||
|
|
||||||
if wo_doc.production_item == "Finished Good For SR":
|
if wo_doc.production_item == "Finished Good For SR":
|
||||||
self.assertEqual(len(reserved_entries), 3)
|
self.assertEqual(len(reserved_entries), 3)
|
||||||
@@ -2614,7 +2615,7 @@ class TestProductionPlan(ERPNextTestSuite):
|
|||||||
|
|
||||||
sre = StockReservation(plan)
|
sre = StockReservation(plan)
|
||||||
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
reserved_entries = sre.get_reserved_entries("Production Plan", plan.name)
|
||||||
self.assertTrue(len(reserved_entries) == 0)
|
self.assertEqual(len(reserved_entries), 0)
|
||||||
frappe.db.set_single_value("Stock Settings", "enable_stock_reservation", 0)
|
frappe.db.set_single_value("Stock Settings", "enable_stock_reservation", 0)
|
||||||
|
|
||||||
def test_production_plan_for_partial_sub_assembly_items(self):
|
def test_production_plan_for_partial_sub_assembly_items(self):
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ from erpnext.stock.doctype.serial_and_batch_bundle.test_serial_and_batch_bundle
|
|||||||
)
|
)
|
||||||
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
|
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
|
||||||
from erpnext.stock.doctype.stock_entry import test_stock_entry
|
from erpnext.stock.doctype.stock_entry import test_stock_entry
|
||||||
from erpnext.stock.doctype.stock_entry.stock_entry_handler.manufacturing import ManufactureStockEntry
|
|
||||||
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
||||||
from erpnext.stock.utils import get_bin
|
from erpnext.stock.utils import get_bin
|
||||||
from erpnext.tests.utils import ERPNextTestSuite
|
from erpnext.tests.utils import ERPNextTestSuite
|
||||||
@@ -807,7 +806,7 @@ class TestWorkOrder(ERPNextTestSuite):
|
|||||||
|
|
||||||
bundle_id = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle)
|
bundle_id = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle)
|
||||||
for bundle_row in bundle_id.get("entries"):
|
for bundle_row in bundle_id.get("entries"):
|
||||||
self.assertTrue(bundle_row.batch_no in batches)
|
self.assertIn(bundle_row.batch_no, batches)
|
||||||
batches.remove(bundle_row.batch_no)
|
batches.remove(bundle_row.batch_no)
|
||||||
|
|
||||||
ste1.submit()
|
ste1.submit()
|
||||||
@@ -821,7 +820,7 @@ class TestWorkOrder(ERPNextTestSuite):
|
|||||||
|
|
||||||
bundle_id = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle)
|
bundle_id = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle)
|
||||||
for bundle_row in bundle_id.get("entries"):
|
for bundle_row in bundle_id.get("entries"):
|
||||||
self.assertTrue(bundle_row.batch_no in batches)
|
self.assertIn(bundle_row.batch_no, batches)
|
||||||
remaining_batches.append(bundle_row.batch_no)
|
remaining_batches.append(bundle_row.batch_no)
|
||||||
|
|
||||||
self.assertEqual(sorted(remaining_batches), sorted(batches))
|
self.assertEqual(sorted(remaining_batches), sorted(batches))
|
||||||
@@ -3173,12 +3172,12 @@ class TestWorkOrder(ERPNextTestSuite):
|
|||||||
transfer_entry.items[0].original_item = raw_materials[0]
|
transfer_entry.items[0].original_item = raw_materials[0]
|
||||||
transfer_entry.submit()
|
transfer_entry.submit()
|
||||||
|
|
||||||
self.assertTrue(transfer_entry.docstatus == 1)
|
self.assertEqual(transfer_entry.docstatus, 1)
|
||||||
|
|
||||||
manufacture_entry = frappe.get_doc(make_stock_entry(wo.name, "Manufacture", 10))
|
manufacture_entry = frappe.get_doc(make_stock_entry(wo.name, "Manufacture", 10))
|
||||||
manufacture_entry.save()
|
manufacture_entry.save()
|
||||||
self.assertTrue(manufacture_entry.items[0].item_code == alternate_item[0])
|
self.assertEqual(manufacture_entry.items[0].item_code, alternate_item[0])
|
||||||
self.assertTrue(manufacture_entry.items[0].original_item == raw_materials[0])
|
self.assertEqual(manufacture_entry.items[0].original_item, raw_materials[0])
|
||||||
|
|
||||||
manufacture_entry.submit()
|
manufacture_entry.submit()
|
||||||
|
|
||||||
@@ -3882,7 +3881,7 @@ class TestWorkOrder(ERPNextTestSuite):
|
|||||||
self.assertEqual(sorted(serial_nos), sorted(value.serial_nos))
|
self.assertEqual(sorted(serial_nos), sorted(value.serial_nos))
|
||||||
|
|
||||||
if value.batch_nos:
|
if value.batch_nos:
|
||||||
self.assertTrue(row.batch_no in value.batch_nos)
|
self.assertIn(row.batch_no, value.batch_nos)
|
||||||
|
|
||||||
_before_reserved_item = get_reserved_entries(wo.name, mt_stock_entry.items[0].t_warehouse)
|
_before_reserved_item = get_reserved_entries(wo.name, mt_stock_entry.items[0].t_warehouse)
|
||||||
|
|
||||||
@@ -3898,16 +3897,16 @@ class TestWorkOrder(ERPNextTestSuite):
|
|||||||
if row.serial_no:
|
if row.serial_no:
|
||||||
serial_nos = get_serial_nos_from_bundle(row.serial_and_batch_bundle)
|
serial_nos = get_serial_nos_from_bundle(row.serial_and_batch_bundle)
|
||||||
for sn in serial_nos:
|
for sn in serial_nos:
|
||||||
self.assertTrue(sn in value.serial_nos)
|
self.assertIn(sn, value.serial_nos)
|
||||||
value.serial_nos.remove(sn)
|
value.serial_nos.remove(sn)
|
||||||
|
|
||||||
if row.batch_no:
|
if row.batch_no:
|
||||||
self.assertTrue(row.batch_no in value.batch_nos)
|
self.assertIn(row.batch_no, value.batch_nos)
|
||||||
value.batch_nos[row.batch_no] -= row.qty
|
value.batch_nos[row.batch_no] -= row.qty
|
||||||
if row.serial_no:
|
if row.serial_no:
|
||||||
sns = get_serial_nos_from_bundle(row.serial_and_batch_bundle)
|
sns = get_serial_nos_from_bundle(row.serial_and_batch_bundle)
|
||||||
for sn in sns:
|
for sn in sns:
|
||||||
self.assertTrue(sn in value.serial_batches[row.batch_no])
|
self.assertIn(sn, value.serial_batches[row.batch_no])
|
||||||
value.serial_batches[row.batch_no].remove(sn)
|
value.serial_batches[row.batch_no].remove(sn)
|
||||||
|
|
||||||
# Manufacture 3 qty
|
# Manufacture 3 qty
|
||||||
@@ -3925,7 +3924,7 @@ class TestWorkOrder(ERPNextTestSuite):
|
|||||||
self.assertEqual(sorted(serial_nos), sorted(value.serial_nos))
|
self.assertEqual(sorted(serial_nos), sorted(value.serial_nos))
|
||||||
|
|
||||||
if row.batch_no:
|
if row.batch_no:
|
||||||
self.assertTrue(row.batch_no in value.batch_nos)
|
self.assertIn(row.batch_no, value.batch_nos)
|
||||||
self.assertEqual(value.batch_nos[row.batch_no], row.qty)
|
self.assertEqual(value.batch_nos[row.batch_no], row.qty)
|
||||||
if row.serial_no:
|
if row.serial_no:
|
||||||
sns = get_serial_nos_from_bundle(row.serial_and_batch_bundle)
|
sns = get_serial_nos_from_bundle(row.serial_and_batch_bundle)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.query_builder.functions import Floor, IfNull, Sum
|
from frappe.query_builder.functions import Floor, IfNull, Sum
|
||||||
from frappe.utils import flt, fmt_money
|
from frappe.utils import flt
|
||||||
from frappe.utils.data import comma_and
|
from frappe.utils.data import comma_and
|
||||||
from pypika.terms import ExistsCriterion
|
from pypika.terms import ExistsCriterion
|
||||||
|
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ class TestProject(ERPNextTestSuite):
|
|||||||
|
|
||||||
self.assertEqual(tasks[1].subject, "Test Template Task with Dependency")
|
self.assertEqual(tasks[1].subject, "Test Template Task with Dependency")
|
||||||
self.assertEqual(getdate(tasks[1].exp_end_date), calculate_end_date(project, 2, 2))
|
self.assertEqual(getdate(tasks[1].exp_end_date), calculate_end_date(project, 2, 2))
|
||||||
self.assertTrue(tasks[1].depends_on_tasks.find(tasks[0].name) >= 0)
|
self.assertGreaterEqual(tasks[1].depends_on_tasks.find(tasks[0].name), 0)
|
||||||
|
|
||||||
self.assertEqual(tasks[0].subject, "Test Template Task for Dependency")
|
self.assertEqual(tasks[0].subject, "Test Template Task for Dependency")
|
||||||
self.assertEqual(getdate(tasks[0].exp_end_date), calculate_end_date(project, 3, 1))
|
self.assertEqual(getdate(tasks[0].exp_end_date), calculate_end_date(project, 3, 1))
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class TestPartySpecificItem(ERPNextTestSuite):
|
|||||||
items = item_query(
|
items = item_query(
|
||||||
doctype="Item", txt="", searchfield="name", start=0, page_len=20, filters=filters, as_dict=False
|
doctype="Item", txt="", searchfield="name", start=0, page_len=20, filters=filters, as_dict=False
|
||||||
)
|
)
|
||||||
self.assertTrue(item in flatten(items))
|
self.assertIn(item, flatten(items))
|
||||||
|
|
||||||
def test_item_query_for_supplier(self):
|
def test_item_query_for_supplier(self):
|
||||||
supplier = "_Test Supplier With Template 1"
|
supplier = "_Test Supplier With Template 1"
|
||||||
@@ -47,7 +47,7 @@ class TestPartySpecificItem(ERPNextTestSuite):
|
|||||||
items = item_query(
|
items = item_query(
|
||||||
doctype="Item", txt="", searchfield="name", start=0, page_len=20, filters=filters, as_dict=False
|
doctype="Item", txt="", searchfield="name", start=0, page_len=20, filters=filters, as_dict=False
|
||||||
)
|
)
|
||||||
self.assertTrue(item in flatten(items))
|
self.assertIn(item, flatten(items))
|
||||||
|
|
||||||
def test_party_group(self):
|
def test_party_group(self):
|
||||||
customer = "_Test Customer With Template"
|
customer = "_Test Customer With Template"
|
||||||
@@ -64,7 +64,7 @@ class TestPartySpecificItem(ERPNextTestSuite):
|
|||||||
items = item_query(
|
items = item_query(
|
||||||
doctype="Item", txt="", searchfield="name", start=0, page_len=20, filters=filters, as_dict=False
|
doctype="Item", txt="", searchfield="name", start=0, page_len=20, filters=filters, as_dict=False
|
||||||
)
|
)
|
||||||
self.assertTrue(item in flatten(items))
|
self.assertIn(item, flatten(items))
|
||||||
|
|
||||||
|
|
||||||
def flatten(lst):
|
def flatten(lst):
|
||||||
|
|||||||
@@ -1408,7 +1408,6 @@ def make_delivery_note(
|
|||||||
dn_item.serial_and_batch_bundle = get_ssb_bundle_for_voucher([sre]).name
|
dn_item.serial_and_batch_bundle = get_ssb_bundle_for_voucher([sre]).name
|
||||||
|
|
||||||
target_doc.append("items", dn_item)
|
target_doc.append("items", dn_item)
|
||||||
else:
|
|
||||||
# Correct rows index.
|
# Correct rows index.
|
||||||
for idx, item in enumerate(target_doc.items):
|
for idx, item in enumerate(target_doc.items):
|
||||||
item.idx = idx + 1
|
item.idx = idx + 1
|
||||||
|
|||||||
@@ -986,8 +986,8 @@ class TestSalesOrder(ERPNextTestSuite):
|
|||||||
|
|
||||||
so = make_sales_order(item_code="_Test Service Product Bundle", warehouse=None)
|
so = make_sales_order(item_code="_Test Service Product Bundle", warehouse=None)
|
||||||
|
|
||||||
self.assertTrue("_Test Service Product Bundle Item 1" in [d.item_code for d in so.packed_items])
|
self.assertIn("_Test Service Product Bundle Item 1", [d.item_code for d in so.packed_items])
|
||||||
self.assertTrue("_Test Service Product Bundle Item 2" in [d.item_code for d in so.packed_items])
|
self.assertIn("_Test Service Product Bundle Item 2", [d.item_code for d in so.packed_items])
|
||||||
|
|
||||||
def test_mix_type_product_bundle(self):
|
def test_mix_type_product_bundle(self):
|
||||||
make_item("_Test Mix Product Bundle", {"is_stock_item": 0})
|
make_item("_Test Mix Product Bundle", {"is_stock_item": 0})
|
||||||
@@ -2342,8 +2342,8 @@ class TestSalesOrder(ERPNextTestSuite):
|
|||||||
pick_list.save()
|
pick_list.save()
|
||||||
for row in pick_list.locations:
|
for row in pick_list.locations:
|
||||||
self.assertEqual(row.qty, 1.0)
|
self.assertEqual(row.qty, 1.0)
|
||||||
self.assertFalse(row.warehouse == rejected_warehouse)
|
self.assertNotEqual(row.warehouse, rejected_warehouse)
|
||||||
self.assertTrue(row.warehouse == warehouse)
|
self.assertEqual(row.warehouse, warehouse)
|
||||||
|
|
||||||
def test_pick_list_for_batch(self):
|
def test_pick_list_for_batch(self):
|
||||||
from erpnext.stock.doctype.pick_list.pick_list import create_delivery_note
|
from erpnext.stock.doctype.pick_list.pick_list import create_delivery_note
|
||||||
@@ -2371,16 +2371,16 @@ class TestSalesOrder(ERPNextTestSuite):
|
|||||||
|
|
||||||
for row in pick_list.locations:
|
for row in pick_list.locations:
|
||||||
self.assertEqual(row.qty, 10.0)
|
self.assertEqual(row.qty, 10.0)
|
||||||
self.assertTrue(row.warehouse == warehouse)
|
self.assertEqual(row.warehouse, warehouse)
|
||||||
self.assertTrue(row.batch_no == batch_no)
|
self.assertEqual(row.batch_no, batch_no)
|
||||||
|
|
||||||
pick_list.submit()
|
pick_list.submit()
|
||||||
|
|
||||||
dn = create_delivery_note(pick_list.name)
|
dn = create_delivery_note(pick_list.name)
|
||||||
for row in dn.items:
|
for row in dn.items:
|
||||||
self.assertEqual(row.qty, 10.0)
|
self.assertEqual(row.qty, 10.0)
|
||||||
self.assertTrue(row.warehouse == warehouse)
|
self.assertEqual(row.warehouse, warehouse)
|
||||||
self.assertTrue(row.batch_no == batch_no)
|
self.assertEqual(row.batch_no, batch_no)
|
||||||
|
|
||||||
dn.submit()
|
dn.submit()
|
||||||
dn.reload()
|
dn.reload()
|
||||||
@@ -2438,7 +2438,7 @@ class TestSalesOrder(ERPNextTestSuite):
|
|||||||
|
|
||||||
so.items[0].rate = 90
|
so.items[0].rate = 90
|
||||||
so.save()
|
so.save()
|
||||||
self.assertTrue(so.items[0].discount_amount == 27558.0)
|
self.assertEqual(so.items[0].discount_amount, 27558.0)
|
||||||
so.submit()
|
so.submit()
|
||||||
|
|
||||||
warehouse = create_warehouse("NW Warehouse FOR Rate", company=so.company)
|
warehouse = create_warehouse("NW Warehouse FOR Rate", company=so.company)
|
||||||
@@ -2584,13 +2584,13 @@ class TestSalesOrder(ERPNextTestSuite):
|
|||||||
|
|
||||||
self.assertEqual(len(sres), 1)
|
self.assertEqual(len(sres), 1)
|
||||||
sre_doc = frappe.get_doc("Stock Reservation Entry", sres[0].name)
|
sre_doc = frappe.get_doc("Stock Reservation Entry", sres[0].name)
|
||||||
self.assertFalse(sre_doc.status == "Delivered")
|
self.assertNotEqual(sre_doc.status, "Delivered")
|
||||||
|
|
||||||
si = make_sales_invoice(so.name)
|
si = make_sales_invoice(so.name)
|
||||||
si.update_stock = 1
|
si.update_stock = 1
|
||||||
si.submit()
|
si.submit()
|
||||||
sre_doc.reload()
|
sre_doc.reload()
|
||||||
self.assertTrue(sre_doc.status == "Delivered")
|
self.assertEqual(sre_doc.status, "Delivered")
|
||||||
|
|
||||||
@ERPNextTestSuite.change_settings("Selling Settings", {"allow_zero_qty_in_sales_order": 1})
|
@ERPNextTestSuite.change_settings("Selling Settings", {"allow_zero_qty_in_sales_order": 1})
|
||||||
def test_deliver_zero_qty_purchase_order(self):
|
def test_deliver_zero_qty_purchase_order(self):
|
||||||
|
|||||||
@@ -119,12 +119,12 @@ class TestCompany(ERPNextTestSuite):
|
|||||||
|
|
||||||
self.assertTrue(lft)
|
self.assertTrue(lft)
|
||||||
self.assertTrue(rgt)
|
self.assertTrue(rgt)
|
||||||
self.assertTrue(lft < rgt)
|
self.assertLess(lft, rgt)
|
||||||
self.assertTrue(parent_lft < parent_rgt)
|
self.assertLess(parent_lft, parent_rgt)
|
||||||
self.assertTrue(lft > parent_lft)
|
self.assertGreater(lft, parent_lft)
|
||||||
self.assertTrue(rgt < parent_rgt)
|
self.assertLess(rgt, parent_rgt)
|
||||||
self.assertTrue(lft >= min_lft)
|
self.assertGreaterEqual(lft, min_lft)
|
||||||
self.assertTrue(rgt <= max_rgt)
|
self.assertLessEqual(rgt, max_rgt)
|
||||||
|
|
||||||
def test_primary_address(self):
|
def test_primary_address(self):
|
||||||
company = "_Test Company"
|
company = "_Test Company"
|
||||||
|
|||||||
@@ -104,11 +104,11 @@ class TestCurrencyExchange(ERPNextTestSuite):
|
|||||||
# Exchange rate as on 15th Dec, 2015
|
# Exchange rate as on 15th Dec, 2015
|
||||||
self.clear_cache()
|
self.clear_cache()
|
||||||
exchange_rate = get_exchange_rate("USD", "INR", "2015-12-15", "for_selling")
|
exchange_rate = get_exchange_rate("USD", "INR", "2015-12-15", "for_selling")
|
||||||
self.assertFalse(exchange_rate == 60)
|
self.assertNotEqual(exchange_rate, 60)
|
||||||
self.assertEqual(flt(exchange_rate, 3), 66.999)
|
self.assertEqual(flt(exchange_rate, 3), 66.999)
|
||||||
|
|
||||||
exchange_rate = get_exchange_rate("USD", "INR", "2016-01-20", "for_buying")
|
exchange_rate = get_exchange_rate("USD", "INR", "2016-01-20", "for_buying")
|
||||||
self.assertFalse(exchange_rate == 60)
|
self.assertNotEqual(exchange_rate, 60)
|
||||||
self.assertEqual(flt(exchange_rate, 3), 65.1)
|
self.assertEqual(flt(exchange_rate, 3), 65.1)
|
||||||
|
|
||||||
def test_exchange_rate_via_exchangerate_host(self, mock_get):
|
def test_exchange_rate_via_exchangerate_host(self, mock_get):
|
||||||
@@ -134,11 +134,11 @@ class TestCurrencyExchange(ERPNextTestSuite):
|
|||||||
# Exchange rate as on 15th Dec, 2015
|
# Exchange rate as on 15th Dec, 2015
|
||||||
self.clear_cache()
|
self.clear_cache()
|
||||||
exchange_rate = get_exchange_rate("USD", "INR", "2015-12-15", "for_selling")
|
exchange_rate = get_exchange_rate("USD", "INR", "2015-12-15", "for_selling")
|
||||||
self.assertFalse(exchange_rate == 60)
|
self.assertNotEqual(exchange_rate, 60)
|
||||||
self.assertEqual(flt(exchange_rate, 3), 66.999)
|
self.assertEqual(flt(exchange_rate, 3), 66.999)
|
||||||
|
|
||||||
exchange_rate = get_exchange_rate("USD", "INR", "2016-01-20", "for_buying")
|
exchange_rate = get_exchange_rate("USD", "INR", "2016-01-20", "for_buying")
|
||||||
self.assertFalse(exchange_rate == 60)
|
self.assertNotEqual(exchange_rate, 60)
|
||||||
self.assertEqual(flt(exchange_rate, 3), 65.1)
|
self.assertEqual(flt(exchange_rate, 3), 65.1)
|
||||||
|
|
||||||
settings = frappe.get_single("Currency Exchange Settings")
|
settings = frappe.get_single("Currency Exchange Settings")
|
||||||
@@ -175,5 +175,5 @@ class TestCurrencyExchange(ERPNextTestSuite):
|
|||||||
|
|
||||||
self.clear_cache()
|
self.clear_cache()
|
||||||
exchange_rate = get_exchange_rate("USD", "INR", "2016-01-30", "for_buying")
|
exchange_rate = get_exchange_rate("USD", "INR", "2016-01-30", "for_buying")
|
||||||
self.assertFalse(exchange_rate == 65)
|
self.assertNotEqual(exchange_rate, 65)
|
||||||
self.assertEqual(flt(exchange_rate, 3), 62.9)
|
self.assertEqual(flt(exchange_rate, 3), 62.9)
|
||||||
|
|||||||
@@ -28,10 +28,10 @@ class TestEmployee(ERPNextTestSuite):
|
|||||||
employee = make_employee("test_emp_user_creation@company.com", company="_Test Company")
|
employee = make_employee("test_emp_user_creation@company.com", company="_Test Company")
|
||||||
employee_doc = frappe.get_doc("Employee", employee)
|
employee_doc = frappe.get_doc("Employee", employee)
|
||||||
user = employee_doc.user_id
|
user = employee_doc.user_id
|
||||||
self.assertTrue("Employee" in frappe.get_roles(user))
|
self.assertIn("Employee", frappe.get_roles(user))
|
||||||
employee_doc.user_id = ""
|
employee_doc.user_id = ""
|
||||||
employee_doc.save()
|
employee_doc.save()
|
||||||
self.assertTrue("Employee" not in frappe.get_roles(user))
|
self.assertNotIn("Employee", frappe.get_roles(user))
|
||||||
|
|
||||||
def test_employee_user_permission(self):
|
def test_employee_user_permission(self):
|
||||||
employee1 = make_employee(
|
employee1 = make_employee(
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ class TestDeliveryNote(ERPNextTestSuite):
|
|||||||
|
|
||||||
returned_serial_nos1 = get_serial_nos_from_bundle(dn1.items[0].serial_and_batch_bundle)
|
returned_serial_nos1 = get_serial_nos_from_bundle(dn1.items[0].serial_and_batch_bundle)
|
||||||
for serial_no in returned_serial_nos1:
|
for serial_no in returned_serial_nos1:
|
||||||
self.assertTrue(serial_no in serial_nos)
|
self.assertIn(serial_no, serial_nos)
|
||||||
|
|
||||||
dn2 = make_sales_return(dn.name)
|
dn2 = make_sales_return(dn.name)
|
||||||
|
|
||||||
@@ -318,8 +318,8 @@ class TestDeliveryNote(ERPNextTestSuite):
|
|||||||
|
|
||||||
returned_serial_nos2 = get_serial_nos_from_bundle(dn2.items[0].serial_and_batch_bundle)
|
returned_serial_nos2 = get_serial_nos_from_bundle(dn2.items[0].serial_and_batch_bundle)
|
||||||
for serial_no in returned_serial_nos2:
|
for serial_no in returned_serial_nos2:
|
||||||
self.assertTrue(serial_no in serial_nos)
|
self.assertIn(serial_no, serial_nos)
|
||||||
self.assertFalse(serial_no in returned_serial_nos1)
|
self.assertNotIn(serial_no, returned_serial_nos1)
|
||||||
|
|
||||||
def test_sales_return_for_non_bundled_items_partial(self):
|
def test_sales_return_for_non_bundled_items_partial(self):
|
||||||
company = frappe.db.get_value("Warehouse", "Stores - TCP1", "company")
|
company = frappe.db.get_value("Warehouse", "Stores - TCP1", "company")
|
||||||
@@ -1557,7 +1557,7 @@ class TestDeliveryNote(ERPNextTestSuite):
|
|||||||
return_dn = make_return_doc(dn.doctype, dn.name)
|
return_dn = make_return_doc(dn.doctype, dn.name)
|
||||||
return_dn.save().submit()
|
return_dn.save().submit()
|
||||||
|
|
||||||
self.assertTrue(return_dn.docstatus == 1)
|
self.assertEqual(return_dn.docstatus, 1)
|
||||||
|
|
||||||
def test_reserve_qty_on_sales_return(self):
|
def test_reserve_qty_on_sales_return(self):
|
||||||
frappe.db.set_single_value("Selling Settings", "dont_reserve_sales_order_qty_on_sales_return", 0)
|
frappe.db.set_single_value("Selling Settings", "dont_reserve_sales_order_qty_on_sales_return", 0)
|
||||||
@@ -2772,7 +2772,7 @@ class TestDeliveryNote(ERPNextTestSuite):
|
|||||||
doc = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle)
|
doc = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle)
|
||||||
for entry in doc.entries:
|
for entry in doc.entries:
|
||||||
if entry.serial_no:
|
if entry.serial_no:
|
||||||
self.assertTrue(entry.serial_no in serial_batch_map[row.item_code].serial_nos)
|
self.assertIn(entry.serial_no, serial_batch_map[row.item_code].serial_nos)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
entry.incoming_rate,
|
entry.incoming_rate,
|
||||||
serial_batch_map[row.item_code].serial_no_valuation[entry.serial_no],
|
serial_batch_map[row.item_code].serial_no_valuation[entry.serial_no],
|
||||||
@@ -2782,7 +2782,7 @@ class TestDeliveryNote(ERPNextTestSuite):
|
|||||||
|
|
||||||
elif entry.batch_no:
|
elif entry.batch_no:
|
||||||
serial_batch_map[row.item_code].batches[entry.batch_no] += entry.qty
|
serial_batch_map[row.item_code].batches[entry.batch_no] += entry.qty
|
||||||
self.assertTrue(entry.batch_no in serial_batch_map[row.item_code].batches)
|
self.assertIn(entry.batch_no, serial_batch_map[row.item_code].batches)
|
||||||
self.assertEqual(entry.qty, 2.0)
|
self.assertEqual(entry.qty, 2.0)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
entry.incoming_rate,
|
entry.incoming_rate,
|
||||||
@@ -2798,7 +2798,7 @@ class TestDeliveryNote(ERPNextTestSuite):
|
|||||||
doc = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle)
|
doc = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle)
|
||||||
for entry in doc.entries:
|
for entry in doc.entries:
|
||||||
if entry.serial_no:
|
if entry.serial_no:
|
||||||
self.assertTrue(entry.serial_no in serial_batch_map[row.item_code].serial_nos)
|
self.assertIn(entry.serial_no, serial_batch_map[row.item_code].serial_nos)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
entry.incoming_rate,
|
entry.incoming_rate,
|
||||||
serial_batch_map[row.item_code].serial_no_valuation[entry.serial_no],
|
serial_batch_map[row.item_code].serial_no_valuation[entry.serial_no],
|
||||||
@@ -2810,7 +2810,7 @@ class TestDeliveryNote(ERPNextTestSuite):
|
|||||||
serial_batch_map[row.item_code].batches[entry.batch_no] += entry.qty
|
serial_batch_map[row.item_code].batches[entry.batch_no] += entry.qty
|
||||||
self.assertEqual(serial_batch_map[row.item_code].batches[entry.batch_no], 0.0)
|
self.assertEqual(serial_batch_map[row.item_code].batches[entry.batch_no], 0.0)
|
||||||
|
|
||||||
self.assertTrue(entry.batch_no in serial_batch_map[row.item_code].batches)
|
self.assertIn(entry.batch_no, serial_batch_map[row.item_code].batches)
|
||||||
|
|
||||||
self.assertEqual(entry.qty, 3.0)
|
self.assertEqual(entry.qty, 3.0)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
|||||||
@@ -391,8 +391,9 @@ class TestItem(ERPNextTestSuite):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertIn(
|
||||||
"belong to company" in str(ve.exception).lower(),
|
"belong to company",
|
||||||
|
str(ve.exception).lower(),
|
||||||
msg="Mismatching company entities in item defaults should not be allowed.",
|
msg="Mismatching company entities in item defaults should not be allowed.",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -676,7 +677,7 @@ class TestItem(ERPNextTestSuite):
|
|||||||
self.assertIsInstance(timestamp, int)
|
self.assertIsInstance(timestamp, int)
|
||||||
self.assertTrue(one_year_ago <= timestamp <= now)
|
self.assertTrue(one_year_ago <= timestamp <= now)
|
||||||
self.assertIsInstance(count, int)
|
self.assertIsInstance(count, int)
|
||||||
self.assertTrue(count >= 0)
|
self.assertGreaterEqual(count, 0)
|
||||||
|
|
||||||
def test_index_creation(self):
|
def test_index_creation(self):
|
||||||
"check if index is getting created in db"
|
"check if index is getting created in db"
|
||||||
@@ -849,7 +850,7 @@ class TestItem(ERPNextTestSuite):
|
|||||||
for _row in range(3):
|
for _row in range(3):
|
||||||
item.append("customer_items", {"ref_code": frappe.generate_hash("", 120)})
|
item.append("customer_items", {"ref_code": frappe.generate_hash("", 120)})
|
||||||
item.save()
|
item.save()
|
||||||
self.assertTrue(len(item.customer_code) > 140)
|
self.assertGreater(len(item.customer_code), 140)
|
||||||
|
|
||||||
def test_update_is_stock_item(self):
|
def test_update_is_stock_item(self):
|
||||||
# Step - 1: Create an Item with Maintain Stock enabled
|
# Step - 1: Create an Item with Maintain Stock enabled
|
||||||
@@ -890,7 +891,7 @@ class TestItem(ERPNextTestSuite):
|
|||||||
data = item_query("Item", "Test Item", "", 0, 20, filters={"item_name": "Test Item"}, as_dict=True)
|
data = item_query("Item", "Test Item", "", 0, 20, filters={"item_name": "Test Item"}, as_dict=True)
|
||||||
self.assertEqual(data[0].name, item.name)
|
self.assertEqual(data[0].name, item.name)
|
||||||
self.assertEqual(data[0].item_name, item.item_name)
|
self.assertEqual(data[0].item_name, item.item_name)
|
||||||
self.assertTrue("description" not in data[0])
|
self.assertNotIn("description", data[0])
|
||||||
|
|
||||||
make_property_setter(
|
make_property_setter(
|
||||||
"Item", None, "search_fields", "item_name, description", "Data", for_doctype="Doctype"
|
"Item", None, "search_fields", "item_name, description", "Data", for_doctype="Doctype"
|
||||||
@@ -899,7 +900,7 @@ class TestItem(ERPNextTestSuite):
|
|||||||
self.assertEqual(data[0].name, item.name)
|
self.assertEqual(data[0].name, item.name)
|
||||||
self.assertEqual(data[0].item_name, item.item_name)
|
self.assertEqual(data[0].item_name, item.item_name)
|
||||||
self.assertEqual(data[0].description, item.description)
|
self.assertEqual(data[0].description, item.description)
|
||||||
self.assertTrue("description" in data[0])
|
self.assertIn("description", data[0])
|
||||||
|
|
||||||
def test_group_warehouse_for_reorder_item(self):
|
def test_group_warehouse_for_reorder_item(self):
|
||||||
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
||||||
@@ -956,8 +957,9 @@ class TestItem(ERPNextTestSuite):
|
|||||||
}
|
}
|
||||||
).insert()
|
).insert()
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertIn(
|
||||||
"must be same as in Template" in str(ve.exception),
|
"must be same as in Template",
|
||||||
|
str(ve.exception),
|
||||||
msg="Different Variant UOM should not be allowed when `allow_different_uom` is disabled.",
|
msg="Different Variant UOM should not be allowed when `allow_different_uom` is disabled.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class TestItemPrice(ERPNextTestSuite):
|
|||||||
doc_fields = frappe.copy_doc(self.globalTestRecords["Item Price"][1]).__dict__.keys()
|
doc_fields = frappe.copy_doc(self.globalTestRecords["Item Price"][1]).__dict__.keys()
|
||||||
|
|
||||||
for test_field in test_fields_existance:
|
for test_field in test_fields_existance:
|
||||||
self.assertTrue(test_field in doc_fields)
|
self.assertIn(test_field, doc_fields)
|
||||||
|
|
||||||
def test_dates_validation_error(self):
|
def test_dates_validation_error(self):
|
||||||
doc = frappe.copy_doc(self.globalTestRecords["Item Price"][1])
|
doc = frappe.copy_doc(self.globalTestRecords["Item Price"][1])
|
||||||
|
|||||||
@@ -915,7 +915,7 @@ class TestMaterialRequest(ERPNextTestSuite):
|
|||||||
for company, _mr_list in comapnywise_mr_list.items():
|
for company, _mr_list in comapnywise_mr_list.items():
|
||||||
emails = get_email_list(company)
|
emails = get_email_list(company)
|
||||||
|
|
||||||
self.assertTrue(comapnywise_users[company] in emails)
|
self.assertIn(comapnywise_users[company], emails)
|
||||||
|
|
||||||
for perm in permissions:
|
for perm in permissions:
|
||||||
perm.delete()
|
perm.delete()
|
||||||
|
|||||||
@@ -876,7 +876,7 @@ class TestPickList(ERPNextTestSuite):
|
|||||||
)
|
)
|
||||||
|
|
||||||
for d in data:
|
for d in data:
|
||||||
self.assertTrue(d.batch_no in ["PICKLT-000001", "PICKLT-000002"])
|
self.assertIn(d.batch_no, ["PICKLT-000001", "PICKLT-000002"])
|
||||||
if d.batch_no == "PICKLT-000001":
|
if d.batch_no == "PICKLT-000001":
|
||||||
self.assertEqual(d.qty, 5.0 * -1)
|
self.assertEqual(d.qty, 5.0 * -1)
|
||||||
elif d.batch_no == "PICKLT-000002":
|
elif d.batch_no == "PICKLT-000002":
|
||||||
@@ -927,7 +927,7 @@ class TestPickList(ERPNextTestSuite):
|
|||||||
|
|
||||||
self.assertEqual(len(data), 10)
|
self.assertEqual(len(data), 10)
|
||||||
for d in data:
|
for d in data:
|
||||||
self.assertTrue(d.serial_no not in picked_serial_nos)
|
self.assertNotIn(d.serial_no, picked_serial_nos)
|
||||||
|
|
||||||
pl1.cancel()
|
pl1.cancel()
|
||||||
pl.cancel()
|
pl.cancel()
|
||||||
@@ -1311,7 +1311,7 @@ class TestPickList(ERPNextTestSuite):
|
|||||||
self.assertEqual(len(new_serial_nos), 110)
|
self.assertEqual(len(new_serial_nos), 110)
|
||||||
|
|
||||||
for sn in serial_nos:
|
for sn in serial_nos:
|
||||||
self.assertFalse(sn in new_serial_nos)
|
self.assertNotIn(sn, new_serial_nos)
|
||||||
|
|
||||||
pl1.submit()
|
pl1.submit()
|
||||||
|
|
||||||
@@ -1765,5 +1765,5 @@ class TestPickList(ERPNextTestSuite):
|
|||||||
else:
|
else:
|
||||||
self.assertEqual(doc.shipping_address_name, customer_shipping_address_1.name)
|
self.assertEqual(doc.shipping_address_name, customer_shipping_address_1.name)
|
||||||
item_codes = [item.item_code for item in doc.items]
|
item_codes = [item.item_code for item in doc.items]
|
||||||
self.assertTrue(item1 in item_codes)
|
self.assertIn(item1, item_codes)
|
||||||
self.assertTrue(item2 in item_codes)
|
self.assertIn(item2, item_codes)
|
||||||
|
|||||||
@@ -1145,7 +1145,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
new_cost = frappe.db.get_value("Serial and Batch Bundle", new_inward_sabb[0], "total_amount")
|
new_cost = frappe.db.get_value("Serial and Batch Bundle", new_inward_sabb[0], "total_amount")
|
||||||
self.assertEqual(new_cost, original_cost + 100)
|
self.assertEqual(new_cost, original_cost + 100)
|
||||||
|
|
||||||
self.assertTrue(new_inward_sabb[0] == inward_sabb[0])
|
self.assertEqual(new_inward_sabb[0], inward_sabb[0])
|
||||||
|
|
||||||
def test_stock_transfer_from_purchase_receipt_with_valuation(self):
|
def test_stock_transfer_from_purchase_receipt_with_valuation(self):
|
||||||
from erpnext.stock.doctype.delivery_note.delivery_note import make_inter_company_purchase_receipt
|
from erpnext.stock.doctype.delivery_note.delivery_note import make_inter_company_purchase_receipt
|
||||||
@@ -1797,7 +1797,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
return_pi = make_return_doc(pi.doctype, pi.name)
|
return_pi = make_return_doc(pi.doctype, pi.name)
|
||||||
return_pi.save().submit()
|
return_pi.save().submit()
|
||||||
|
|
||||||
self.assertTrue(return_pi.docstatus == 1)
|
self.assertEqual(return_pi.docstatus, 1)
|
||||||
|
|
||||||
def test_disable_last_purchase_rate(self):
|
def test_disable_last_purchase_rate(self):
|
||||||
from erpnext.stock.get_item_details import ItemDetailsCtx, get_item_details
|
from erpnext.stock.get_item_details import ItemDetailsCtx, get_item_details
|
||||||
@@ -2504,7 +2504,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
sbb_doc = frappe.get_doc("Serial and Batch Bundle", pr.items[0].serial_and_batch_bundle)
|
sbb_doc = frappe.get_doc("Serial and Batch Bundle", pr.items[0].serial_and_batch_bundle)
|
||||||
|
|
||||||
for row in sbb_doc.entries:
|
for row in sbb_doc.entries:
|
||||||
self.assertTrue(row.serial_no in serial_nos)
|
self.assertIn(row.serial_no, serial_nos)
|
||||||
|
|
||||||
serial_nos.remove("SNU-TSFISI-000015")
|
serial_nos.remove("SNU-TSFISI-000015")
|
||||||
|
|
||||||
@@ -2537,7 +2537,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
|
|
||||||
serial_no_status = frappe.db.get_value("Serial No", "SNU-TSFISI-000015", "status")
|
serial_no_status = frappe.db.get_value("Serial No", "SNU-TSFISI-000015", "status")
|
||||||
|
|
||||||
self.assertTrue(serial_no_status != "Active")
|
self.assertNotEqual(serial_no_status, "Active")
|
||||||
|
|
||||||
dn = create_delivery_note(
|
dn = create_delivery_note(
|
||||||
item_code=item_code,
|
item_code=item_code,
|
||||||
@@ -2550,11 +2550,11 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
self.assertEqual(dn.items[0].qty, 4)
|
self.assertEqual(dn.items[0].qty, 4)
|
||||||
doc = frappe.get_doc("Serial and Batch Bundle", dn.items[0].serial_and_batch_bundle)
|
doc = frappe.get_doc("Serial and Batch Bundle", dn.items[0].serial_and_batch_bundle)
|
||||||
for row in doc.entries:
|
for row in doc.entries:
|
||||||
self.assertTrue(row.serial_no in new_serial_nos)
|
self.assertIn(row.serial_no, new_serial_nos)
|
||||||
|
|
||||||
for sn in new_serial_nos:
|
for sn in new_serial_nos:
|
||||||
serial_no_status = frappe.db.get_value("Serial No", sn, "status")
|
serial_no_status = frappe.db.get_value("Serial No", sn, "status")
|
||||||
self.assertTrue(serial_no_status != "Active")
|
self.assertNotEqual(serial_no_status, "Active")
|
||||||
|
|
||||||
frappe.db.set_single_value(
|
frappe.db.set_single_value(
|
||||||
"Stock Settings", "do_not_update_serial_batch_on_creation_of_auto_bundle", 1
|
"Stock Settings", "do_not_update_serial_batch_on_creation_of_auto_bundle", 1
|
||||||
@@ -2965,7 +2965,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
serial_no_details = frappe.db.get_value(
|
serial_no_details = frappe.db.get_value(
|
||||||
"Serial No", sn, ["status", "warehouse"], as_dict=1
|
"Serial No", sn, ["status", "warehouse"], as_dict=1
|
||||||
)
|
)
|
||||||
self.assertTrue(serial_no_details.status == "Active")
|
self.assertEqual(serial_no_details.status, "Active")
|
||||||
self.assertEqual(serial_no_details.warehouse, "Work In Progress - TCP1")
|
self.assertEqual(serial_no_details.warehouse, "Work In Progress - TCP1")
|
||||||
|
|
||||||
inter_transfer_dn_return = make_return_doc("Delivery Note", inter_transfer_dn.name)
|
inter_transfer_dn_return = make_return_doc("Delivery Note", inter_transfer_dn.name)
|
||||||
@@ -3104,7 +3104,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
serial_no_details = frappe.db.get_value(
|
serial_no_details = frappe.db.get_value(
|
||||||
"Serial No", sn, ["status", "warehouse"], as_dict=1
|
"Serial No", sn, ["status", "warehouse"], as_dict=1
|
||||||
)
|
)
|
||||||
self.assertTrue(serial_no_details.status == "Active")
|
self.assertEqual(serial_no_details.status, "Active")
|
||||||
self.assertEqual(serial_no_details.warehouse, "Work In Progress - TCP1")
|
self.assertEqual(serial_no_details.warehouse, "Work In Progress - TCP1")
|
||||||
|
|
||||||
inter_transfer_dn_return = make_return_doc("Delivery Note", inter_transfer_dn.name)
|
inter_transfer_dn_return = make_return_doc("Delivery Note", inter_transfer_dn.name)
|
||||||
@@ -4236,7 +4236,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
serial_no = get_serial_nos_from_bundle(pr.items[0].serial_and_batch_bundle)[0]
|
serial_no = get_serial_nos_from_bundle(pr.items[0].serial_and_batch_bundle)[0]
|
||||||
|
|
||||||
status = frappe.db.get_value("Serial No", serial_no, "status")
|
status = frappe.db.get_value("Serial No", serial_no, "status")
|
||||||
self.assertTrue(status == "Active")
|
self.assertEqual(status, "Active")
|
||||||
|
|
||||||
make_stock_entry(
|
make_stock_entry(
|
||||||
item_code=item_code,
|
item_code=item_code,
|
||||||
@@ -4247,7 +4247,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
)
|
)
|
||||||
|
|
||||||
status = frappe.db.get_value("Serial No", serial_no, "status")
|
status = frappe.db.get_value("Serial No", serial_no, "status")
|
||||||
self.assertFalse(status == "Active")
|
self.assertNotEqual(status, "Active")
|
||||||
|
|
||||||
pr = make_purchase_receipt(
|
pr = make_purchase_receipt(
|
||||||
item_code=item_code, qty=1, rate=100, use_serial_batch_fields=1, do_not_submit=1
|
item_code=item_code, qty=1, rate=100, use_serial_batch_fields=1, do_not_submit=1
|
||||||
@@ -4759,8 +4759,8 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
|
|
||||||
gl_entries = get_gl_entries(pr.doctype, pr.name)
|
gl_entries = get_gl_entries(pr.doctype, pr.name)
|
||||||
accounts = [d.account for d in gl_entries]
|
accounts = [d.account for d in gl_entries]
|
||||||
self.assertTrue(expense_account in accounts)
|
self.assertIn(expense_account, accounts)
|
||||||
self.assertTrue(expense_contra_account in accounts)
|
self.assertIn(expense_contra_account, accounts)
|
||||||
|
|
||||||
for row in gl_entries:
|
for row in gl_entries:
|
||||||
if row.account == expense_account:
|
if row.account == expense_account:
|
||||||
@@ -4798,7 +4798,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
|
|
||||||
gl_entries = get_gl_entries(se.doctype, se.name)
|
gl_entries = get_gl_entries(se.doctype, se.name)
|
||||||
for row in gl_entries:
|
for row in gl_entries:
|
||||||
self.assertTrue(row.account in ["Stock In Hand - TCP1", "Stock Adjustment - TCP1"])
|
self.assertIn(row.account, ["Stock In Hand - TCP1", "Stock Adjustment - TCP1"])
|
||||||
|
|
||||||
se.items[0].db_set("expense_account", account)
|
se.items[0].db_set("expense_account", account)
|
||||||
se.reload()
|
se.reload()
|
||||||
@@ -4820,7 +4820,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
|
|
||||||
gl_entries = get_gl_entries(se.doctype, se.name)
|
gl_entries = get_gl_entries(se.doctype, se.name)
|
||||||
for row in gl_entries:
|
for row in gl_entries:
|
||||||
self.assertTrue(row.account in ["Stock In Hand - TCP1", account])
|
self.assertIn(row.account, ["Stock In Hand - TCP1", account])
|
||||||
|
|
||||||
def test_lcv_for_repack_entry(self):
|
def test_lcv_for_repack_entry(self):
|
||||||
from erpnext.stock.doctype.landed_cost_voucher.test_landed_cost_voucher import (
|
from erpnext.stock.doctype.landed_cost_voucher.test_landed_cost_voucher import (
|
||||||
@@ -5056,7 +5056,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
doc.db_set("use_batchwise_valuation", 0)
|
doc.db_set("use_batchwise_valuation", 0)
|
||||||
doc.reload()
|
doc.reload()
|
||||||
|
|
||||||
self.assertTrue(doc.use_batchwise_valuation == 0)
|
self.assertEqual(doc.use_batchwise_valuation, 0)
|
||||||
|
|
||||||
doc = frappe.new_doc("Batch")
|
doc = frappe.new_doc("Batch")
|
||||||
doc.update(
|
doc.update(
|
||||||
@@ -5066,7 +5066,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
}
|
}
|
||||||
).insert()
|
).insert()
|
||||||
|
|
||||||
self.assertTrue(doc.use_batchwise_valuation == 1)
|
self.assertEqual(doc.use_batchwise_valuation, 1)
|
||||||
|
|
||||||
warehouse = "_Test Warehouse - _TC"
|
warehouse = "_Test Warehouse - _TC"
|
||||||
make_stock_entry(
|
make_stock_entry(
|
||||||
@@ -5458,7 +5458,7 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
self.assertEqual(pr.conversion_rate, 80)
|
self.assertEqual(pr.conversion_rate, 80)
|
||||||
|
|
||||||
gl_entries = get_gl_entries(pr.doctype, pr.name)
|
gl_entries = get_gl_entries(pr.doctype, pr.name)
|
||||||
self.assertTrue(len(gl_entries) == 2)
|
self.assertEqual(len(gl_entries), 2)
|
||||||
for row in gl_entries:
|
for row in gl_entries:
|
||||||
amount = row.credit or row.debit
|
amount = row.credit or row.debit
|
||||||
self.assertEqual(amount, 8000.0)
|
self.assertEqual(amount, 8000.0)
|
||||||
@@ -5471,13 +5471,13 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
pi.submit()
|
pi.submit()
|
||||||
|
|
||||||
gl_entries = get_gl_entries(pi.doctype, pi.name)
|
gl_entries = get_gl_entries(pi.doctype, pi.name)
|
||||||
self.assertTrue(len(gl_entries) == 2)
|
self.assertEqual(len(gl_entries), 2)
|
||||||
|
|
||||||
accounts = ["USD Party Account Creditors - TCP1", "Stock Received But Not Billed - TCP1"]
|
accounts = ["USD Party Account Creditors - TCP1", "Stock Received But Not Billed - TCP1"]
|
||||||
for row in gl_entries:
|
for row in gl_entries:
|
||||||
amount = row.credit or row.debit
|
amount = row.credit or row.debit
|
||||||
self.assertEqual(amount, 9000.0)
|
self.assertEqual(amount, 9000.0)
|
||||||
self.assertTrue(row.account in accounts)
|
self.assertIn(row.account, accounts)
|
||||||
|
|
||||||
frappe.db.set_single_value(
|
frappe.db.set_single_value(
|
||||||
"Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", original_value
|
"Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", original_value
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import frappe
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
from frappe.utils import cint, cstr, flt, get_link_to_form, get_number_format_info
|
from frappe.utils import cint, flt, get_link_to_form, get_number_format_info
|
||||||
|
|
||||||
from erpnext.stock.doctype.quality_inspection_template.quality_inspection_template import (
|
from erpnext.stock.doctype.quality_inspection_template.quality_inspection_template import (
|
||||||
get_template_details,
|
get_template_details,
|
||||||
|
|||||||
@@ -100,14 +100,14 @@ class TestRepostItemValuation(ERPNextTestSuite, StockTestMixin):
|
|||||||
repost_doc.db_update_all()
|
repost_doc.db_update_all()
|
||||||
|
|
||||||
logs = frappe.get_all("Repost Item Valuation", filters={"status": "Skipped"})
|
logs = frappe.get_all("Repost Item Valuation", filters={"status": "Skipped"})
|
||||||
self.assertTrue(len(logs) > 10)
|
self.assertGreater(len(logs), 10)
|
||||||
|
|
||||||
from erpnext.stock.doctype.repost_item_valuation.repost_item_valuation import RepostItemValuation
|
from erpnext.stock.doctype.repost_item_valuation.repost_item_valuation import RepostItemValuation
|
||||||
|
|
||||||
RepostItemValuation.clear_old_logs(days=1)
|
RepostItemValuation.clear_old_logs(days=1)
|
||||||
|
|
||||||
logs = frappe.get_all("Repost Item Valuation", filters={"status": "Skipped"})
|
logs = frappe.get_all("Repost Item Valuation", filters={"status": "Skipped"})
|
||||||
self.assertTrue(len(logs) == 0)
|
self.assertEqual(len(logs), 0)
|
||||||
|
|
||||||
def test_create_item_wise_repost_item_valuation_entries(self):
|
def test_create_item_wise_repost_item_valuation_entries(self):
|
||||||
pr = make_purchase_receipt(
|
pr = make_purchase_receipt(
|
||||||
@@ -379,13 +379,13 @@ class TestRepostItemValuation(ERPNextTestSuite, StockTestMixin):
|
|||||||
get_multiple_items=True,
|
get_multiple_items=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(pr.docstatus == 1)
|
self.assertEqual(pr.docstatus, 1)
|
||||||
self.assertFalse(frappe.db.exists("Repost Item Valuation", {"voucher_no": pr.name}))
|
self.assertFalse(frappe.db.exists("Repost Item Valuation", {"voucher_no": pr.name}))
|
||||||
|
|
||||||
pr.load_from_db()
|
pr.load_from_db()
|
||||||
|
|
||||||
pr.cancel()
|
pr.cancel()
|
||||||
self.assertTrue(pr.docstatus == 2)
|
self.assertEqual(pr.docstatus, 2)
|
||||||
self.assertTrue(frappe.db.exists("Repost Item Valuation", {"voucher_no": pr.name}))
|
self.assertTrue(frappe.db.exists("Repost Item Valuation", {"voucher_no": pr.name}))
|
||||||
|
|
||||||
def test_repost_item_valuation_for_closing_stock_balance(self):
|
def test_repost_item_valuation_for_closing_stock_balance(self):
|
||||||
|
|||||||
@@ -1070,11 +1070,11 @@ class TestSerialandBatchBundle(ERPNextTestSuite):
|
|||||||
|
|
||||||
se.remove(se.items[1])
|
se.remove(se.items[1])
|
||||||
se.save()
|
se.save()
|
||||||
self.assertTrue(len(se.items) == 1)
|
self.assertEqual(len(se.items), 1)
|
||||||
se.submit()
|
se.submit()
|
||||||
|
|
||||||
bundle_doc.reload()
|
bundle_doc.reload()
|
||||||
self.assertTrue(bundle_doc.docstatus == 0)
|
self.assertEqual(bundle_doc.docstatus, 0)
|
||||||
self.assertRaises(frappe.ValidationError, bundle_doc.submit)
|
self.assertRaises(frappe.ValidationError, bundle_doc.submit)
|
||||||
|
|
||||||
def test_reference_voucher_on_cancel(self):
|
def test_reference_voucher_on_cancel(self):
|
||||||
|
|||||||
@@ -137,8 +137,7 @@ class StockClosingEntry(Document):
|
|||||||
attached_file = frappe.get_doc("File", attachment.name)
|
attached_file = frappe.get_doc("File", attachment.name)
|
||||||
|
|
||||||
data = gzip.decompress(attached_file.get_content())
|
data = gzip.decompress(attached_file.get_content())
|
||||||
if data := json.loads(data.decode("utf-8")):
|
data = json.loads(data.decode("utf-8"))
|
||||||
data = data
|
|
||||||
|
|
||||||
return parse_json(data)
|
return parse_json(data)
|
||||||
|
|
||||||
|
|||||||
@@ -6,20 +6,15 @@ import json
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _, bold
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
from frappe.query_builder import DocType
|
from frappe.query_builder.functions import Sum
|
||||||
from frappe.query_builder.functions import Max, Sum
|
|
||||||
from frappe.utils import (
|
from frappe.utils import (
|
||||||
cint,
|
cint,
|
||||||
comma_or,
|
|
||||||
cstr,
|
cstr,
|
||||||
flt,
|
flt,
|
||||||
format_time,
|
|
||||||
formatdate,
|
|
||||||
get_link_to_form,
|
get_link_to_form,
|
||||||
getdate,
|
|
||||||
nowdate,
|
nowdate,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -29,15 +24,11 @@ from erpnext.accounts.utils import get_account_currency
|
|||||||
from erpnext.buying.utils import check_on_hold_or_closed_status
|
from erpnext.buying.utils import check_on_hold_or_closed_status
|
||||||
from erpnext.controllers.taxes_and_totals import init_landed_taxes_and_totals
|
from erpnext.controllers.taxes_and_totals import init_landed_taxes_and_totals
|
||||||
from erpnext.manufacturing.doctype.bom.bom import (
|
from erpnext.manufacturing.doctype.bom.bom import (
|
||||||
add_additional_cost,
|
|
||||||
get_op_cost_from_sub_assemblies,
|
get_op_cost_from_sub_assemblies,
|
||||||
get_secondary_items_from_sub_assemblies,
|
|
||||||
validate_bom_no,
|
validate_bom_no,
|
||||||
)
|
)
|
||||||
from erpnext.setup.doctype.brand.brand import get_brand_defaults
|
from erpnext.setup.doctype.brand.brand import get_brand_defaults
|
||||||
from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults
|
from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults
|
||||||
from erpnext.stock.doctype.item.item import get_item_defaults
|
|
||||||
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
|
|
||||||
from erpnext.stock.get_item_details import (
|
from erpnext.stock.get_item_details import (
|
||||||
ItemDetailsCtx,
|
ItemDetailsCtx,
|
||||||
get_barcode_data,
|
get_barcode_data,
|
||||||
@@ -45,12 +36,6 @@ from erpnext.stock.get_item_details import (
|
|||||||
get_conversion_factor,
|
get_conversion_factor,
|
||||||
get_default_cost_center,
|
get_default_cost_center,
|
||||||
)
|
)
|
||||||
from erpnext.stock.serial_batch_bundle import (
|
|
||||||
SerialBatchCreation,
|
|
||||||
get_batch_nos,
|
|
||||||
get_empty_batches_based_work_order,
|
|
||||||
get_serial_or_batch_items,
|
|
||||||
)
|
|
||||||
from erpnext.stock.stock_ledger import get_previous_sle, get_valuation_rate
|
from erpnext.stock.stock_ledger import get_previous_sle, get_valuation_rate
|
||||||
from erpnext.stock.utils import get_incoming_rate
|
from erpnext.stock.utils import get_incoming_rate
|
||||||
|
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ class TestStockEntry(ERPNextTestSuite):
|
|||||||
for d in mr.items:
|
for d in mr.items:
|
||||||
items.append(d.item_code)
|
items.append(d.item_code)
|
||||||
|
|
||||||
self.assertTrue(item_code in items)
|
self.assertIn(item_code, items)
|
||||||
|
|
||||||
def test_add_to_transit_entry(self):
|
def test_add_to_transit_entry(self):
|
||||||
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
||||||
@@ -953,7 +953,7 @@ class TestStockEntry(ERPNextTestSuite):
|
|||||||
|
|
||||||
stock_entry = frappe.get_doc(make_stock_entry(work_order.name, "Manufacture", 1))
|
stock_entry = frappe.get_doc(make_stock_entry(work_order.name, "Manufacture", 1))
|
||||||
stock_entry.insert()
|
stock_entry.insert()
|
||||||
self.assertTrue("_Test Variant Item-S" in [d.item_code for d in stock_entry.items])
|
self.assertIn("_Test Variant Item-S", [d.item_code for d in stock_entry.items])
|
||||||
|
|
||||||
def test_nagative_stock_for_batch(self):
|
def test_nagative_stock_for_batch(self):
|
||||||
item = make_item(
|
item = make_item(
|
||||||
|
|||||||
@@ -5,20 +5,15 @@ import frappe
|
|||||||
from frappe import _, bold
|
from frappe import _, bold
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import (
|
from frappe.utils import (
|
||||||
cint,
|
|
||||||
cstr,
|
|
||||||
flt,
|
flt,
|
||||||
format_time,
|
|
||||||
formatdate,
|
|
||||||
get_link_to_form,
|
get_link_to_form,
|
||||||
getdate,
|
getdate,
|
||||||
nowdate,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import (
|
from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import (
|
||||||
OpeningEntryAccountError,
|
OpeningEntryAccountError,
|
||||||
)
|
)
|
||||||
from erpnext.stock.stock_ledger import NegativeStockError, get_previous_sle, is_negative_stock_allowed
|
from erpnext.stock.stock_ledger import get_previous_sle
|
||||||
|
|
||||||
|
|
||||||
class StockEntryDetail(Document):
|
class StockEntryDetail(Document):
|
||||||
|
|||||||
@@ -1040,7 +1040,7 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin):
|
|||||||
)
|
)
|
||||||
|
|
||||||
batch1 = get_batch_from_bundle(se1.items[0].serial_and_batch_bundle)
|
batch1 = get_batch_from_bundle(se1.items[0].serial_and_batch_bundle)
|
||||||
self.assertFalse(batch1 == batch)
|
self.assertNotEqual(batch1, batch)
|
||||||
|
|
||||||
sr.reload()
|
sr.reload()
|
||||||
self.assertTrue(sr.items[0].serial_and_batch_bundle)
|
self.assertTrue(sr.items[0].serial_and_batch_bundle)
|
||||||
@@ -1418,7 +1418,7 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin):
|
|||||||
sr.save()
|
sr.save()
|
||||||
self.assertEqual(sr.items[0].current_valuation_rate, 100)
|
self.assertEqual(sr.items[0].current_valuation_rate, 100)
|
||||||
self.assertEqual(sr.difference_amount, 100 * -1)
|
self.assertEqual(sr.difference_amount, 100 * -1)
|
||||||
self.assertTrue(sr.items[0].qty == 0)
|
self.assertEqual(sr.items[0].qty, 0)
|
||||||
|
|
||||||
def test_stock_reco_recalculate_qty_for_backdated_entry(self):
|
def test_stock_reco_recalculate_qty_for_backdated_entry(self):
|
||||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
|
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
|
||||||
@@ -1456,7 +1456,7 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin):
|
|||||||
pluck="name",
|
pluck="name",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(len(stock_ledgers) == 1)
|
self.assertEqual(len(stock_ledgers), 1)
|
||||||
|
|
||||||
se = make_stock_entry(
|
se = make_stock_entry(
|
||||||
item_code=item_code,
|
item_code=item_code,
|
||||||
@@ -1515,7 +1515,7 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin):
|
|||||||
"status",
|
"status",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(status == "Active")
|
self.assertEqual(status, "Active")
|
||||||
|
|
||||||
sr = create_stock_reconciliation(
|
sr = create_stock_reconciliation(
|
||||||
item_code=serial_item,
|
item_code=serial_item,
|
||||||
@@ -1534,7 +1534,7 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin):
|
|||||||
"status",
|
"status",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(status == "Active")
|
self.assertEqual(status, "Active")
|
||||||
|
|
||||||
se = make_stock_entry(
|
se = make_stock_entry(
|
||||||
item_code=serial_item,
|
item_code=serial_item,
|
||||||
@@ -1550,7 +1550,7 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin):
|
|||||||
"status",
|
"status",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertFalse(status == "Active")
|
self.assertNotEqual(status, "Active")
|
||||||
|
|
||||||
sr.cancel()
|
sr.cancel()
|
||||||
|
|
||||||
@@ -1560,7 +1560,7 @@ class TestStockReconciliation(ERPNextTestSuite, StockTestMixin):
|
|||||||
"status",
|
"status",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertFalse(status == "Active")
|
self.assertNotEqual(status, "Active")
|
||||||
|
|
||||||
def test_change_valuation_of_batch_using_backdated_stock_reco(self):
|
def test_change_valuation_of_batch_using_backdated_stock_reco(self):
|
||||||
from erpnext.stock.doctype.batch.batch import get_batch_qty
|
from erpnext.stock.doctype.batch.batch import get_batch_qty
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ class TestStockRepostingSettings(ERPNextTestSuite):
|
|||||||
frappe.db.set_single_value("Stock Reposting Settings", "notify_reposting_error_to_role", "")
|
frappe.db.set_single_value("Stock Reposting Settings", "notify_reposting_error_to_role", "")
|
||||||
|
|
||||||
users = get_recipients()
|
users = get_recipients()
|
||||||
self.assertFalse(user in users)
|
self.assertNotIn(user, users)
|
||||||
|
|
||||||
frappe.db.set_single_value("Stock Reposting Settings", "notify_reposting_error_to_role", role)
|
frappe.db.set_single_value("Stock Reposting Settings", "notify_reposting_error_to_role", role)
|
||||||
|
|
||||||
users = get_recipients()
|
users = get_recipients()
|
||||||
self.assertTrue(user in users)
|
self.assertIn(user, users)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import frappe
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
|
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import cint
|
|
||||||
from frappe.utils.html_utils import clean_html
|
from frappe.utils.html_utils import clean_html
|
||||||
|
|
||||||
from erpnext.stock.utils import check_pending_reposting
|
from erpnext.stock.utils import check_pending_reposting
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ from frappe.utils import (
|
|||||||
format_date,
|
format_date,
|
||||||
get_datetime,
|
get_datetime,
|
||||||
get_link_to_form,
|
get_link_to_form,
|
||||||
getdate,
|
|
||||||
now,
|
now,
|
||||||
nowdate,
|
nowdate,
|
||||||
nowtime,
|
nowtime,
|
||||||
@@ -434,8 +433,7 @@ def get_reposting_data(file_path) -> dict:
|
|||||||
except Exception:
|
except Exception:
|
||||||
return frappe._dict()
|
return frappe._dict()
|
||||||
|
|
||||||
if data := json.loads(data.decode("utf-8")):
|
data = json.loads(data.decode("utf-8"))
|
||||||
data = data
|
|
||||||
|
|
||||||
return parse_json(data)
|
return parse_json(data)
|
||||||
|
|
||||||
@@ -1457,7 +1455,6 @@ class update_entries_after:
|
|||||||
item.amount = flt(item.qty) * flt(item.valuation_rate)
|
item.amount = flt(item.qty) * flt(item.valuation_rate)
|
||||||
item.quantity_difference = item.qty - item.current_qty
|
item.quantity_difference = item.qty - item.current_qty
|
||||||
item.amount_difference = item.amount - item.current_amount
|
item.amount_difference = item.amount - item.current_amount
|
||||||
else:
|
|
||||||
sr.difference_amount = sum([item.amount_difference for item in sr.items])
|
sr.difference_amount = sum([item.amount_difference for item in sr.items])
|
||||||
sr.db_update()
|
sr.db_update()
|
||||||
|
|
||||||
|
|||||||
@@ -198,7 +198,6 @@ class SubcontractingOrder(SubcontractingController):
|
|||||||
item.amount = item.qty * item.rate
|
item.amount = item.qty * item.rate
|
||||||
total_qty += flt(item.qty)
|
total_qty += flt(item.qty)
|
||||||
total += flt(item.amount)
|
total += flt(item.amount)
|
||||||
else:
|
|
||||||
self.total_qty = total_qty
|
self.total_qty = total_qty
|
||||||
self.total = total
|
self.total = total
|
||||||
|
|
||||||
|
|||||||
@@ -640,7 +640,7 @@ class TestSubcontractingOrder(ERPNextTestSuite):
|
|||||||
qty=10,
|
qty=10,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(mr.docstatus == 1)
|
self.assertEqual(mr.docstatus, 1)
|
||||||
|
|
||||||
new_requested_qty = frappe.db.get_value(
|
new_requested_qty = frappe.db.get_value(
|
||||||
"Bin",
|
"Bin",
|
||||||
@@ -726,7 +726,7 @@ class TestSubcontractingOrder(ERPNextTestSuite):
|
|||||||
sco.submit()
|
sco.submit()
|
||||||
|
|
||||||
sre_list = get_sre_details_for_voucher("Subcontracting Order", sco.name)
|
sre_list = get_sre_details_for_voucher("Subcontracting Order", sco.name)
|
||||||
self.assertTrue(len(sre_list) > 0)
|
self.assertGreater(len(sre_list), 0)
|
||||||
|
|
||||||
se_dict = make_rm_stock_entry(sco.name)
|
se_dict = make_rm_stock_entry(sco.name)
|
||||||
se = frappe.get_doc(se_dict)
|
se = frappe.get_doc(se_dict)
|
||||||
@@ -843,7 +843,6 @@ def create_subcontracting_order(**args):
|
|||||||
warehouses = []
|
warehouses = []
|
||||||
for item in po.items:
|
for item in po.items:
|
||||||
warehouses.append(item.warehouse)
|
warehouses.append(item.warehouse)
|
||||||
else:
|
|
||||||
for idx, val in enumerate(sco.items):
|
for idx, val in enumerate(sco.items):
|
||||||
val.warehouse = warehouses[idx]
|
val.warehouse = warehouses[idx]
|
||||||
|
|
||||||
|
|||||||
@@ -490,7 +490,6 @@ class SubcontractingReceipt(SubcontractingController):
|
|||||||
supplied_items_details[item.name][
|
supplied_items_details[item.name][
|
||||||
supplied_item.rm_item_code
|
supplied_item.rm_item_code
|
||||||
] += supplied_item.available_qty
|
] += supplied_item.available_qty
|
||||||
else:
|
|
||||||
for item in self.get("supplied_items"):
|
for item in self.get("supplied_items"):
|
||||||
item.available_qty_for_consumption = supplied_items_details.get(item.reference_name, {}).get(
|
item.available_qty_for_consumption = supplied_items_details.get(item.reference_name, {}).get(
|
||||||
item.rm_item_code, 0
|
item.rm_item_code, 0
|
||||||
@@ -561,7 +560,6 @@ class SubcontractingReceipt(SubcontractingController):
|
|||||||
|
|
||||||
total_qty += flt(item.qty) + flt(item.rejected_qty)
|
total_qty += flt(item.qty) + flt(item.rejected_qty)
|
||||||
total_amount += item.amount
|
total_amount += item.amount
|
||||||
else:
|
|
||||||
self.total_qty = total_qty
|
self.total_qty = total_qty
|
||||||
self.total = total_amount
|
self.total = total_amount
|
||||||
|
|
||||||
|
|||||||
@@ -1311,7 +1311,7 @@ class TestSubcontractingReceipt(ERPNextTestSuite):
|
|||||||
|
|
||||||
# Step - 8: Cancel Subcontracting Receipt
|
# Step - 8: Cancel Subcontracting Receipt
|
||||||
scr.cancel()
|
scr.cancel()
|
||||||
self.assertTrue(scr.docstatus == 2)
|
self.assertEqual(scr.docstatus, 2)
|
||||||
|
|
||||||
def test_subcontract_return_from_rejected_warehouse(self):
|
def test_subcontract_return_from_rejected_warehouse(self):
|
||||||
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ class TestIssue(TestSetUp):
|
|||||||
|
|
||||||
issue = make_issue(frappe.flags.current_time, index=1)
|
issue = make_issue(frappe.flags.current_time, index=1)
|
||||||
create_communication(issue.name, "test@example.com", "Received", frappe.flags.current_time)
|
create_communication(issue.name, "test@example.com", "Received", frappe.flags.current_time)
|
||||||
self.assertTrue(issue.status == "Open")
|
self.assertEqual(issue.status, "Open")
|
||||||
|
|
||||||
# send a reply within response SLA
|
# send a reply within response SLA
|
||||||
frappe.flags.current_time = get_datetime("2021-11-02 11:00")
|
frappe.flags.current_time = get_datetime("2021-11-02 11:00")
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ class TestWebsite(ERPNextTestSuite):
|
|||||||
|
|
||||||
with self.set_user("supplier1@gmail.com"):
|
with self.set_user("supplier1@gmail.com"):
|
||||||
# checking if data only consist of order assignment of Supplier1
|
# checking if data only consist of order assignment of Supplier1
|
||||||
self.assertTrue("Supplier1" in [data.supplier for data in get_data()])
|
self.assertIn("Supplier1", [data.supplier for data in get_data()])
|
||||||
self.assertFalse([data.supplier for data in get_data() if data.supplier != "Supplier1"])
|
self.assertFalse([data.supplier for data in get_data() if data.supplier != "Supplier1"])
|
||||||
|
|
||||||
with self.set_user("supplier2@gmail.com"):
|
with self.set_user("supplier2@gmail.com"):
|
||||||
# checking if data only consist of order assignment of Supplier2
|
# checking if data only consist of order assignment of Supplier2
|
||||||
self.assertTrue("Supplier2" in [data.supplier for data in get_data()])
|
self.assertIn("Supplier2", [data.supplier for data in get_data()])
|
||||||
self.assertFalse([data.supplier for data in get_data() if data.supplier != "Supplier2"])
|
self.assertFalse([data.supplier for data in get_data() if data.supplier != "Supplier2"])
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user