def test_qa_not_submit(self):
        dn = create_delivery_note(item_code="_Test Item with QA",
                                  do_not_submit=True)
        qa = create_quality_inspection(reference_type="Delivery Note",
                                       reference_name=dn.name,
                                       do_not_submit=True)
        dn.items[0].quality_inspection = qa.name
        self.assertRaises(QualityInspectionNotSubmittedError, dn.submit)

        qa.delete()
        dn.delete()
Beispiel #2
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")
    def test_formula_based_qi_readings(self):
        dn = create_delivery_note(item_code="_Test Item with QA",
                                  do_not_submit=True)
        readings = [
            {
                "specification": "Iron Content",
                "acceptance_formula": "reading_1 > 0.35 and reading_1 < 0.50",
                "reading_1": 0.4
            },
            {
                "specification": "Calcium Content",
                "acceptance_formula": "reading_1 > 0.20 and reading_1 < 0.50",
                "reading_1": 0.7
            },
            {
                "specification": "Mg Content",
                "acceptance_formula":
                "(reading_1 + reading_2 + reading_3) / 3 < 0.9",
                "reading_1": 0.5,
                "reading_2": 0.7,
                "reading_3":
                "random text"  # check if random string input causes issues
            }
        ]

        qa = create_quality_inspection(reference_type="Delivery Note",
                                       reference_name=dn.name,
                                       readings=readings,
                                       do_not_save=True)
        qa.save()

        # status must be auto set as per formula
        self.assertEqual(qa.readings[0].status, "Accepted")
        self.assertEqual(qa.readings[1].status, "Rejected")
        self.assertEqual(qa.readings[2].status, "Accepted")

        qa.delete()
        dn.delete()
Beispiel #4
0
	def test_customer_credit_limit(self):
		from erpbee.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
		from erpbee.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
		from erpbee.selling.doctype.sales_order.test_sales_order import make_sales_order
		from erpbee.selling.doctype.sales_order.sales_order import make_sales_invoice

		outstanding_amt = self.get_customer_outstanding_amount()
		credit_limit = get_credit_limit('_Test Customer', '_Test Company')

		if outstanding_amt <= 0.0:
			item_qty = int((abs(outstanding_amt) + 200)/100)
			make_sales_order(qty=item_qty)

		if not credit_limit:
			set_credit_limit('_Test Customer', '_Test Company', outstanding_amt - 50)

		# Sales Order
		so = make_sales_order(do_not_submit=True)
		self.assertRaises(frappe.ValidationError, so.submit)

		# Delivery Note
		dn = create_delivery_note(do_not_submit=True)
		self.assertRaises(frappe.ValidationError, dn.submit)

		# Sales Invoice
		si = create_sales_invoice(do_not_submit=True)
		self.assertRaises(frappe.ValidationError, si.submit)

		if credit_limit > outstanding_amt:
			set_credit_limit('_Test Customer', '_Test Company', credit_limit)

		# Makes Sales invoice from Sales Order
		so.save(ignore_permissions=True)
		si = make_sales_invoice(so.name)
		si.save(ignore_permissions=True)
		self.assertRaises(frappe.ValidationError, make_sales_order)
    def test_qa_for_delivery(self):
        make_stock_entry(item_code="_Test Item with QA",
                         target="_Test Warehouse - _TC",
                         qty=1,
                         basic_rate=100)
        dn = create_delivery_note(item_code="_Test Item with QA",
                                  do_not_submit=True)

        self.assertRaises(QualityInspectionRequiredError, dn.submit)

        qa = create_quality_inspection(reference_type="Delivery Note",
                                       reference_name=dn.name,
                                       status="Rejected")
        dn.reload()
        self.assertRaises(QualityInspectionRejectedError, dn.submit)

        frappe.db.set_value("Quality Inspection Reading", {"parent": qa.name},
                            "status", "Accepted")
        dn.reload()
        dn.submit()

        qa.cancel()
        dn.reload()
        dn.cancel()
Beispiel #6
0
    def test_reposting_of_sales_return_for_packed_item(self):
        company = "_Test Company"
        packed_item_code = "_Test Item for Reposting"
        bundled_item = "_Test Bundled Item for Reposting"
        create_product_bundle_item(bundled_item, [[packed_item_code, 4]])

        # Purchase Return: Qty = 50, Rate = 100
        pr = make_purchase_receipt(company=company,
                                   posting_date='2020-04-10',
                                   warehouse="Stores - _TC",
                                   item_code=packed_item_code,
                                   qty=50,
                                   rate=100)

        #Delivery Note: Qty = 5, Rate = 150
        dn = create_delivery_note(item_code=bundled_item,
                                  qty=5,
                                  rate=150,
                                  warehouse="Stores - _TC",
                                  company=company,
                                  expense_account="Cost of Goods Sold - _TC",
                                  cost_center="Main - _TC")

        # check outgoing_rate for DN
        outgoing_rate = abs(
            frappe.db.get_value("Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name
            }, "stock_value_difference") / 20)

        self.assertEqual(dn.packed_items[0].incoming_rate, 100)
        self.assertEqual(outgoing_rate, 100)

        # Return Entry: Qty = -2, Rate = 150
        return_dn = create_delivery_note(
            is_return=1,
            return_against=dn.name,
            item_code=bundled_item,
            qty=-2,
            rate=150,
            company=company,
            warehouse="Stores - _TC",
            expense_account="Cost of Goods Sold - _TC",
            cost_center="Main - _TC")

        # check incoming rate for Return entry
        incoming_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": return_dn.name
            }, ["incoming_rate", "stock_value_difference"])

        self.assertEqual(return_dn.packed_items[0].incoming_rate, 100)
        self.assertEqual(incoming_rate, 100)
        self.assertEqual(stock_value_difference, 800)

        #-------------------------------

        # Landed Cost Voucher to update the rate of incoming Purchase Return: Additional cost = 50
        lcv = create_landed_cost_voucher("Purchase Receipt", pr.name,
                                         pr.company)

        # check outgoing_rate for DN after reposting
        outgoing_rate = abs(
            frappe.db.get_value("Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name
            }, "stock_value_difference") / 20)
        self.assertEqual(outgoing_rate, 101)

        dn.reload()
        self.assertEqual(dn.packed_items[0].incoming_rate, 101)

        # check incoming rate for Return entry after reposting
        incoming_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": return_dn.name
            }, ["incoming_rate", "stock_value_difference"])

        self.assertEqual(incoming_rate, 101)
        self.assertEqual(stock_value_difference, 808)

        return_dn.reload()
        self.assertEqual(return_dn.packed_items[0].incoming_rate, 101)

        # Cleanup data
        return_dn.cancel()
        dn.cancel()
        lcv.cancel()
        pr.cancel()