Merge branch 'develop' into item-link-formatter
This commit is contained in:
commit
9cd79b6859
@ -195,88 +195,91 @@ def create_sales_invoice_record(qty=1):
|
|||||||
|
|
||||||
def create_records():
|
def create_records():
|
||||||
# create a new loyalty Account
|
# create a new loyalty Account
|
||||||
if frappe.db.exists("Account", "Loyalty - _TC"):
|
if not frappe.db.exists("Account", "Loyalty - _TC"):
|
||||||
return
|
frappe.get_doc({
|
||||||
|
"doctype": "Account",
|
||||||
frappe.get_doc({
|
"account_name": "Loyalty",
|
||||||
"doctype": "Account",
|
"parent_account": "Direct Expenses - _TC",
|
||||||
"account_name": "Loyalty",
|
"company": "_Test Company",
|
||||||
"parent_account": "Direct Expenses - _TC",
|
"is_group": 0,
|
||||||
"company": "_Test Company",
|
"account_type": "Expense Account",
|
||||||
"is_group": 0,
|
}).insert()
|
||||||
"account_type": "Expense Account",
|
|
||||||
}).insert()
|
|
||||||
|
|
||||||
# create a new loyalty program Single tier
|
# create a new loyalty program Single tier
|
||||||
frappe.get_doc({
|
if not frappe.db.exists("Loyalty Program","Test Single Loyalty"):
|
||||||
"doctype": "Loyalty Program",
|
frappe.get_doc({
|
||||||
"loyalty_program_name": "Test Single Loyalty",
|
"doctype": "Loyalty Program",
|
||||||
"auto_opt_in": 1,
|
"loyalty_program_name": "Test Single Loyalty",
|
||||||
"from_date": today(),
|
"auto_opt_in": 1,
|
||||||
"loyalty_program_type": "Single Tier Program",
|
"from_date": today(),
|
||||||
"conversion_factor": 1,
|
"loyalty_program_type": "Single Tier Program",
|
||||||
"expiry_duration": 10,
|
"conversion_factor": 1,
|
||||||
"company": "_Test Company",
|
"expiry_duration": 10,
|
||||||
"cost_center": "Main - _TC",
|
"company": "_Test Company",
|
||||||
"expense_account": "Loyalty - _TC",
|
"cost_center": "Main - _TC",
|
||||||
"collection_rules": [{
|
"expense_account": "Loyalty - _TC",
|
||||||
'tier_name': 'Silver',
|
"collection_rules": [{
|
||||||
'collection_factor': 1000,
|
|
||||||
'min_spent': 1000
|
|
||||||
}]
|
|
||||||
}).insert()
|
|
||||||
|
|
||||||
# create a new customer
|
|
||||||
frappe.get_doc({
|
|
||||||
"customer_group": "_Test Customer Group",
|
|
||||||
"customer_name": "Test Loyalty Customer",
|
|
||||||
"customer_type": "Individual",
|
|
||||||
"doctype": "Customer",
|
|
||||||
"territory": "_Test Territory"
|
|
||||||
}).insert()
|
|
||||||
|
|
||||||
# create a new loyalty program Multiple tier
|
|
||||||
frappe.get_doc({
|
|
||||||
"doctype": "Loyalty Program",
|
|
||||||
"loyalty_program_name": "Test Multiple Loyalty",
|
|
||||||
"auto_opt_in": 1,
|
|
||||||
"from_date": today(),
|
|
||||||
"loyalty_program_type": "Multiple Tier Program",
|
|
||||||
"conversion_factor": 1,
|
|
||||||
"expiry_duration": 10,
|
|
||||||
"company": "_Test Company",
|
|
||||||
"cost_center": "Main - _TC",
|
|
||||||
"expense_account": "Loyalty - _TC",
|
|
||||||
"collection_rules": [
|
|
||||||
{
|
|
||||||
'tier_name': 'Silver',
|
'tier_name': 'Silver',
|
||||||
'collection_factor': 1000,
|
'collection_factor': 1000,
|
||||||
'min_spent': 10000
|
'min_spent': 1000
|
||||||
},
|
}]
|
||||||
{
|
}).insert()
|
||||||
'tier_name': 'Gold',
|
|
||||||
'collection_factor': 1000,
|
# create a new customer
|
||||||
'min_spent': 19000
|
if not frappe.db.exists("Customer","Test Loyalty Customer"):
|
||||||
}
|
frappe.get_doc({
|
||||||
]
|
"customer_group": "_Test Customer Group",
|
||||||
}).insert()
|
"customer_name": "Test Loyalty Customer",
|
||||||
|
"customer_type": "Individual",
|
||||||
|
"doctype": "Customer",
|
||||||
|
"territory": "_Test Territory"
|
||||||
|
}).insert()
|
||||||
|
|
||||||
|
# create a new loyalty program Multiple tier
|
||||||
|
if not frappe.db.exists("Loyalty Program","Test Multiple Loyalty"):
|
||||||
|
frappe.get_doc({
|
||||||
|
"doctype": "Loyalty Program",
|
||||||
|
"loyalty_program_name": "Test Multiple Loyalty",
|
||||||
|
"auto_opt_in": 1,
|
||||||
|
"from_date": today(),
|
||||||
|
"loyalty_program_type": "Multiple Tier Program",
|
||||||
|
"conversion_factor": 1,
|
||||||
|
"expiry_duration": 10,
|
||||||
|
"company": "_Test Company",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
|
"expense_account": "Loyalty - _TC",
|
||||||
|
"collection_rules": [
|
||||||
|
{
|
||||||
|
'tier_name': 'Silver',
|
||||||
|
'collection_factor': 1000,
|
||||||
|
'min_spent': 10000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'tier_name': 'Gold',
|
||||||
|
'collection_factor': 1000,
|
||||||
|
'min_spent': 19000
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}).insert()
|
||||||
|
|
||||||
# create an item
|
# create an item
|
||||||
item = frappe.get_doc({
|
if not frappe.db.exists("Item", "Loyal Item"):
|
||||||
"doctype": "Item",
|
frappe.get_doc({
|
||||||
"item_code": "Loyal Item",
|
"doctype": "Item",
|
||||||
"item_name": "Loyal Item",
|
"item_code": "Loyal Item",
|
||||||
"item_group": "All Item Groups",
|
"item_name": "Loyal Item",
|
||||||
"company": "_Test Company",
|
"item_group": "All Item Groups",
|
||||||
"is_stock_item": 1,
|
"company": "_Test Company",
|
||||||
"opening_stock": 100,
|
"is_stock_item": 1,
|
||||||
"valuation_rate": 10000,
|
"opening_stock": 100,
|
||||||
}).insert()
|
"valuation_rate": 10000,
|
||||||
|
}).insert()
|
||||||
|
|
||||||
# create item price
|
# create item price
|
||||||
frappe.get_doc({
|
if not frappe.db.exists("Item Price", {"price_list": "Standard Selling", "item_code": "Loyal Item"}):
|
||||||
"doctype": "Item Price",
|
frappe.get_doc({
|
||||||
"price_list": "Standard Selling",
|
"doctype": "Item Price",
|
||||||
"item_code": item.item_code,
|
"price_list": "Standard Selling",
|
||||||
"price_list_rate": 10000
|
"item_code": "Loyal Item",
|
||||||
}).insert()
|
"price_list_rate": 10000
|
||||||
|
}).insert()
|
||||||
|
|||||||
@ -45,7 +45,7 @@ class TestPOSClosingEntry(unittest.TestCase):
|
|||||||
frappe.set_user("Administrator")
|
frappe.set_user("Administrator")
|
||||||
frappe.db.sql("delete from `tabPOS Profile`")
|
frappe.db.sql("delete from `tabPOS Profile`")
|
||||||
|
|
||||||
def init_user_and_profile():
|
def init_user_and_profile(**args):
|
||||||
user = 'test@example.com'
|
user = 'test@example.com'
|
||||||
test_user = frappe.get_doc('User', user)
|
test_user = frappe.get_doc('User', user)
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ def init_user_and_profile():
|
|||||||
test_user.add_roles(*roles)
|
test_user.add_roles(*roles)
|
||||||
frappe.set_user(user)
|
frappe.set_user(user)
|
||||||
|
|
||||||
pos_profile = make_pos_profile()
|
pos_profile = make_pos_profile(**args)
|
||||||
pos_profile.append('applicable_for_users', {
|
pos_profile.append('applicable_for_users', {
|
||||||
'default': 1,
|
'default': 1,
|
||||||
'user': user
|
'user': user
|
||||||
|
|||||||
@ -139,7 +139,8 @@ class POSInvoice(SalesInvoice):
|
|||||||
frappe.throw(_("At least one mode of payment is required for POS invoice."))
|
frappe.throw(_("At least one mode of payment is required for POS invoice."))
|
||||||
|
|
||||||
def validate_change_account(self):
|
def validate_change_account(self):
|
||||||
if frappe.db.get_value("Account", self.account_for_change_amount, "company") != self.company:
|
if self.change_amount and self.account_for_change_amount and \
|
||||||
|
frappe.db.get_value("Account", self.account_for_change_amount, "company") != self.company:
|
||||||
frappe.throw(_("The selected change account {} doesn't belongs to Company {}.").format(self.account_for_change_amount, self.company))
|
frappe.throw(_("The selected change account {} doesn't belongs to Company {}.").format(self.account_for_change_amount, self.company))
|
||||||
|
|
||||||
def validate_change_amount(self):
|
def validate_change_amount(self):
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import unittest, copy, time
|
|||||||
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
|
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
|
||||||
from erpnext.accounts.doctype.pos_invoice.pos_invoice import make_sales_return
|
from erpnext.accounts.doctype.pos_invoice.pos_invoice import make_sales_return
|
||||||
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
|
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
|
||||||
|
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
|
||||||
|
|
||||||
class TestPOSInvoice(unittest.TestCase):
|
class TestPOSInvoice(unittest.TestCase):
|
||||||
def test_timestamp_change(self):
|
def test_timestamp_change(self):
|
||||||
@ -222,29 +223,29 @@ class TestPOSInvoice(unittest.TestCase):
|
|||||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
|
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
|
||||||
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
|
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
|
||||||
|
|
||||||
se = make_serialized_item(company='_Test Company with perpetual inventory',
|
se = make_serialized_item(company='_Test Company',
|
||||||
target_warehouse="Stores - TCP1", cost_center='Main - TCP1', expense_account='Cost of Goods Sold - TCP1')
|
target_warehouse="Stores - _TC", cost_center='Main - _TC', expense_account='Cost of Goods Sold - _TC')
|
||||||
|
|
||||||
serial_nos = get_serial_nos(se.get("items")[0].serial_no)
|
serial_nos = get_serial_nos(se.get("items")[0].serial_no)
|
||||||
|
|
||||||
pos = create_pos_invoice(company='_Test Company with perpetual inventory', debit_to='Debtors - TCP1',
|
pos = create_pos_invoice(company='_Test Company', debit_to='Debtors - _TC',
|
||||||
account_for_change_amount='Cash - TCP1', warehouse='Stores - TCP1', income_account='Sales - TCP1',
|
account_for_change_amount='Cash - _TC', warehouse='Stores - _TC', income_account='Sales - _TC',
|
||||||
expense_account='Cost of Goods Sold - TCP1', cost_center='Main - TCP1',
|
expense_account='Cost of Goods Sold - _TC', cost_center='Main - _TC',
|
||||||
item=se.get("items")[0].item_code, rate=1000, do_not_save=1)
|
item=se.get("items")[0].item_code, rate=1000, do_not_save=1)
|
||||||
|
|
||||||
pos.get("items")[0].serial_no = serial_nos[0]
|
pos.get("items")[0].serial_no = serial_nos[0]
|
||||||
pos.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - TCP1', 'amount': 1000})
|
pos.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 1000})
|
||||||
|
|
||||||
pos.insert()
|
pos.insert()
|
||||||
pos.submit()
|
pos.submit()
|
||||||
|
|
||||||
pos2 = create_pos_invoice(company='_Test Company with perpetual inventory', debit_to='Debtors - TCP1',
|
pos2 = create_pos_invoice(company='_Test Company', debit_to='Debtors - _TC',
|
||||||
account_for_change_amount='Cash - TCP1', warehouse='Stores - TCP1', income_account='Sales - TCP1',
|
account_for_change_amount='Cash - _TC', warehouse='Stores - _TC', income_account='Sales - _TC',
|
||||||
expense_account='Cost of Goods Sold - TCP1', cost_center='Main - TCP1',
|
expense_account='Cost of Goods Sold - _TC', cost_center='Main - _TC',
|
||||||
item=se.get("items")[0].item_code, rate=1000, do_not_save=1)
|
item=se.get("items")[0].item_code, rate=1000, do_not_save=1)
|
||||||
|
|
||||||
pos2.get("items")[0].serial_no = serial_nos[0]
|
pos2.get("items")[0].serial_no = serial_nos[0]
|
||||||
pos2.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - TCP1', 'amount': 1000})
|
pos2.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 1000})
|
||||||
|
|
||||||
self.assertRaises(frappe.ValidationError, pos2.insert)
|
self.assertRaises(frappe.ValidationError, pos2.insert)
|
||||||
|
|
||||||
@ -286,7 +287,7 @@ class TestPOSInvoice(unittest.TestCase):
|
|||||||
|
|
||||||
after_redeem_lp_details = get_loyalty_program_details_with_points(inv.customer, company=inv.company, loyalty_program=inv.loyalty_program)
|
after_redeem_lp_details = get_loyalty_program_details_with_points(inv.customer, company=inv.company, loyalty_program=inv.loyalty_program)
|
||||||
self.assertEqual(after_redeem_lp_details.loyalty_points, 9)
|
self.assertEqual(after_redeem_lp_details.loyalty_points, 9)
|
||||||
|
|
||||||
def test_merging_into_sales_invoice_with_discount(self):
|
def test_merging_into_sales_invoice_with_discount(self):
|
||||||
from erpnext.accounts.doctype.pos_closing_entry.test_pos_closing_entry import init_user_and_profile
|
from erpnext.accounts.doctype.pos_closing_entry.test_pos_closing_entry import init_user_and_profile
|
||||||
from erpnext.accounts.doctype.pos_invoice_merge_log.pos_invoice_merge_log import merge_pos_invoices
|
from erpnext.accounts.doctype.pos_invoice_merge_log.pos_invoice_merge_log import merge_pos_invoices
|
||||||
@ -295,7 +296,7 @@ class TestPOSInvoice(unittest.TestCase):
|
|||||||
test_user, pos_profile = init_user_and_profile()
|
test_user, pos_profile = init_user_and_profile()
|
||||||
pos_inv = create_pos_invoice(rate=300, additional_discount_percentage=10, do_not_submit=1)
|
pos_inv = create_pos_invoice(rate=300, additional_discount_percentage=10, do_not_submit=1)
|
||||||
pos_inv.append('payments', {
|
pos_inv.append('payments', {
|
||||||
'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 300
|
'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 270
|
||||||
})
|
})
|
||||||
pos_inv.submit()
|
pos_inv.submit()
|
||||||
|
|
||||||
@ -309,9 +310,9 @@ class TestPOSInvoice(unittest.TestCase):
|
|||||||
|
|
||||||
pos_inv.load_from_db()
|
pos_inv.load_from_db()
|
||||||
rounded_total = frappe.db.get_value("Sales Invoice", pos_inv.consolidated_invoice, "rounded_total")
|
rounded_total = frappe.db.get_value("Sales Invoice", pos_inv.consolidated_invoice, "rounded_total")
|
||||||
self.assertEqual(rounded_total, 3500)
|
self.assertEqual(rounded_total, 3470)
|
||||||
frappe.set_user("Administrator")
|
frappe.set_user("Administrator")
|
||||||
|
|
||||||
def test_merging_into_sales_invoice_with_discount_and_inclusive_tax(self):
|
def test_merging_into_sales_invoice_with_discount_and_inclusive_tax(self):
|
||||||
from erpnext.accounts.doctype.pos_closing_entry.test_pos_closing_entry import init_user_and_profile
|
from erpnext.accounts.doctype.pos_closing_entry.test_pos_closing_entry import init_user_and_profile
|
||||||
from erpnext.accounts.doctype.pos_invoice_merge_log.pos_invoice_merge_log import merge_pos_invoices
|
from erpnext.accounts.doctype.pos_invoice_merge_log.pos_invoice_merge_log import merge_pos_invoices
|
||||||
@ -361,7 +362,7 @@ class TestPOSInvoice(unittest.TestCase):
|
|||||||
if not frappe.db.get_single_value("Selling Settings", "validate_selling_price"):
|
if not frappe.db.get_single_value("Selling Settings", "validate_selling_price"):
|
||||||
frappe.db.set_value("Selling Settings", "Selling Settings", "validate_selling_price", 1)
|
frappe.db.set_value("Selling Settings", "Selling Settings", "validate_selling_price", 1)
|
||||||
|
|
||||||
make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=1, basic_rate=300)
|
make_purchase_receipt(item_code="_Test Item", warehouse="_Test Warehouse - _TC", qty=1, rate=300)
|
||||||
frappe.db.sql("delete from `tabPOS Invoice`")
|
frappe.db.sql("delete from `tabPOS Invoice`")
|
||||||
test_user, pos_profile = init_user_and_profile()
|
test_user, pos_profile = init_user_and_profile()
|
||||||
pos_inv = create_pos_invoice(rate=300, do_not_submit=1)
|
pos_inv = create_pos_invoice(rate=300, do_not_submit=1)
|
||||||
@ -413,8 +414,6 @@ def create_pos_invoice(**args):
|
|||||||
pos_inv.is_pos = 1
|
pos_inv.is_pos = 1
|
||||||
pos_inv.pos_profile = args.pos_profile or pos_profile.name
|
pos_inv.pos_profile = args.pos_profile or pos_profile.name
|
||||||
|
|
||||||
pos_inv.set_missing_values()
|
|
||||||
|
|
||||||
if args.posting_date:
|
if args.posting_date:
|
||||||
pos_inv.set_posting_time = 1
|
pos_inv.set_posting_time = 1
|
||||||
pos_inv.posting_date = args.posting_date or frappe.utils.nowdate()
|
pos_inv.posting_date = args.posting_date or frappe.utils.nowdate()
|
||||||
@ -428,6 +427,8 @@ def create_pos_invoice(**args):
|
|||||||
pos_inv.conversion_rate = args.conversion_rate or 1
|
pos_inv.conversion_rate = args.conversion_rate or 1
|
||||||
pos_inv.account_for_change_amount = args.account_for_change_amount or "Cash - _TC"
|
pos_inv.account_for_change_amount = args.account_for_change_amount or "Cash - _TC"
|
||||||
|
|
||||||
|
pos_inv.set_missing_values()
|
||||||
|
|
||||||
pos_inv.append("items", {
|
pos_inv.append("items", {
|
||||||
"item_code": args.item or args.item_code or "_Test Item",
|
"item_code": args.item or args.item_code or "_Test Item",
|
||||||
"warehouse": args.warehouse or "_Test Warehouse - _TC",
|
"warehouse": args.warehouse or "_Test Warehouse - _TC",
|
||||||
|
|||||||
@ -651,12 +651,12 @@ class TestPurchaseOrder(unittest.TestCase):
|
|||||||
make_subcontracted_item(item_code)
|
make_subcontracted_item(item_code)
|
||||||
|
|
||||||
po = create_purchase_order(item_code=item_code, qty=1,
|
po = create_purchase_order(item_code=item_code, qty=1,
|
||||||
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC")
|
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC", include_exploded_items=1)
|
||||||
|
|
||||||
name = frappe.db.get_value('BOM', {'item': item_code}, 'name')
|
name = frappe.db.get_value('BOM', {'item': item_code}, 'name')
|
||||||
bom = frappe.get_doc('BOM', name)
|
bom = frappe.get_doc('BOM', name)
|
||||||
|
|
||||||
exploded_items = sorted([d.item_code for d in bom.exploded_items])
|
exploded_items = sorted([d.item_code for d in bom.exploded_items if not d.get('sourced_by_supplier')])
|
||||||
supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
|
supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
|
||||||
self.assertEquals(exploded_items, supplied_items)
|
self.assertEquals(exploded_items, supplied_items)
|
||||||
|
|
||||||
@ -664,7 +664,7 @@ class TestPurchaseOrder(unittest.TestCase):
|
|||||||
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC", include_exploded_items=0)
|
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC", include_exploded_items=0)
|
||||||
|
|
||||||
supplied_items1 = sorted([d.rm_item_code for d in po1.supplied_items])
|
supplied_items1 = sorted([d.rm_item_code for d in po1.supplied_items])
|
||||||
bom_items = sorted([d.item_code for d in bom.items])
|
bom_items = sorted([d.item_code for d in bom.items if not d.get('sourced_by_supplier')])
|
||||||
|
|
||||||
self.assertEquals(supplied_items1, bom_items)
|
self.assertEquals(supplied_items1, bom_items)
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import frappe
|
|||||||
from frappe.utils import nowdate
|
from frappe.utils import nowdate
|
||||||
from erpnext.stock.doctype.item.test_item import make_item
|
from erpnext.stock.doctype.item.test_item import make_item
|
||||||
from erpnext.templates.pages.rfq import check_supplier_has_docname_access
|
from erpnext.templates.pages.rfq import check_supplier_has_docname_access
|
||||||
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import make_supplier_quotation
|
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import make_supplier_quotation_from_rfq
|
||||||
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import create_supplier_quotation
|
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import create_supplier_quotation
|
||||||
from erpnext.crm.doctype.opportunity.test_opportunity import make_opportunity
|
from erpnext.crm.doctype.opportunity.test_opportunity import make_opportunity
|
||||||
from erpnext.crm.doctype.opportunity.opportunity import make_request_for_quotation as make_rfq
|
from erpnext.crm.doctype.opportunity.opportunity import make_request_for_quotation as make_rfq
|
||||||
@ -22,7 +22,7 @@ class TestRequestforQuotation(unittest.TestCase):
|
|||||||
self.assertEqual(rfq.get('suppliers')[1].quote_status, 'Pending')
|
self.assertEqual(rfq.get('suppliers')[1].quote_status, 'Pending')
|
||||||
|
|
||||||
# Submit the first supplier quotation
|
# Submit the first supplier quotation
|
||||||
sq = make_supplier_quotation(rfq.name, rfq.get('suppliers')[0].supplier)
|
sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=rfq.get('suppliers')[0].supplier)
|
||||||
sq.submit()
|
sq.submit()
|
||||||
|
|
||||||
# No Quote first supplier quotation
|
# No Quote first supplier quotation
|
||||||
@ -37,10 +37,10 @@ class TestRequestforQuotation(unittest.TestCase):
|
|||||||
def test_make_supplier_quotation(self):
|
def test_make_supplier_quotation(self):
|
||||||
rfq = make_request_for_quotation()
|
rfq = make_request_for_quotation()
|
||||||
|
|
||||||
sq = make_supplier_quotation(rfq.name, rfq.get('suppliers')[0].supplier)
|
sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=rfq.get('suppliers')[0].supplier)
|
||||||
sq.submit()
|
sq.submit()
|
||||||
|
|
||||||
sq1 = make_supplier_quotation(rfq.name, rfq.get('suppliers')[1].supplier)
|
sq1 = make_supplier_quotation_from_rfq(rfq.name, for_supplier=rfq.get('suppliers')[1].supplier)
|
||||||
sq1.submit()
|
sq1.submit()
|
||||||
|
|
||||||
self.assertEqual(sq.supplier, rfq.get('suppliers')[0].supplier)
|
self.assertEqual(sq.supplier, rfq.get('suppliers')[0].supplier)
|
||||||
@ -62,7 +62,7 @@ class TestRequestforQuotation(unittest.TestCase):
|
|||||||
|
|
||||||
rfq = make_request_for_quotation(supplier_data=supplier_wt_appos)
|
rfq = make_request_for_quotation(supplier_data=supplier_wt_appos)
|
||||||
|
|
||||||
sq = make_supplier_quotation(rfq.name, supplier_wt_appos[0].get("supplier"))
|
sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=supplier_wt_appos[0].get("supplier"))
|
||||||
sq.submit()
|
sq.submit()
|
||||||
|
|
||||||
frappe.form_dict = frappe.local("form_dict")
|
frappe.form_dict = frappe.local("form_dict")
|
||||||
|
|||||||
@ -11,7 +11,7 @@ from erpnext.accounts.party import get_party_account_currency
|
|||||||
from erpnext.exceptions import InvalidCurrency
|
from erpnext.exceptions import InvalidCurrency
|
||||||
from erpnext.stock.doctype.material_request.material_request import make_request_for_quotation
|
from erpnext.stock.doctype.material_request.material_request import make_request_for_quotation
|
||||||
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import \
|
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import \
|
||||||
make_supplier_quotation as make_quotation_from_rfq
|
make_supplier_quotation_from_rfq
|
||||||
|
|
||||||
def work():
|
def work():
|
||||||
frappe.set_user(frappe.db.get_global('demo_purchase_user'))
|
frappe.set_user(frappe.db.get_global('demo_purchase_user'))
|
||||||
@ -44,7 +44,7 @@ def work():
|
|||||||
rfq = frappe.get_doc('Request for Quotation', rfq.name)
|
rfq = frappe.get_doc('Request for Quotation', rfq.name)
|
||||||
|
|
||||||
for supplier in rfq.suppliers:
|
for supplier in rfq.suppliers:
|
||||||
supplier_quotation = make_quotation_from_rfq(rfq.name, supplier.supplier)
|
supplier_quotation = make_supplier_quotation_from_rfq(rfq.name, for_supplier=supplier.supplier)
|
||||||
supplier_quotation.save()
|
supplier_quotation.save()
|
||||||
supplier_quotation.submit()
|
supplier_quotation.submit()
|
||||||
|
|
||||||
|
|||||||
@ -207,7 +207,6 @@ class TestBOM(unittest.TestCase):
|
|||||||
supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
|
supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
|
||||||
self.assertEquals(bom_items, supplied_items)
|
self.assertEquals(bom_items, supplied_items)
|
||||||
|
|
||||||
|
|
||||||
def get_default_bom(item_code="_Test FG Item 2"):
|
def get_default_bom(item_code="_Test FG Item 2"):
|
||||||
return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1})
|
return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1})
|
||||||
|
|
||||||
|
|||||||
@ -347,8 +347,7 @@ class TestSalarySlip(unittest.TestCase):
|
|||||||
|
|
||||||
# create additional salary of 150000
|
# create additional salary of 150000
|
||||||
frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee))
|
frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee))
|
||||||
data["additional-1"] = create_additional_salary(employee, payroll_period, 50000)
|
data["additional-1"] = create_additional_salary(employee, payroll_period, 150000)
|
||||||
data["additional-2"] = create_additional_salary(employee, payroll_period, 100000)
|
|
||||||
data["deducted_dates"] = create_salary_slips_for_payroll_period(employee,
|
data["deducted_dates"] = create_salary_slips_for_payroll_period(employee,
|
||||||
salary_structure.name, payroll_period)
|
salary_structure.name, payroll_period)
|
||||||
|
|
||||||
|
|||||||
@ -577,8 +577,9 @@ class Item(WebsiteGenerator):
|
|||||||
# if barcode is getting updated , the row name has to reset.
|
# if barcode is getting updated , the row name has to reset.
|
||||||
# Delete previous old row doc and re-enter row as if new to reset name in db.
|
# Delete previous old row doc and re-enter row as if new to reset name in db.
|
||||||
item_barcode.set("__islocal", True)
|
item_barcode.set("__islocal", True)
|
||||||
|
item_barcode_entry_name = item_barcode.name
|
||||||
item_barcode.name = None
|
item_barcode.name = None
|
||||||
frappe.delete_doc("Item Barcode", item_barcode.name)
|
frappe.delete_doc("Item Barcode", item_barcode_entry_name)
|
||||||
|
|
||||||
def validate_warehouse_for_reorder(self):
|
def validate_warehouse_for_reorder(self):
|
||||||
'''Validate Reorder level table for duplicate and conditional mandatory'''
|
'''Validate Reorder level table for duplicate and conditional mandatory'''
|
||||||
|
|||||||
@ -471,7 +471,7 @@ class TestItem(unittest.TestCase):
|
|||||||
item_doc = frappe.get_doc('Item', item_code)
|
item_doc = frappe.get_doc('Item', item_code)
|
||||||
new_barcode = item_doc.append('barcodes')
|
new_barcode = item_doc.append('barcodes')
|
||||||
new_barcode.update(barcode_properties_list[0])
|
new_barcode.update(barcode_properties_list[0])
|
||||||
self.assertRaises(frappe.DuplicateEntryError, item_doc.save)
|
self.assertRaises(frappe.UniqueValidationError, item_doc.save)
|
||||||
|
|
||||||
# Add invalid barcode - should cause InvalidBarcode
|
# Add invalid barcode - should cause InvalidBarcode
|
||||||
item_doc = frappe.get_doc('Item', item_code)
|
item_doc = frappe.get_doc('Item', item_code)
|
||||||
|
|||||||
@ -180,18 +180,15 @@ class TestPurchaseReceipt(unittest.TestCase):
|
|||||||
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC")
|
is_subcontracted="Yes", supplier_warehouse="_Test Warehouse 1 - _TC")
|
||||||
|
|
||||||
#stock raw materials in a warehouse before transfer
|
#stock raw materials in a warehouse before transfer
|
||||||
make_stock_entry(target="_Test Warehouse - _TC",
|
|
||||||
item_code="_Test Item Home Desktop 100", qty=1, basic_rate=100)
|
|
||||||
make_stock_entry(target="_Test Warehouse - _TC",
|
make_stock_entry(target="_Test Warehouse - _TC",
|
||||||
item_code = "Test Extra Item 1", qty=1, basic_rate=100)
|
item_code = "Test Extra Item 1", qty=1, basic_rate=100)
|
||||||
make_stock_entry(target="_Test Warehouse - _TC",
|
make_stock_entry(target="_Test Warehouse - _TC",
|
||||||
item_code = "_Test Item", qty=1, basic_rate=100)
|
item_code = "_Test FG Item", qty=1, basic_rate=100)
|
||||||
|
|
||||||
rm_items = [
|
rm_items = [
|
||||||
{
|
{
|
||||||
"item_code": item_code,
|
"item_code": item_code,
|
||||||
"rm_item_code": po.supplied_items[0].rm_item_code,
|
"rm_item_code": po.supplied_items[0].rm_item_code,
|
||||||
"item_name": "_Test Item",
|
"item_name": "_Test FG Item",
|
||||||
"qty": po.supplied_items[0].required_qty,
|
"qty": po.supplied_items[0].required_qty,
|
||||||
"warehouse": "_Test Warehouse - _TC",
|
"warehouse": "_Test Warehouse - _TC",
|
||||||
"stock_uom": "Nos"
|
"stock_uom": "Nos"
|
||||||
@ -203,14 +200,6 @@ class TestPurchaseReceipt(unittest.TestCase):
|
|||||||
"qty": po.supplied_items[1].required_qty,
|
"qty": po.supplied_items[1].required_qty,
|
||||||
"warehouse": "_Test Warehouse - _TC",
|
"warehouse": "_Test Warehouse - _TC",
|
||||||
"stock_uom": "Nos"
|
"stock_uom": "Nos"
|
||||||
},
|
|
||||||
{
|
|
||||||
"item_code": item_code,
|
|
||||||
"rm_item_code": po.supplied_items[2].rm_item_code,
|
|
||||||
"item_name": "_Test Item Home Desktop 100",
|
|
||||||
"qty": po.supplied_items[2].required_qty,
|
|
||||||
"warehouse": "_Test Warehouse - _TC",
|
|
||||||
"stock_uom": "Nos"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
rm_item_string = json.dumps(rm_items)
|
rm_item_string = json.dumps(rm_items)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user