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])
Beispiel #2
0
    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)
Beispiel #3
0
	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`")
Beispiel #5
0
	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)
Beispiel #6
0
	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`")