Exemplo n.º 1
0
def make_serial_item_with_serial(item_code):
    serial_item_doc = create_item(item_code, is_stock_item=1)
    if not serial_item_doc.has_serial_no or not serial_item_doc.serial_no_series:
        serial_item_doc.has_serial_no = 1
        serial_item_doc.serial_no_series = "TEST.###"
        serial_item_doc.save(ignore_permissions=True)
    active_serials = frappe.db.get_all("Serial No", {
        "status": "Active",
        "item_code": item_code
    })
    if len(active_serials) < 2:
        make_serialized_item(item_code=item_code)
Exemplo n.º 2
0
    def test_serialized_item_transaction(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(target_warehouse="_Test Warehouse - _TC")
        serial_nos = get_serial_nos(se.get("items")[0].serial_no)

        pos = create_pos_invoice(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': 'Bank Draft',
                'account': '_Test Bank - _TC',
                'amount': 1000
            })

        pos.insert()
        pos.submit()

        pos2 = create_pos_invoice(item=se.get("items")[0].item_code,
                                  rate=1000,
                                  do_not_save=1)
        pos2.get("items")[0].serial_no = serial_nos[0]
        pos2.append(
            "payments", {
                'mode_of_payment': 'Bank Draft',
                'account': '_Test Bank - _TC',
                'amount': 1000
            })

        self.assertRaises(frappe.ValidationError, pos2.insert)
Exemplo n.º 3
0
	def test_serialized_item_transaction(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, rate=1000, do_not_save=1)

		pos.get("items")[0].serial_no = serial_nos[0]
		pos.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 1000})

		pos.insert()
		pos.submit()

		pos2 = 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)

		pos2.get("items")[0].serial_no = serial_nos[0]
		pos2.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 1000})

		self.assertRaises(frappe.ValidationError, pos2.insert)
Exemplo n.º 4
0
    def test_serialize_status(self):
        from erpnext.stock.doctype.serial_no.serial_no import (
            SerialNoStatusError,
            get_serial_nos,
            SerialNoDuplicateError,
        )
        from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item

        se = make_serialized_item()
        serial_nos = get_serial_nos(se.get("items")[0].serial_no)

        sr = frappe.get_doc("Serial No", serial_nos[0])
        sr.status = "Not Available"
        sr.save()

        si = frappe.copy_doc(test_records[0])
        si.update_stock = 1
        si.get("items")[0].item_code = "_Test Serialized Item With Series"
        si.get("items")[0].qty = 1
        si.get("items")[0].serial_no = serial_nos[0]
        si.insert()

        self.assertRaises(SerialNoStatusError, si.submit)

        # hack! because stock ledger entires are already inserted and are not rolled back!
        self.assertRaises(SerialNoDuplicateError, si.cancel)
Exemplo n.º 5
0
    def test_return_for_serialized_items(self):
        se = make_serialized_item()
        serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]

        dn = create_delivery_note(item_code="_Test Serialized Item With Series", rate=500, serial_no=serial_no)

        self.check_serial_no_values(serial_no, {"warehouse": "", "delivery_document_no": dn.name})

        # return entry
        dn1 = create_delivery_note(
            item_code="_Test Serialized Item With Series",
            is_return=1,
            return_against=dn.name,
            qty=-1,
            rate=500,
            serial_no=serial_no,
        )

        self.check_serial_no_values(serial_no, {"warehouse": "_Test Warehouse - _TC", "delivery_document_no": ""})

        dn1.cancel()

        self.check_serial_no_values(serial_no, {"warehouse": "", "delivery_document_no": dn.name})

        dn.cancel()

        self.check_serial_no_values(
            serial_no,
            {"warehouse": "_Test Warehouse - _TC", "delivery_document_no": "", "purchase_document_no": se.name},
        )
Exemplo n.º 6
0
	def test_serialized(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()
		serial_nos = get_serial_nos(se.get("items")[0].serial_no)

		si = frappe.copy_doc(test_records[0])
		si.update_stock = 1
		si.get("items")[0].item_code = "_Test Serialized Item With Series"
		si.get("items")[0].qty = 1
		si.get("items")[0].serial_no = serial_nos[0]
		si.insert()
		si.submit()

		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0],
			"delivery_document_no"), si.name)
		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "sales_invoice"),
			si.name)

		# check if the serial number is already linked with any other Sales Invoice
		_si = frappe.copy_doc(si.as_dict())
		self.assertRaises(frappe.ValidationError, _si.insert)

		return si
Exemplo n.º 7
0
	def test_serialized(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()
		serial_nos = get_serial_nos(se.get("items")[0].serial_no)

		si = frappe.copy_doc(test_records[0])
		si.update_stock = 1
		si.get("items")[0].item_code = "_Test Serialized Item With Series"
		si.get("items")[0].qty = 1
		si.get("items")[0].serial_no = serial_nos[0]
		si.insert()
		si.submit()

		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0],
			"delivery_document_no"), si.name)
		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "sales_invoice"),
			si.name)

		# check if the serial number is already linked with any other Sales Invoice
		_si = frappe.copy_doc(si.as_dict())
		self.assertRaises(frappe.ValidationError, _si.insert)

		return si
Exemplo n.º 8
0
    def test_inter_company_transfer(self):
        se = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
        serial_nos = get_serial_nos(se.get("items")[0].serial_no)

        dn = create_delivery_note(
            item_code="_Test Serialized Item With Series",
            qty=1,
            serial_no=serial_nos[0])

        serial_no = frappe.get_doc("Serial No", serial_nos[0])

        # check Serial No details after delivery
        self.assertEqual(serial_no.status, "Delivered")
        self.assertEqual(serial_no.warehouse, None)
        self.assertEqual(serial_no.company, "_Test Company")
        self.assertEqual(serial_no.delivery_document_type, "Delivery Note")
        self.assertEqual(serial_no.delivery_document_no, dn.name)

        wh = create_warehouse("_Test Warehouse", company="_Test Company 1")
        pr = make_purchase_receipt(
            item_code="_Test Serialized Item With Series",
            qty=1,
            serial_no=serial_nos[0],
            company="_Test Company 1",
            warehouse=wh)

        serial_no.reload()

        # check Serial No details after purchase in second company
        self.assertEqual(serial_no.status, "Active")
        self.assertEqual(serial_no.warehouse, wh)
        self.assertEqual(serial_no.company, "_Test Company 1")
        self.assertEqual(serial_no.purchase_document_type, "Purchase Receipt")
        self.assertEqual(serial_no.purchase_document_no, pr.name)
Exemplo n.º 9
0
	def test_return_for_serialized_items(self):
		se = make_serialized_item()
		serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]

		dn = create_delivery_note(item_code="_Test Serialized Item With Series", rate=500, serial_no=serial_no)

		self.check_serial_no_values(serial_no, {
			"warehouse": "",
			"delivery_document_no": dn.name
		})

		# return entry
		dn1 = create_delivery_note(item_code="_Test Serialized Item With Series",
			is_return=1, return_against=dn.name, qty=-1, rate=500, serial_no=serial_no)

		self.check_serial_no_values(serial_no, {
			"warehouse": "_Test Warehouse - _TC",
			"delivery_document_no": ""
		})

		dn1.cancel()

		self.check_serial_no_values(serial_no, {
			"warehouse": "",
			"delivery_document_no": dn.name
		})

		dn.cancel()

		self.check_serial_no_values(serial_no, {
			"warehouse": "_Test Warehouse - _TC",
			"delivery_document_no": "",
			"purchase_document_no": se.name
		})
Exemplo n.º 10
0
	def test_delivered_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.delivery_note.test_delivery_note import create_delivery_note
		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_delivered_serial_no_case")
		try:
			se = make_serialized_item()
			serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]

			dn = create_delivery_note(item_code="_Test Serialized Item With Series", serial_no=serial_no)

			delivery_document_no = frappe.db.get_value("Serial No", serial_no, "delivery_document_no")
			self.assertEquals(delivery_document_no, dn.name)

			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=True,
			)

			self.assertRaises(frappe.ValidationError, pos_inv.submit)

		finally:
			frappe.db.rollback(save_point="before_test_delivered_serial_no_case")
			frappe.set_user("Administrator")
Exemplo n.º 11
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")
Exemplo n.º 12
0
    def test_serialized(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()
        serial_nos = get_serial_nos(se.get("items")[0].serial_no)

        si = frappe.copy_doc(test_records[0])
        si.update_stock = 1
        si.get("items")[0].item_code = "_Test Serialized Item With Series"
        si.get("items")[0].qty = 1
        si.get("items")[0].serial_no = serial_nos[0]
        si.insert()
        si.submit()

        self.assertEquals(
            frappe.db.get_value("Serial No", serial_nos[0], "status"),
            "Delivered")
        self.assertFalse(
            frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
        self.assertEquals(
            frappe.db.get_value("Serial No", serial_nos[0],
                                "delivery_document_no"), si.name)

        return si
Exemplo n.º 13
0
	def test_invalid_serial_no_validation(self):
		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 = se.get("items")[0].serial_no + "wrong"

		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,
			qty=2,
			do_not_save=1,
		)

		pos.get("items")[0].has_serial_no = 1
		pos.get("items")[0].serial_no = serial_nos
		pos.insert()

		self.assertRaises(frappe.ValidationError, pos.submit)
Exemplo n.º 14
0
    def test_serialized_item_consumption(self):
        from erpnext.stock.doctype.serial_no.serial_no import SerialNoRequiredError
        from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item

        stock_entry = make_serialized_item()
        serial_nos = stock_entry.get("items")[0].serial_no
        serial_no = serial_nos.split("\n")[0]

        # should not raise any error
        create_asset_repair(
            stock_consumption=1,
            item_code=stock_entry.get("items")[0].item_code,
            warehouse="_Test Warehouse - _TC",
            serial_no=serial_no,
            submit=1,
        )

        # should raise error
        asset_repair = create_asset_repair(
            stock_consumption=1,
            warehouse="_Test Warehouse - _TC",
            item_code=stock_entry.get("items")[0].item_code,
        )

        asset_repair.repair_status = "Completed"
        self.assertRaises(SerialNoRequiredError, asset_repair.submit)
Exemplo n.º 15
0
	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_serialize_status(self):
		se = make_serialized_item()
		serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]
		
		frappe.db.set_value("Serial No", serial_no, "status", "Not Available")

		dn = create_delivery_note(item_code="_Test Serialized Item With Series", 
			serial_no=serial_no, do_not_submit=True)

		self.assertRaises(SerialNoStatusError, dn.submit)
Exemplo n.º 17
0
	def test_serialized_item_transaction(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": "Bank Draft", "account": "_Test Bank - _TC", "amount": 1000}
		)

		pos.insert()
		pos.submit()

		pos2 = 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,
		)

		pos2.get("items")[0].serial_no = serial_nos[0]
		pos2.append(
			"payments", {"mode_of_payment": "Bank Draft", "account": "_Test Bank - _TC", "amount": 1000}
		)

		pos2.insert()
		self.assertRaises(frappe.ValidationError, pos2.submit)
Exemplo n.º 18
0
    def test_serialized(self):
        se = make_serialized_item()
        serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]

        dn = create_delivery_note(item_code="_Test Serialized Item With Series", serial_no=serial_no)

        self.check_serial_no_values(serial_no, {"warehouse": "", "delivery_document_no": dn.name})

        dn.cancel()

        self.check_serial_no_values(serial_no, {"warehouse": "_Test Warehouse - _TC", "delivery_document_no": ""})
Exemplo n.º 19
0
    def test_serialize_status(self):
        se = make_serialized_item()
        serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]

        frappe.db.set_value("Serial No", serial_no, "status", "Not Available")

        dn = create_delivery_note(
            item_code="_Test Serialized Item With Series",
            serial_no=serial_no,
            do_not_submit=True)

        self.assertRaises(SerialNoStatusError, dn.submit)
Exemplo n.º 20
0
	def test_inter_company_transfer(self):
		se = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
		serial_nos = get_serial_nos(se.get("items")[0].serial_no)

		create_delivery_note(item_code="_Test Serialized Item With Series", qty=1, serial_no=serial_nos[0])

		wh = create_warehouse("_Test Warehouse", company="_Test Company 1")
		make_purchase_receipt(item_code="_Test Serialized Item With Series", qty=1, serial_no=serial_nos[0],
			company="_Test Company 1", warehouse=wh)

		serial_no = frappe.db.get_value("Serial No", serial_nos[0], ["warehouse", "company"], as_dict=1)

		self.assertEqual(serial_no.warehouse, wh)
		self.assertEqual(serial_no.company, "_Test Company 1")
Exemplo n.º 21
0
	def test_serialized_partial_sales_invoice(self):
		se = make_serialized_item()
		serial_no = get_serial_nos(se.get("items")[0].serial_no)
		serial_no = '\n'.join(serial_no)

		dn = create_delivery_note(item_code="_Test Serialized Item With Series", qty=2, serial_no=serial_no)

		si = make_sales_invoice(dn.name)
		si.items[0].qty = 1
		si.submit()
		self.assertEqual(si.items[0].qty, 1)

		si = make_sales_invoice(dn.name)
		si.submit()
		self.assertEqual(si.items[0].qty, len(get_serial_nos(si.items[0].serial_no)))
Exemplo n.º 22
0
	def test_serialized_partial_sales_invoice(self):
		se = make_serialized_item()
		serial_no = get_serial_nos(se.get("items")[0].serial_no)
		serial_no = '\n'.join(serial_no)

		dn = create_delivery_note(item_code="_Test Serialized Item With Series", qty=2, serial_no=serial_no)

		si = make_sales_invoice(dn.name)
		si.items[0].qty = 1
		si.submit()
		self.assertEqual(si.items[0].qty, 1)

		si = make_sales_invoice(dn.name)
		si.submit()
		self.assertEqual(si.items[0].qty, len(get_serial_nos(si.items[0].serial_no)))
Exemplo n.º 23
0
    def test_inter_company_transfer(self):
        se = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
        serial_nos = get_serial_nos(se.get("items")[0].serial_no)

        create_delivery_note(
            item_code="_Test Serialized Item With Series", qty=1, serial_no=serial_nos[0])

        wh = create_warehouse("_Test Warehouse", company="_Test Company 1")
        make_purchase_receipt(item_code="_Test Serialized Item With Series", qty=1, serial_no=serial_nos[0],
                              company="_Test Company 1", warehouse=wh)

        serial_no = frappe.db.get_value("Serial No", serial_nos[0], [
                                        "warehouse", "company"], as_dict=1)

        self.assertEqual(serial_no.warehouse, wh)
        self.assertEqual(serial_no.company, "_Test Company 1")
Exemplo n.º 24
0
	def test_serialized(self):
		se = make_serialized_item()
		serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]

		dn = create_delivery_note(item_code="_Test Serialized Item With Series", serial_no=serial_no)

		self.check_serial_no_values(serial_no, {
			"warehouse": "",
			"delivery_document_no": dn.name
		})

		dn.cancel()

		self.check_serial_no_values(serial_no, {
			"warehouse": "_Test Warehouse - _TC",
			"delivery_document_no": ""
		})
	def test_serialize_status(self):
		from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item

		se = make_serialized_item()
		serial_nos = get_serial_nos(se.get("mtn_details")[0].serial_no)

		sr = frappe.get_doc("Serial No", serial_nos[0])
		sr.status = "Not Available"
		sr.save()

		dn = frappe.copy_doc(test_records[0])
		dn.get("delivery_note_details")[0].item_code = "_Test Serialized Item With Series"
		dn.get("delivery_note_details")[0].qty = 1
		dn.get("delivery_note_details")[0].serial_no = serial_nos[0]
		dn.insert()

		self.assertRaises(SerialNoStatusError, dn.submit)
Exemplo n.º 26
0
    def test_serialize_status(self):
        from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
        from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item

        se = make_serialized_item()
        serial_nos = get_serial_nos(se.doclist[1].serial_no)

        sr = frappe.bean("Serial No", serial_nos[0])
        sr.doc.status = "Not Available"
        sr.save()

        dn = frappe.bean(copy=test_records[0])
        dn.doclist[1].item_code = "_Test Serialized Item With Series"
        dn.doclist[1].qty = 1
        dn.doclist[1].serial_no = serial_nos[0]
        dn.insert()

        self.assertRaises(SerialNoStatusError, dn.submit)
Exemplo n.º 27
0
    def test_serialize_status(self):
        from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
        from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item

        se = make_serialized_item()
        serial_nos = get_serial_nos(se.get("mtn_details")[0].serial_no)

        sr = frappe.get_doc("Serial No", serial_nos[0])
        sr.status = "Not Available"
        sr.save()

        si = frappe.copy_doc(test_records[0])
        si.update_stock = 1
        si.get("entries")[0].item_code = "_Test Serialized Item With Series"
        si.get("entries")[0].qty = 1
        si.get("entries")[0].serial_no = serial_nos[0]
        si.insert()

        self.assertRaises(SerialNoStatusError, si.submit)
	def test_serialize_status(self):
		from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos
		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item

		se = make_serialized_item()
		serial_nos = get_serial_nos(se.get("items")[0].serial_no)

		sr = frappe.get_doc("Serial No", serial_nos[0])
		sr.status = "Not Available"
		sr.save()

		si = frappe.copy_doc(test_records[0])
		si.update_stock = 1
		si.get("items")[0].item_code = "_Test Serialized Item With Series"
		si.get("items")[0].qty = 1
		si.get("items")[0].serial_no = serial_nos[0]
		si.insert()

		self.assertRaises(SerialNoStatusError, si.submit)
Exemplo n.º 29
0
	def test_serialized(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()
		serial_nos = get_serial_nos(se.get("items")[0].serial_no)

		si = frappe.copy_doc(test_records[0])
		si.update_stock = 1
		si.get("items")[0].item_code = "_Test Serialized Item With Series"
		si.get("items")[0].qty = 1
		si.get("items")[0].serial_no = serial_nos[0]
		si.insert()
		si.submit()

		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0],
			"delivery_document_no"), si.name)

		return si
Exemplo n.º 30
0
	def test_serial_numbers_against_delivery_note(self):
		""" 
			check if the sales invoice item serial numbers and the delivery note items
			serial numbers are same
		"""
		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
		from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
		from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos

		se = make_serialized_item()
		serial_nos = get_serial_nos(se.get("items")[0].serial_no)

		dn = create_delivery_note(item=se.get("items")[0].item_code, serial_no=serial_nos[0])
		dn.submit()

		si = make_sales_invoice(dn.name)
		si.save()

		self.assertEquals(si.get("items")[0].serial_no, dn.get("items")[0].serial_no)
	def test_serialized(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()
		serial_nos = get_serial_nos(se.get("mtn_details")[0].serial_no)

		dn = frappe.copy_doc(test_records[0])
		dn.get("delivery_note_details")[0].item_code = "_Test Serialized Item With Series"
		dn.get("delivery_note_details")[0].qty = 1
		dn.get("delivery_note_details")[0].serial_no = serial_nos[0]
		dn.insert()
		dn.submit()

		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Delivered")
		self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
		self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0],
			"delivery_document_no"), dn.name)

		return dn
Exemplo n.º 32
0
	def test_serial_numbers_against_delivery_note(self):
		""" 
			check if the sales invoice item serial numbers and the delivery note items
			serial numbers are same
		"""
		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
		from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
		from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos

		se = make_serialized_item()
		serial_nos = get_serial_nos(se.get("items")[0].serial_no)

		dn = create_delivery_note(item=se.get("items")[0].item_code, serial_no=serial_nos[0])
		dn.submit()

		si = make_sales_invoice(dn.name)
		si.save()

		self.assertEquals(si.get("items")[0].serial_no, dn.get("items")[0].serial_no)
Exemplo n.º 33
0
	def test_serialized(self):
		se = make_serialized_item()
		serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]

		dn = create_delivery_note(item_code="_Test Serialized Item With Series", serial_no=serial_no)

		self.check_serial_no_values(serial_no, {
			"warehouse": "",
			"delivery_document_no": dn.name
		})

		si = make_sales_invoice(dn.name)
		si.insert(ignore_permissions=True)
		self.assertEqual(dn.items[0].serial_no, si.items[0].serial_no)

		dn.cancel()

		self.check_serial_no_values(serial_no, {
			"warehouse": "_Test Warehouse - _TC",
			"delivery_document_no": ""
		})
Exemplo n.º 34
0
	def test_serialized(self):
		se = make_serialized_item()
		serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]

		dn = create_delivery_note(item_code="_Test Serialized Item With Series", serial_no=serial_no)

		self.check_serial_no_values(serial_no, {
			"warehouse": "",
			"delivery_document_no": dn.name
		})

		si = make_sales_invoice(dn.name)
		si.insert(ignore_permissions=True)
		self.assertEqual(dn.items[0].serial_no, si.items[0].serial_no)

		dn.cancel()

		self.check_serial_no_values(serial_no, {
			"warehouse": "_Test Warehouse - _TC",
			"delivery_document_no": ""
		})
Exemplo n.º 35
0
    def test_serialize_status(self):
        from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos, SerialNoDuplicateError
        from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item

        se = make_serialized_item()
        serial_nos = get_serial_nos(se.get("items")[0].serial_no)

        sr = frappe.get_doc("Serial No", serial_nos[0])
        sr.status = "Not Available"
        sr.save()

        si = frappe.copy_doc(test_records[0])
        si.update_stock = 1
        si.get("items")[0].item_code = "_Test Serialized Item With Series"
        si.get("items")[0].qty = 1
        si.get("items")[0].serial_no = serial_nos[0]
        si.insert()

        self.assertRaises(SerialNoStatusError, si.submit)

        # hack! because stock ledger entires are already inserted and are not rolled back!
        self.assertRaises(SerialNoDuplicateError, si.cancel)
Exemplo n.º 36
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])
Exemplo n.º 37
0
    def test_serialized(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()
        serial_nos = get_serial_nos(se.doclist[1].serial_no)

        dn = frappe.bean(copy=test_records[0])
        dn.doclist[1].item_code = "_Test Serialized Item With Series"
        dn.doclist[1].qty = 1
        dn.doclist[1].serial_no = serial_nos[0]
        dn.insert()
        dn.submit()

        self.assertEquals(
            frappe.db.get_value("Serial No", serial_nos[0], "status"),
            "Delivered")
        self.assertFalse(
            frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
        self.assertEquals(
            frappe.db.get_value("Serial No", serial_nos[0],
                                "delivery_document_no"), dn.doc.name)

        return dn
Exemplo n.º 38
0
    def test_inter_company_transfer_intermediate_cancellation(self):
        """
			Receive into and Deliver Serial No from one company.
			Then Receive into and Deliver from second company.
			Try to cancel intermediate receipts/deliveries to test if it is blocked.
		"""
        se = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
        serial_nos = get_serial_nos(se.get("items")[0].serial_no)

        sn_doc = frappe.get_doc("Serial No", serial_nos[0])

        # check Serial No details after purchase in first company
        self.assertEqual(sn_doc.status, "Active")
        self.assertEqual(sn_doc.company, "_Test Company")
        self.assertEqual(sn_doc.warehouse, "_Test Warehouse - _TC")
        self.assertEqual(sn_doc.purchase_document_no, se.name)

        dn = create_delivery_note(
            item_code="_Test Serialized Item With Series",
            qty=1,
            serial_no=serial_nos[0])
        sn_doc.reload()
        # check Serial No details after delivery from **first** company
        self.assertEqual(sn_doc.status, "Delivered")
        self.assertEqual(sn_doc.company, "_Test Company")
        self.assertEqual(sn_doc.warehouse, None)
        self.assertEqual(sn_doc.delivery_document_no, dn.name)

        # try cancelling the first Serial No Receipt, even though it is delivered
        # block cancellation is Serial No is out of the warehouse
        self.assertRaises(frappe.ValidationError, se.cancel)

        # receive serial no in second company
        wh = create_warehouse("_Test Warehouse", company="_Test Company 1")
        pr = make_purchase_receipt(
            item_code="_Test Serialized Item With Series",
            qty=1,
            serial_no=serial_nos[0],
            company="_Test Company 1",
            warehouse=wh)
        sn_doc.reload()

        self.assertEqual(sn_doc.warehouse, wh)
        # try cancelling the delivery from the first company
        # block cancellation as Serial No belongs to different company
        self.assertRaises(frappe.ValidationError, dn.cancel)

        # deliver from second company
        dn_2 = create_delivery_note(
            item_code="_Test Serialized Item With Series",
            qty=1,
            serial_no=serial_nos[0],
            company="_Test Company 1",
            warehouse=wh)
        sn_doc.reload()

        # check Serial No details after delivery from **second** company
        self.assertEqual(sn_doc.status, "Delivered")
        self.assertEqual(sn_doc.company, "_Test Company 1")
        self.assertEqual(sn_doc.warehouse, None)
        self.assertEqual(sn_doc.delivery_document_no, dn_2.name)

        # cannot cancel any intermediate document before last Delivery Note
        self.assertRaises(frappe.ValidationError, se.cancel)
        self.assertRaises(frappe.ValidationError, dn.cancel)
        self.assertRaises(frappe.ValidationError, pr.cancel)
Exemplo n.º 39
0
    def test_inter_company_transfer_fallback_on_cancel(self):
        """
			Test Serial No state changes on cancellation.
			If Delivery cancelled, it should fall back on last Receipt in the same company.
			If Receipt is cancelled, it should be Inactive in the same company.
		"""
        # Receipt in **first** company
        se = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
        serial_nos = get_serial_nos(se.get("items")[0].serial_no)
        sn_doc = frappe.get_doc("Serial No", serial_nos[0])

        # Delivery from first company
        dn = create_delivery_note(
            item_code="_Test Serialized Item With Series",
            qty=1,
            serial_no=serial_nos[0])

        # Receipt in **second** company
        wh = create_warehouse("_Test Warehouse", company="_Test Company 1")
        pr = make_purchase_receipt(
            item_code="_Test Serialized Item With Series",
            qty=1,
            serial_no=serial_nos[0],
            company="_Test Company 1",
            warehouse=wh)

        # Delivery from second company
        dn_2 = create_delivery_note(
            item_code="_Test Serialized Item With Series",
            qty=1,
            serial_no=serial_nos[0],
            company="_Test Company 1",
            warehouse=wh)
        sn_doc.reload()

        self.assertEqual(sn_doc.status, "Delivered")
        self.assertEqual(sn_doc.company, "_Test Company 1")
        self.assertEqual(sn_doc.delivery_document_no, dn_2.name)

        dn_2.cancel()
        sn_doc.reload()
        # Fallback on Purchase Receipt if Delivery is cancelled
        self.assertEqual(sn_doc.status, "Active")
        self.assertEqual(sn_doc.company, "_Test Company 1")
        self.assertEqual(sn_doc.warehouse, wh)
        self.assertEqual(sn_doc.purchase_document_no, pr.name)

        pr.cancel()
        sn_doc.reload()
        # Inactive in same company if Receipt cancelled
        self.assertEqual(sn_doc.status, "Inactive")
        self.assertEqual(sn_doc.company, "_Test Company 1")
        self.assertEqual(sn_doc.warehouse, None)

        dn.cancel()
        sn_doc.reload()
        # Fallback on Purchase Receipt in FIRST company if
        # Delivery from FIRST company is cancelled
        self.assertEqual(sn_doc.status, "Active")
        self.assertEqual(sn_doc.company, "_Test Company")
        self.assertEqual(sn_doc.warehouse, "_Test Warehouse - _TC")
        self.assertEqual(sn_doc.purchase_document_no, se.name)
Exemplo n.º 40
0
    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`")