Example #1
0
    def test_job_card_partial_material_transfer(self):
        "Test partial material transfer against Job Card"
        self.transfer_material_against = "Job Card"
        self.source_warehouse = "Stores - _TC"

        self.generate_required_stock(self.work_order)

        job_card = frappe.get_last_doc("Job Card",
                                       {"work_order": self.work_order.name})

        # partially transfer
        transfer_entry = make_stock_entry_from_jc(job_card.name)
        transfer_entry.fg_completed_qty = 1
        transfer_entry.get_items()
        transfer_entry.insert()
        transfer_entry.submit()

        job_card.reload()
        self.assertEqual(job_card.transferred_qty, 1)
        self.assertEqual(transfer_entry.items[0].qty, 5)
        self.assertEqual(transfer_entry.items[1].qty, 3)

        # transfer remaining
        transfer_entry_2 = make_stock_entry_from_jc(job_card.name)

        self.assertEqual(transfer_entry_2.fg_completed_qty, 1)
        self.assertEqual(transfer_entry_2.items[0].qty, 5)
        self.assertEqual(transfer_entry_2.items[1].qty, 3)

        transfer_entry_2.insert()
        transfer_entry_2.submit()

        job_card.reload()
        self.assertEqual(job_card.transferred_qty, 2)
Example #2
0
    def test_job_card_multiple_materials_transfer(self):
        "Test transferring RMs separately against Job Card with multiple RMs."
        self.transfer_material_against = "Job Card"
        self.source_warehouse = "Stores - _TC"

        self.generate_required_stock(self.work_order)

        job_card_name = frappe.db.get_value(
            "Job Card", {"work_order": self.work_order.name})
        job_card = frappe.get_doc("Job Card", job_card_name)

        transfer_entry_1 = make_stock_entry_from_jc(job_card_name)
        del transfer_entry_1.items[1]  # transfer only 1 of 2 RMs
        transfer_entry_1.insert()
        transfer_entry_1.submit()

        job_card.reload()

        self.assertEqual(transfer_entry_1.fg_completed_qty, 2)
        self.assertEqual(job_card.transferred_qty, 2)

        # transfer second RM
        transfer_entry_2 = make_stock_entry_from_jc(job_card_name)
        del transfer_entry_2.items[0]
        transfer_entry_2.insert()
        transfer_entry_2.submit()

        # 'For Quantity' here will be 0 since
        # transfer was made for 2 fg qty in first transfer Stock Entry
        self.assertEqual(transfer_entry_2.fg_completed_qty, 0)
Example #3
0
    def test_job_card_multiple_materials_transfer(self):
        "Test transferring RMs separately against Job Card with multiple RMs."
        make_stock_entry(item_code="_Test Item",
                         target="Stores - _TC",
                         qty=10,
                         basic_rate=100)
        make_stock_entry(item_code="_Test Item Home Desktop Manufactured",
                         target="Stores - _TC",
                         qty=6,
                         basic_rate=100)

        job_card_name = frappe.db.get_value(
            "Job Card", {'work_order': self.work_order.name})
        job_card = frappe.get_doc("Job Card", job_card_name)

        transfer_entry_1 = make_stock_entry_from_jc(job_card_name)
        del transfer_entry_1.items[1]  # transfer only 1 of 2 RMs
        transfer_entry_1.insert()
        transfer_entry_1.submit()

        job_card.reload()

        self.assertEqual(transfer_entry_1.fg_completed_qty, 2)
        self.assertEqual(job_card.transferred_qty, 2)

        # transfer second RM
        transfer_entry_2 = make_stock_entry_from_jc(job_card_name)
        del transfer_entry_2.items[0]
        transfer_entry_2.insert()
        transfer_entry_2.submit()

        # 'For Quantity' here will be 0 since
        # transfer was made for 2 fg qty in first transfer Stock Entry
        self.assertEqual(transfer_entry_2.fg_completed_qty, 0)
Example #4
0
    def test_job_card_excess_material_transfer(self):
        "Test transferring more than required RM against Job Card."
        make_stock_entry(item_code="_Test Item",
                         target="Stores - _TC",
                         qty=25,
                         basic_rate=100)
        make_stock_entry(item_code="_Test Item Home Desktop Manufactured",
                         target="Stores - _TC",
                         qty=15,
                         basic_rate=100)

        job_card_name = frappe.db.get_value(
            "Job Card", {"work_order": self.work_order.name})
        job_card = frappe.get_doc("Job Card", job_card_name)
        self.assertEqual(job_card.status, "Open")

        # fully transfer both RMs
        transfer_entry_1 = make_stock_entry_from_jc(job_card_name)
        transfer_entry_1.insert()
        transfer_entry_1.submit()

        # transfer extra qty of both RM due to previously damaged RM
        transfer_entry_2 = make_stock_entry_from_jc(job_card_name)
        # deliberately change 'For Quantity'
        transfer_entry_2.fg_completed_qty = 1
        transfer_entry_2.items[0].qty = 5
        transfer_entry_2.items[1].qty = 3
        transfer_entry_2.insert()
        transfer_entry_2.submit()

        job_card.reload()
        self.assertGreater(job_card.transferred_qty, job_card.for_quantity)

        # Check if 'For Quantity' is negative
        # as 'transferred_qty' > Qty to Manufacture
        transfer_entry_3 = make_stock_entry_from_jc(job_card_name)
        self.assertEqual(transfer_entry_3.fg_completed_qty, 0)

        job_card.append(
            "time_logs",
            {
                "from_time": "2021-01-01 00:01:00",
                "to_time": "2021-01-01 06:00:00",
                "completed_qty": 2
            },
        )
        job_card.save()
        job_card.submit()

        # JC is Completed with excess transfer
        self.assertEqual(job_card.status, "Completed")
Example #5
0
    def test_job_card_material_transfer_correctness(self):
        """
		1. Test if only current Job Card Items are pulled in a Stock Entry against a Job Card
		2. Test impact of changing 'For Qty' in such a Stock Entry
		"""
        create_bom_with_multiple_operations()
        work_order = make_wo_with_transfer_against_jc()

        job_card_name = frappe.db.get_value("Job Card", {
            "work_order": work_order.name,
            "operation": "Test Operation A"
        })
        job_card = frappe.get_doc("Job Card", job_card_name)

        self.assertEqual(len(job_card.items), 1)
        self.assertEqual(job_card.items[0].item_code, "_Test Item")

        # check if right items are mapped in transfer entry
        transfer_entry = make_stock_entry_from_jc(job_card_name)
        transfer_entry.insert()

        self.assertEqual(len(transfer_entry.items), 1)
        self.assertEqual(transfer_entry.items[0].item_code, "_Test Item")
        self.assertEqual(transfer_entry.items[0].qty, 4)

        # change 'For Qty' and check impact on items table
        # no.of items should be the same with qty change
        transfer_entry.fg_completed_qty = 2
        transfer_entry.get_items()

        self.assertEqual(len(transfer_entry.items), 1)
        self.assertEqual(transfer_entry.items[0].item_code, "_Test Item")
        self.assertEqual(transfer_entry.items[0].qty, 2)
Example #6
0
    def test_job_card_partial_material_transfer(self):
        "Test partial material transfer against Job Card"

        make_stock_entry(item_code="_Test Item",
                         target="Stores - _TC",
                         qty=25,
                         basic_rate=100)
        make_stock_entry(item_code="_Test Item Home Desktop Manufactured",
                         target="Stores - _TC",
                         qty=15,
                         basic_rate=100)

        job_card_name = frappe.db.get_value(
            "Job Card", {"work_order": self.work_order.name})
        job_card = frappe.get_doc("Job Card", job_card_name)

        # partially transfer
        transfer_entry = make_stock_entry_from_jc(job_card_name)
        transfer_entry.fg_completed_qty = 1
        transfer_entry.get_items()
        transfer_entry.insert()
        transfer_entry.submit()

        job_card.reload()
        self.assertEqual(job_card.transferred_qty, 1)
        self.assertEqual(transfer_entry.items[0].qty, 5)
        self.assertEqual(transfer_entry.items[1].qty, 3)

        # transfer remaining
        transfer_entry_2 = make_stock_entry_from_jc(job_card_name)

        self.assertEqual(transfer_entry_2.fg_completed_qty, 1)
        self.assertEqual(transfer_entry_2.items[0].qty, 5)
        self.assertEqual(transfer_entry_2.items[1].qty, 3)

        transfer_entry_2.insert()
        transfer_entry_2.submit()

        job_card.reload()
        self.assertEqual(job_card.transferred_qty, 2)
Example #7
0
    def test_job_card_excess_material_transfer_block(self):

        self.transfer_material_against = "Job Card"
        self.source_warehouse = "Stores - _TC"

        self.generate_required_stock(self.work_order)

        job_card_name = frappe.db.get_value(
            "Job Card", {"work_order": self.work_order.name})

        # fully transfer both RMs
        transfer_entry_1 = make_stock_entry_from_jc(job_card_name)
        transfer_entry_1.insert()
        transfer_entry_1.submit()

        # transfer extra qty of both RM due to previously damaged RM
        transfer_entry_2 = make_stock_entry_from_jc(job_card_name)
        # deliberately change 'For Quantity'
        transfer_entry_2.fg_completed_qty = 1
        transfer_entry_2.items[0].qty = 5
        transfer_entry_2.items[1].qty = 3
        transfer_entry_2.insert()
        self.assertRaises(JobCardOverTransferError, transfer_entry_2.submit)