def test_partial_pos_returns(self): 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 se = make_serialized_item(company='_Test Company', 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) pos = create_pos_invoice(company='_Test Company', debit_to='Debtors - _TC', account_for_change_amount='Cash - _TC', warehouse='Stores - _TC', income_account='Sales - _TC', expense_account='Cost of Goods Sold - _TC', cost_center='Main - _TC', item=se.get("items")[0].item_code, qty=2, rate=1000, do_not_save=1) pos.get("items")[0].serial_no = serial_nos[0] + "\n" + serial_nos[1] pos.append("payments", {'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 1000, 'default': 1}) pos.insert() pos.submit() pos_return1 = make_sales_return(pos.name) # partial return 1 pos_return1.get('items')[0].qty = -1 pos_return1.get('items')[0].serial_no = serial_nos[0] pos_return1.insert() pos_return1.submit() # partial return 2 pos_return2 = make_sales_return(pos.name) self.assertEqual(pos_return2.get('items')[0].qty, -1) self.assertEqual(pos_return2.get('items')[0].serial_no, serial_nos[1])
def test_pos_returns_with_repayment(self): pos = create_pos_invoice(qty=10, do_not_save=True) pos.set('payments', []) pos.append( "payments", { 'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 500 }) pos.append( "payments", { 'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 500, 'default': 1 }) pos.insert() pos.submit() pos_return = make_sales_return(pos.name) pos_return.insert() pos_return.submit() self.assertEqual(pos_return.get('payments')[0].amount, -500) self.assertEqual(pos_return.get('payments')[1].amount, -500)
def test_returned_serial_no_case(self): from erpnext.accounts.doctype.pos_invoice_merge_log.test_pos_invoice_merge_log import ( init_user_and_profile, ) from erpnext.stock.doctype.serial_no.serial_no import get_pos_reserved_serial_nos from erpnext.stock.doctype.serial_no.test_serial_no import get_serial_nos from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item frappe.db.savepoint("before_test_returned_serial_no_case") try: se = make_serialized_item() serial_no = get_serial_nos(se.get("items")[0].serial_no)[0] init_user_and_profile() pos_inv = create_pos_invoice( item_code="_Test Serialized Item With Series", serial_no=serial_no, qty=1, rate=100, ) pos_return = make_sales_return(pos_inv.name) pos_return.flags.ignore_validate = True pos_return.insert() pos_return.submit() pos_reserved_serial_nos = get_pos_reserved_serial_nos( {"item_code": "_Test Serialized Item With Series", "warehouse": "_Test Warehouse - _TC"} ) self.assertTrue(serial_no not in pos_reserved_serial_nos) finally: frappe.db.rollback(save_point="before_test_returned_serial_no_case") frappe.set_user("Administrator")
def test_consolidated_credit_note_creation(self): frappe.db.sql("delete from `tabPOS Invoice`") try: test_user, pos_profile = init_user_and_profile() pos_inv = create_pos_invoice(rate=300, do_not_submit=1) pos_inv.append('payments', { 'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 300 }) pos_inv.submit() pos_inv2 = create_pos_invoice(rate=3200, do_not_submit=1) pos_inv2.append('payments', { 'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 3200 }) pos_inv2.submit() pos_inv3 = create_pos_invoice(customer="_Test Customer 2", rate=2300, do_not_submit=1) pos_inv3.append('payments', { 'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 2300 }) pos_inv3.submit() pos_inv_cn = make_sales_return(pos_inv.name) pos_inv_cn.set("payments", []) pos_inv_cn.append('payments', { 'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': -300 }) pos_inv_cn.paid_amount = -300 pos_inv_cn.submit() consolidate_pos_invoices() pos_inv.load_from_db() self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv.consolidated_invoice)) pos_inv3.load_from_db() self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv3.consolidated_invoice)) pos_inv_cn.load_from_db() self.assertTrue(frappe.db.exists("Sales Invoice", pos_inv_cn.consolidated_invoice)) self.assertTrue(frappe.db.get_value("Sales Invoice", pos_inv_cn.consolidated_invoice, "is_return")) finally: frappe.set_user("Administrator") frappe.db.sql("delete from `tabPOS Profile`") frappe.db.sql("delete from `tabPOS Invoice`")
def test_pos_returns_with_repayment(self): pos = create_pos_invoice(qty=10, do_not_save=True) pos.set("payments", []) pos.append( "payments", {"mode_of_payment": "Bank Draft", "account": "_Test Bank - _TC", "amount": 500} ) pos.append( "payments", {"mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 500, "default": 1} ) pos.insert() pos.submit() pos_return = make_sales_return(pos.name) pos_return.insert() pos_return.submit() self.assertEqual(pos_return.get("payments")[0].amount, -500) self.assertEqual(pos_return.get("payments")[1].amount, -500)
def test_pos_return_for_serialized_item(self): from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item se = make_serialized_item( company="_Test Company", 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) pos = create_pos_invoice( company="_Test Company", debit_to="Debtors - _TC", account_for_change_amount="Cash - _TC", warehouse="Stores - _TC", income_account="Sales - _TC", expense_account="Cost of Goods Sold - _TC", cost_center="Main - _TC", item=se.get("items")[0].item_code, rate=1000, do_not_save=1, ) pos.get("items")[0].serial_no = serial_nos[0] pos.append( "payments", {"mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 1000, "default": 1} ) pos.insert() pos.submit() pos_return = make_sales_return(pos.name) pos_return.insert() pos_return.submit() self.assertEqual(pos_return.get("items")[0].serial_no, serial_nos[0])
def test_consolidated_credit_note_creation(self): frappe.db.sql("delete from `tabPOS Invoice`") try: test_user, pos_profile = init_user_and_profile() pos_inv = create_pos_invoice(rate=300, do_not_submit=1) pos_inv.append("payments", { "mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 300 }) pos_inv.submit() pos_inv2 = create_pos_invoice(rate=3200, do_not_submit=1) pos_inv2.append("payments", { "mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 3200 }) pos_inv2.submit() pos_inv3 = create_pos_invoice(customer="_Test Customer 2", rate=2300, do_not_submit=1) pos_inv3.append("payments", { "mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 2300 }) pos_inv3.submit() pos_inv_cn = make_sales_return(pos_inv.name) pos_inv_cn.set("payments", []) pos_inv_cn.append("payments", { "mode_of_payment": "Cash", "account": "Cash - _TC", "amount": -100 }) pos_inv_cn.append( "payments", { "mode_of_payment": "Bank Draft", "account": "_Test Bank - _TC", "amount": -200 }) pos_inv_cn.paid_amount = -300 pos_inv_cn.submit() consolidate_pos_invoices() pos_inv.load_from_db() self.assertTrue( frappe.db.exists("Sales Invoice", pos_inv.consolidated_invoice)) pos_inv3.load_from_db() self.assertTrue( frappe.db.exists("Sales Invoice", pos_inv3.consolidated_invoice)) pos_inv_cn.load_from_db() self.assertTrue( frappe.db.exists("Sales Invoice", pos_inv_cn.consolidated_invoice)) consolidated_credit_note = frappe.get_doc( "Sales Invoice", pos_inv_cn.consolidated_invoice) self.assertEqual(consolidated_credit_note.is_return, 1) self.assertEqual( consolidated_credit_note.payments[0].mode_of_payment, "Cash") self.assertEqual(consolidated_credit_note.payments[0].amount, -100) self.assertEqual( consolidated_credit_note.payments[1].mode_of_payment, "Bank Draft") self.assertEqual(consolidated_credit_note.payments[1].amount, -200) finally: frappe.set_user("Administrator") frappe.db.sql("delete from `tabPOS Profile`") frappe.db.sql("delete from `tabPOS Invoice`")
def test_serial_no_case_1(self): """ Create a POS Invoice with serial no Create a Return Invoice with serial no Create a POS Invoice with serial no again Consolidate the invoices The first POS Invoice should be consolidated with a separate single Merge Log The second and third POS Invoice should be consolidated with a single Merge Log """ from erpnext.stock.doctype.serial_no.test_serial_no import get_serial_nos from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item frappe.db.sql("delete from `tabPOS Invoice`") try: se = make_serialized_item() serial_no = get_serial_nos(se.get("items")[0].serial_no)[0] init_user_and_profile() pos_inv = create_pos_invoice( item_code="_Test Serialized Item With Series", serial_no=serial_no, qty=1, rate=100, do_not_submit=1, ) pos_inv.append("payments", { "mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 100 }) pos_inv.submit() pos_inv_cn = make_sales_return(pos_inv.name) pos_inv_cn.paid_amount = -100 pos_inv_cn.submit() pos_inv2 = create_pos_invoice( item_code="_Test Serialized Item With Series", serial_no=serial_no, qty=1, rate=100, do_not_submit=1, ) pos_inv2.append("payments", { "mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 100 }) pos_inv2.submit() consolidate_pos_invoices() pos_inv.load_from_db() pos_inv2.load_from_db() self.assertNotEqual(pos_inv.consolidated_invoice, pos_inv2.consolidated_invoice) finally: frappe.set_user("Administrator") frappe.db.sql("delete from `tabPOS Profile`") frappe.db.sql("delete from `tabPOS Invoice`")