Esempio n. 1
0
 def test_pending_and_received_qty(self):
     po = create_purchase_order(item_code='_Test FG Item',
                                is_subcontracted='Yes')
     transfer_param = []
     make_stock_entry(item_code='_Test Item',
                      target='_Test Warehouse 1 - _TC',
                      qty=100,
                      basic_rate=100)
     make_stock_entry(item_code='_Test Item Home Desktop 100',
                      target='_Test Warehouse 1 - _TC',
                      qty=100,
                      basic_rate=100)
     make_purchase_receipt_against_po(po.name)
     po.reload()
     col, data = execute(filters=frappe._dict({
         'supplier':
         po.supplier,
         'from_date':
         frappe.utils.get_datetime(
             frappe.utils.add_to_date(po.transaction_date, days=-10)),
         'to_date':
         frappe.utils.get_datetime(
             frappe.utils.add_to_date(po.transaction_date, days=10))
     }))
     self.assertEqual(data[0]['pending_qty'], 5)
     self.assertEqual(data[0]['received_qty'], 5)
     self.assertEqual(data[0]['purchase_order'], po.name)
     self.assertEqual(data[0]['supplier'], po.supplier)
Esempio n. 2
0
    def test_pending_and_received_qty(self):
        po = create_purchase_order(item_code='_Test FG Item',
                                   is_subcontracted='Yes')
        make_stock_entry(item_code='_Test Item',
                         target='_Test Warehouse 1 - _TC',
                         qty=100,
                         basic_rate=100)
        make_stock_entry(item_code='_Test Item Home Desktop 100',
                         target='_Test Warehouse 1 - _TC',
                         qty=100,
                         basic_rate=100)
        transfer_subcontracted_raw_materials(po.name)
        col, data = execute(filters=frappe._dict({
            'supplier':
            po.supplier,
            'from_date':
            frappe.utils.get_datetime(
                frappe.utils.add_to_date(po.transaction_date, days=-10)),
            'to_date':
            frappe.utils.get_datetime(
                frappe.utils.add_to_date(po.transaction_date, days=10))
        }))
        self.assertEqual(data[0]['purchase_order'], po.name)
        self.assertIn(data[0]['rm_item_code'],
                      ['_Test Item', '_Test Item Home Desktop 100'])
        self.assertIn(data[0]['p_qty'], [9, 18])
        self.assertIn(data[0]['t_qty'], [1, 2])

        self.assertEqual(data[1]['purchase_order'], po.name)
        self.assertIn(data[1]['rm_item_code'],
                      ['_Test Item', '_Test Item Home Desktop 100'])
        self.assertIn(data[1]['p_qty'], [9, 18])
        self.assertIn(data[1]['t_qty'], [1, 2])
Esempio n. 3
0
    def test_supplier_disabled(self):
        make_test_records("Item")

        frappe.db.set_value("Supplier", "_Test Supplier", "disabled", 1)

        from erpbee.buying.doctype.purchase_order.test_purchase_order import create_purchase_order

        po = create_purchase_order(do_not_save=True)

        self.assertRaises(PartyDisabled, po.save)

        frappe.db.set_value("Supplier", "_Test Supplier", "disabled", 0)

        po.save()
Esempio n. 4
0
	def test_monthly_budget_crossed_for_po(self):
		budget = make_budget(applicable_on_purchase_order=1,
			action_if_accumulated_monthly_budget_exceeded_on_po="Stop", budget_against="Cost Center")

		fiscal_year = get_fiscal_year(nowdate())[0]
		frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
		frappe.db.set_value("Budget", budget.name, "fiscal_year", fiscal_year)

		po = create_purchase_order(transaction_date=nowdate(), do_not_submit=True)

		po.set_missing_values()

		self.assertRaises(BudgetError, po.submit)

		budget.load_from_db()
		budget.cancel()
		po.cancel()
Esempio n. 5
0
    def test_alternative_item_for_subcontract_rm(self):
        create_stock_reconciliation(item_code='Alternate Item For A RW 1',
                                    warehouse='_Test Warehouse - _TC',
                                    qty=5,
                                    rate=2000)
        create_stock_reconciliation(item_code='Test FG A RW 2',
                                    warehouse='_Test Warehouse - _TC',
                                    qty=5,
                                    rate=2000)

        supplier_warehouse = "Test Supplier Warehouse - _TC"
        po = create_purchase_order(item="Test Finished Goods - A",
                                   is_subcontracted='Yes',
                                   qty=5,
                                   rate=3000,
                                   supplier_warehouse=supplier_warehouse)

        rm_item = [{
            "item_code": "Test Finished Goods - A",
            "rm_item_code": "Test FG A RW 1",
            "item_name": "Test FG A RW 1",
            "qty": 5,
            "warehouse": "_Test Warehouse - _TC",
            "rate": 2000,
            "amount": 10000,
            "stock_uom": "Nos"
        }, {
            "item_code": "Test Finished Goods - A",
            "rm_item_code": "Test FG A RW 2",
            "item_name": "Test FG A RW 2",
            "qty": 5,
            "warehouse": "_Test Warehouse - _TC",
            "rate": 2000,
            "amount": 10000,
            "stock_uom": "Nos"
        }]

        rm_item_string = json.dumps(rm_item)
        reserved_qty_for_sub_contract = frappe.db.get_value(
            'Bin', {
                'item_code': 'Test FG A RW 1',
                'warehouse': '_Test Warehouse - _TC'
            }, 'reserved_qty_for_sub_contract')

        se = frappe.get_doc(make_rm_stock_entry(po.name, rm_item_string))
        se.to_warehouse = supplier_warehouse
        se.insert()

        doc = frappe.get_doc('Stock Entry', se.name)
        for item in doc.items:
            if item.item_code == 'Test FG A RW 1':
                item.item_code = 'Alternate Item For A RW 1'
                item.item_name = 'Alternate Item For A RW 1'
                item.description = 'Alternate Item For A RW 1'
                item.original_item = 'Test FG A RW 1'

        doc.save()
        doc.submit()
        after_transfer_reserved_qty_for_sub_contract = frappe.db.get_value(
            'Bin', {
                'item_code': 'Test FG A RW 1',
                'warehouse': '_Test Warehouse - _TC'
            }, 'reserved_qty_for_sub_contract')

        self.assertEqual(after_transfer_reserved_qty_for_sub_contract,
                         flt(reserved_qty_for_sub_contract - 5))

        pr = make_purchase_receipt(po.name)
        pr.save()

        pr = frappe.get_doc('Purchase Receipt', pr.name)
        status = False
        for d in pr.supplied_items:
            if d.rm_item_code == 'Alternate Item For A RW 1':
                status = True

        self.assertEqual(status, True)
Esempio n. 6
0
    def test_subcontractor_sourced_item(self):
        item_code = "_Test Subcontracted FG Item 1"

        if not frappe.db.exists('Item', item_code):
            make_item(
                item_code, {
                    'is_stock_item': 1,
                    'is_sub_contracted_item': 1,
                    'stock_uom': 'Nos'
                })

        if not frappe.db.exists('Item', "Test Extra Item 1"):
            make_item("Test Extra Item 1", {
                'is_stock_item': 1,
                'stock_uom': 'Nos'
            })

        if not frappe.db.exists('Item', "Test Extra Item 2"):
            make_item("Test Extra Item 2", {
                'is_stock_item': 1,
                'stock_uom': 'Nos'
            })

        if not frappe.db.exists('Item', "Test Extra Item 3"):
            make_item("Test Extra Item 3", {
                'is_stock_item': 1,
                'stock_uom': 'Nos'
            })
        bom = frappe.get_doc({
            'doctype': 'BOM',
            'is_default': 1,
            'item': item_code,
            'currency': 'USD',
            'quantity': 1,
            'company': '_Test Company'
        })

        for item in ["Test Extra Item 1", "Test Extra Item 2"]:
            item_doc = frappe.get_doc('Item', item)

            bom.append(
                'items', {
                    'item_code': item,
                    'qty': 1,
                    'uom': item_doc.stock_uom,
                    'stock_uom': item_doc.stock_uom,
                    'rate': item_doc.valuation_rate
                })

        bom.append(
            'items', {
                'item_code': "Test Extra Item 3",
                'qty': 1,
                'uom': item_doc.stock_uom,
                'stock_uom': item_doc.stock_uom,
                'rate': 0,
                'sourced_by_supplier': 1
            })
        bom.insert(ignore_permissions=True)
        bom.update_cost()
        bom.submit()
        # test that sourced_by_supplier rate is zero even after updating cost
        self.assertEqual(bom.items[2].rate, 0)
        # test in Purchase Order sourced_by_supplier is not added to Supplied Item
        po = create_purchase_order(
            item_code=item_code,
            qty=1,
            is_subcontracted="Yes",
            supplier_warehouse="_Test Warehouse 1 - _TC")
        bom_items = sorted(
            [d.item_code for d in bom.items if d.sourced_by_supplier != 1])
        supplied_items = sorted([d.rm_item_code for d in po.supplied_items])
        self.assertEquals(bom_items, supplied_items)
Esempio n. 7
0
    def test_jv_against_purchase_order(self):
        from erpbee.buying.doctype.purchase_order.test_purchase_order import create_purchase_order

        purchase_order = create_purchase_order(do_not_save=True)
        base_jv = frappe.copy_doc(test_records[1])
        self.jv_against_voucher_testcase(base_jv, purchase_order)