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