예제 #1
0
	def complete(self):
		if self.consume_stock and self.items:
			create_stock_entry(self)
		dataent.db.set_value("Clinical Procedure", self.name, "status", 'Completed')

		if self.items:
			consumable_total_amount = 0
			consumption_details = False
			for item in self.items:
				if item.invoice_separately_as_consumables:
					price_list, price_list_currency = dataent.db.get_values("Price List", {"selling": 1}, ['name', 'currency'])[0]
					args = {
						'doctype': "Sales Invoice",
						'item_code': item.item_code,
						'company': self.company,
						'warehouse': self.warehouse,
						'customer': dataent.db.get_value("Patient", self.patient, "customer"),
						'selling_price_list': price_list,
						'price_list_currency': price_list_currency,
						'plc_conversion_rate': 1.0,
						'conversion_rate': 1.0
					}
					item_details = get_item_details(args)
					item_price = item_details.price_list_rate * item.transfer_qty
					item_consumption_details = item_details.item_name+"\t"+str(item.qty)+" "+item.uom+"\t"+str(item_price)
					consumable_total_amount += item_price
					if not consumption_details:
						consumption_details = "Clinical Procedure ("+self.name+"):\n\t"+item_consumption_details
					else:
						consumption_details += "\n\t"+item_consumption_details
			if consumable_total_amount > 0:
				dataent.db.set_value("Clinical Procedure", self.name, "consumable_total_amount", consumable_total_amount)
				dataent.db.set_value("Clinical Procedure", self.name, "consumption_details", consumption_details)
예제 #2
0
def get_items_from_product_bundle(args):
	args = json.loads(args)
	items = []
	bundled_items = get_product_bundle_items(args["item_code"])
	for item in bundled_items:
		args.update({
			"item_code": item.item_code,
			"qty": flt(args["quantity"]) * flt(item.qty)
		})
		items.append(get_item_details(args))
		
	return items
예제 #3
0
파일: test_item.py 프로젝트: dataent/epaas
    def test_get_item_details(self):
        # delete modified item price record and make as per test_records
        dataent.db.sql("""delete from `tabItem Price`""")

        to_check = {
            "item_code": "_Test Item",
            "item_name": "_Test Item",
            "description": "_Test Item 1",
            "warehouse": "_Test Warehouse - _TC",
            "income_account": "Sales - _TC",
            "expense_account": "_Test Account Cost for Goods Sold - _TC",
            "cost_center": "_Test Cost Center - _TC",
            "qty": 1.0,
            "price_list_rate": 100.0,
            "base_price_list_rate": 0.0,
            "discount_percentage": 0.0,
            "rate": 0.0,
            "base_rate": 0.0,
            "amount": 0.0,
            "base_amount": 0.0,
            "batch_no": None,
            "item_tax_rate": '{}',
            "uom": "_Test UOM",
            "conversion_factor": 1.0,
        }

        make_test_objects("Item Price")

        details = get_item_details({
            "item_code": "_Test Item",
            "company": "_Test Company",
            "price_list": "_Test Price List",
            "currency": "_Test Currency",
            "doctype": "Sales Order",
            "conversion_rate": 1,
            "price_list_currency": "_Test Currency",
            "plc_conversion_rate": 1,
            "order_type": "Sales",
            "customer": "_Test Customer",
            "conversion_factor": 1,
            "price_list_uom_dependant": 1,
            "ignore_pricing_rule": 1
        })

        for key, value in iteritems(to_check):
            self.assertEqual(value, details.get(key))
예제 #4
0
    def test_pricing_rule_for_margin(self):
        test_record = {
            "doctype": "Pricing Rule",
            "title": "_Test Pricing Rule",
            "apply_on": "Item Code",
            "item_code": "_Test FG Item 2",
            "selling": 1,
            "currency": "USD",
            "rate_or_discount": "Discount Percentage",
            "rate": 0,
            "margin_type": "Percentage",
            "margin_rate_or_amount": 10,
            "company": "_Test Company"
        }
        dataent.get_doc(test_record.copy()).insert()

        item_price = dataent.get_doc({
            "doctype": "Item Price",
            "price_list": "_Test Price List 2",
            "item_code": "_Test FG Item 2",
            "price_list_rate": 100
        })

        item_price.insert(ignore_permissions=True)

        args = dataent._dict({
            "item_code": "_Test FG Item 2",
            "company": "_Test Company",
            "price_list": "_Test Price List",
            "currency": "_Test Currency",
            "doctype": "Sales Order",
            "conversion_rate": 1,
            "price_list_currency": "_Test Currency",
            "plc_conversion_rate": 1,
            "order_type": "Sales",
            "customer": "_Test Customer",
            "name": None
        })
        details = get_item_details(args)
        self.assertEquals(details.get("margin_type"), "Percentage")
        self.assertEquals(details.get("margin_rate_or_amount"), 10)
예제 #5
0
    def test_pricing_rule_for_discount(self):
        test_record = {
            "doctype": "Pricing Rule",
            "title": "_Test Pricing Rule",
            "apply_on": "Item Code",
            "item_code": "_Test Item",
            "currency": "USD",
            "selling": 1,
            "rate_or_discount": "Discount Percentage",
            "rate": 0,
            "discount_percentage": 10,
            "company": "_Test Company"
        }
        dataent.get_doc(test_record.copy()).insert()

        args = dataent._dict({
            "item_code": "_Test Item",
            "company": "_Test Company",
            "price_list": "_Test Price List",
            "currency": "_Test Currency",
            "doctype": "Sales Order",
            "conversion_rate": 1,
            "price_list_currency": "_Test Currency",
            "plc_conversion_rate": 1,
            "order_type": "Sales",
            "customer": "_Test Customer",
            "name": None
        })
        details = get_item_details(args)
        self.assertEqual(details.get("discount_percentage"), 10)

        prule = dataent.get_doc(test_record.copy())
        prule.applicable_for = "Customer"
        prule.title = "_Test Pricing Rule for Customer"
        self.assertRaises(MandatoryError, prule.insert)

        prule.customer = "_Test Customer"
        prule.discount_percentage = 20
        prule.insert()
        details = get_item_details(args)
        self.assertEqual(details.get("discount_percentage"), 20)

        prule = dataent.get_doc(test_record.copy())
        prule.apply_on = "Item Group"
        prule.item_group = "All Item Groups"
        prule.title = "_Test Pricing Rule for Item Group"
        prule.discount_percentage = 15
        prule.insert()

        args.customer = "_Test Customer 1"
        details = get_item_details(args)
        self.assertEqual(details.get("discount_percentage"), 10)

        prule = dataent.get_doc(test_record.copy())
        prule.applicable_for = "Campaign"
        prule.campaign = "_Test Campaign"
        prule.title = "_Test Pricing Rule for Campaign"
        prule.discount_percentage = 5
        prule.priority = 8
        prule.insert()

        args.campaign = "_Test Campaign"
        details = get_item_details(args)
        self.assertEqual(details.get("discount_percentage"), 5)

        dataent.db.sql(
            "update `tabPricing Rule` set priority=NULL where campaign='_Test Campaign'"
        )
        from epaas.accounts.doctype.pricing_rule.pricing_rule import MultiplePricingRuleConflict
        self.assertRaises(MultiplePricingRuleConflict, get_item_details, args)

        args.item_code = "_Test Item 2"
        details = get_item_details(args)
        self.assertEquals(details.get("discount_percentage"), 15)
예제 #6
0
    def test_pricing_rule_for_variants(self):
        if not dataent.db.exists("Item", "Test Variant PRT"):
            dataent.get_doc({
                "doctype":
                "Item",
                "item_code":
                "Test Variant PRT",
                "item_name":
                "Test Variant PRT",
                "description":
                "Test Variant PRT",
                "item_group":
                "_Test Item Group",
                "is_stock_item":
                1,
                "variant_of":
                "_Test Variant Item",
                "default_warehouse":
                "_Test Warehouse - _TC",
                "stock_uom":
                "_Test UOM",
                "attributes": [{
                    "attribute": "Test Size",
                    "attribute_value": "Medium"
                }],
            }).insert()

        dataent.get_doc({
            "doctype": "Pricing Rule",
            "title": "_Test Pricing Rule 1",
            "apply_on": "Item Code",
            "currency": "USD",
            "item_code": "_Test Variant Item",
            "selling": 1,
            "rate_or_discount": "Discount Percentage",
            "rate": 0,
            "discount_percentage": 7.5,
            "company": "_Test Company"
        }).insert()

        args = dataent._dict({
            "item_code": "Test Variant PRT",
            "company": "_Test Company",
            "price_list": "_Test Price List",
            "currency": "_Test Currency",
            "doctype": "Sales Order",
            "conversion_rate": 1,
            "price_list_currency": "_Test Currency",
            "plc_conversion_rate": 1,
            "order_type": "Sales",
            "customer": "_Test Customer",
            "name": None
        })

        details = get_item_details(args)
        self.assertEqual(details.get("discount_percentage"), 7.5)

        # add a new pricing rule for that item code, it should take priority
        dataent.get_doc({
            "doctype": "Pricing Rule",
            "title": "_Test Pricing Rule 2",
            "apply_on": "Item Code",
            "item_code": "Test Variant PRT",
            "currency": "USD",
            "selling": 1,
            "rate_or_discount": "Discount Percentage",
            "rate": 0,
            "discount_percentage": 17.5,
            "company": "_Test Company"
        }).insert()

        details = get_item_details(args)
        self.assertEqual(details.get("discount_percentage"), 17.5)