def work(): frappe.set_user(frappe.db.get_global('demo_sales_user_2')) if random.random() < 0.5: for i in xrange(random.randint(1,7)): make_opportunity() if random.random() < 0.5: for i in xrange(random.randint(1,3)): make_quotation() # lost quotations / inquiries if random.random() < 0.3: for i in xrange(random.randint(1,3)): quotation = get_random('Quotation', doc=True) if quotation and quotation.status == 'Submitted': quotation.declare_order_lost('Did not ask') for i in xrange(random.randint(1,3)): opportunity = get_random('Opportunity', doc=True) if opportunity and opportunity.status in ('Open', 'Replied'): opportunity.declare_enquiry_lost('Did not ask') if random.random() < 0.3: for i in xrange(random.randint(1,3)): make_sales_order()
def run_sales(current_date): if can_make("Quotation"): for i in xrange(how_many("Quotation")): make_quotation(current_date) if can_make("Sales Order"): for i in xrange(how_many("Sales Order")): make_sales_order(current_date)
def test_create_quotation_with_margin(self): from erpnext.selling.doctype.quotation.quotation import make_sales_order from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note, make_sales_invoice total_margin = flt((1500 * 18.75) / 100 + 1500) test_records[0]["items"][0]["price_list_rate"] = 1500 test_records[0]["items"][0]["margin_type"] = "Percentage" test_records[0]["items"][0]["margin_rate_or_amount"] = 18.75 quotation = frappe.copy_doc(test_records[0]) quotation.insert() self.assertEquals(quotation.get("items")[0].rate, total_margin) self.assertRaises(frappe.ValidationError, make_sales_order, quotation.name) quotation.submit() sales_order = make_sales_order(quotation.name) sales_order.delivery_date = "2016-01-02" sales_order.naming_series = "_T-Quotation-" sales_order.transaction_date = "2016-01-01" sales_order.insert() self.assertEquals(quotation.get("items")[0].rate, total_margin) sales_order.submit() dn = make_delivery_note(sales_order.name) self.assertEquals(quotation.get("items")[0].rate, total_margin) dn.save() si = make_sales_invoice(sales_order.name) self.assertEquals(quotation.get("items")[0].rate, total_margin) si.save()
def work(): frappe.set_user(frappe.db.get_global("demo_sales_user_2")) if random.random() < 0.5: for i in xrange(random.randint(1, 7)): make_opportunity() if random.random() < 0.5: for i in xrange(random.randint(1, 3)): make_quotation() # lost quotations / inquiries if random.random() < 0.3: for i in xrange(random.randint(1, 3)): quotation = get_random("Quotation", doc=True) if quotation and quotation.status == "Submitted": quotation.declare_order_lost("Did not ask") for i in xrange(random.randint(1, 3)): opportunity = get_random("Opportunity", doc=True) if opportunity and opportunity.status in ("Open", "Replied"): opportunity.declare_enquiry_lost("Did not ask") if random.random() < 0.3: for i in xrange(random.randint(1, 3)): make_sales_order() if random.random() < 0.1: # make payment request against Sales Order sales_order_name = get_random("Sales Order", filters={"docstatus": 1}) if sales_order_name: so = frappe.get_doc("Sales Order", sales_order_name) if flt(so.per_billed) != 100: payment_request = make_payment_request( dt="Sales Order", dn=so.name, recipient_id=so.contact_email, submit_doc=True, mute_email=True, use_dummy_message=True, ) payment_entry = frappe.get_doc(make_payment_entry(payment_request.name)) payment_entry.posting_date = frappe.flags.current_date payment_entry.submit()
def make_sales_order(current_date): q = get_random("Quotation", {"status": "Submitted"}) if q: from erpnext.selling.doctype.quotation.quotation import make_sales_order so = frappe.get_doc(make_sales_order(q)) so.transaction_date = current_date so.delivery_date = frappe.utils.add_days(current_date, 10) so.insert() frappe.db.commit() so.submit() frappe.db.commit()
def test_make_sales_order_terms_not_copied(self): from erpnext.selling.doctype.quotation.quotation import make_sales_order quotation = frappe.copy_doc(test_records[0]) quotation.transaction_date = nowdate() quotation.valid_till = add_months(quotation.transaction_date, 1) quotation.insert() quotation.submit() sales_order = make_sales_order(quotation.name) self.assertFalse(sales_order.get('payment_schedule'))
def test_make_sales_order_with_different_currency(self): from erpnext.selling.doctype.quotation.quotation import make_sales_order quotation = frappe.copy_doc(test_records[0]) quotation.transaction_date = nowdate() quotation.valid_till = add_months(quotation.transaction_date, 1) quotation.insert() quotation.submit() sales_order = make_sales_order(quotation.name) sales_order.currency = "USD" sales_order.conversion_rate = 20.0 sales_order.delivery_date = "2019-01-01" sales_order.naming_series = "_T-Quotation-" sales_order.transaction_date = nowdate() sales_order.insert() self.assertEquals(sales_order.currency, "USD") self.assertNotEqual(sales_order.currency, quotation.currency)
def test_make_sales_order_with_terms(self): from erpnext.selling.doctype.quotation.quotation import make_sales_order quotation = frappe.copy_doc(test_records[0]) quotation.transaction_date = nowdate() quotation.valid_till = add_months(quotation.transaction_date, 1) quotation.update( {"payment_terms_template": "_Test Payment Term Template"} ) quotation.insert() self.assertRaises(frappe.ValidationError, make_sales_order, quotation.name) quotation.save() quotation.submit() self.assertEqual(quotation.payment_schedule[0].payment_amount, 8906.00) self.assertEqual(quotation.payment_schedule[0].due_date, quotation.transaction_date) self.assertEqual(quotation.payment_schedule[1].payment_amount, 8906.00) self.assertEqual(quotation.payment_schedule[1].due_date, add_days(quotation.transaction_date, 30)) sales_order = make_sales_order(quotation.name) self.assertEquals(sales_order.doctype, "Sales Order") self.assertEquals(len(sales_order.get("items")), 1) self.assertEquals(sales_order.get("items")[0].doctype, "Sales Order Item") self.assertEquals(sales_order.get("items")[0].prevdoc_docname, quotation.name) self.assertEquals(sales_order.customer, "_Test Customer") sales_order.delivery_date = "2014-01-01" sales_order.naming_series = "_T-Quotation-" sales_order.transaction_date = nowdate() sales_order.insert() self.assertEqual(sales_order.payment_schedule[0].payment_amount, 8906.00) self.assertEqual(sales_order.payment_schedule[0].due_date, quotation.transaction_date) self.assertEqual(sales_order.payment_schedule[1].payment_amount, 8906.00) self.assertEqual( sales_order.payment_schedule[1].due_date, add_days(quotation.transaction_date, 30) )
def test_make_sales_order(self): from erpnext.selling.doctype.quotation.quotation import make_sales_order quotation = frappe.copy_doc(test_records[0]) quotation.insert() self.assertRaises(frappe.ValidationError, make_sales_order, quotation.name) quotation.submit() sales_order = make_sales_order(quotation.name) self.assertEquals(sales_order.doctype, "Sales Order") self.assertEquals(len(sales_order.get("sales_order_details")), 1) self.assertEquals(sales_order.get("sales_order_details")[0].doctype, "Sales Order Item") self.assertEquals(sales_order.get("sales_order_details")[0].prevdoc_docname, quotation.name) self.assertEquals(sales_order.customer, "_Test Customer") sales_order.delivery_date = "2014-01-01" sales_order.naming_series = "_T-Quotation-" sales_order.transaction_date = "2013-05-12" sales_order.insert()
def test_make_sales_order(self): from erpnext.selling.doctype.quotation.quotation import make_sales_order quotation = frappe.copy_doc(test_records[0]) quotation.insert() self.assertRaises(frappe.ValidationError, make_sales_order, quotation.name) quotation.submit() sales_order = make_sales_order(quotation.name) self.assertEquals(sales_order.doctype, "Sales Order") self.assertEquals(len(sales_order.get("items")), 1) self.assertEquals(sales_order.get("items")[0].doctype, "Sales Order Item") self.assertEquals(sales_order.get("items")[0].prevdoc_docname, quotation.name) self.assertEquals(sales_order.customer, "_Test Customer") sales_order.delivery_date = "2014-01-01" sales_order.naming_series = "_T-Quotation-" sales_order.transaction_date = "2013-05-12" sales_order.insert()
def test_create_quotation_with_margin(self): from erpnext.selling.doctype.quotation.quotation import make_sales_order from erpnext.selling.doctype.sales_order.sales_order \ import make_delivery_note, make_sales_invoice rate_with_margin = flt((1500 * 18.75) / 100 + 1500) test_records[0]['items'][0]['price_list_rate'] = 1500 test_records[0]['items'][0]['margin_type'] = 'Percentage' test_records[0]['items'][0]['margin_rate_or_amount'] = 18.75 quotation = frappe.copy_doc(test_records[0]) quotation.transaction_date = nowdate() quotation.valid_till = add_months(quotation.transaction_date, 1) quotation.insert() self.assertEqual(quotation.get("items")[0].rate, rate_with_margin) self.assertRaises(frappe.ValidationError, make_sales_order, quotation.name) quotation.submit() sales_order = make_sales_order(quotation.name) sales_order.naming_series = "_T-Quotation-" sales_order.transaction_date = "2016-01-01" sales_order.delivery_date = "2016-01-02" sales_order.insert() self.assertEqual(quotation.get("items")[0].rate, rate_with_margin) sales_order.submit() dn = make_delivery_note(sales_order.name) self.assertEqual(quotation.get("items")[0].rate, rate_with_margin) dn.save() si = make_sales_invoice(sales_order.name) self.assertEqual(quotation.get("items")[0].rate, rate_with_margin) si.save()
def test_make_sales_order_with_terms(self): from erpnext.selling.doctype.quotation.quotation import make_sales_order quotation = frappe.copy_doc(test_records[0]) quotation.transaction_date = nowdate() quotation.valid_till = add_months(quotation.transaction_date, 1) quotation.update( {"payment_terms_template": "_Test Payment Term Template"} ) quotation.insert() self.assertRaises(frappe.ValidationError, make_sales_order, quotation.name) quotation.save() quotation.submit() self.assertEqual(quotation.payment_schedule[0].payment_amount, 8906.00) self.assertEqual(quotation.payment_schedule[0].due_date, quotation.transaction_date) self.assertEqual(quotation.payment_schedule[1].payment_amount, 8906.00) self.assertEqual(quotation.payment_schedule[1].due_date, add_days(quotation.transaction_date, 30)) sales_order = make_sales_order(quotation.name) self.assertEqual(sales_order.doctype, "Sales Order") self.assertEqual(len(sales_order.get("items")), 1) self.assertEqual(sales_order.get("items")[0].doctype, "Sales Order Item") self.assertEqual(sales_order.get("items")[0].prevdoc_docname, quotation.name) self.assertEqual(sales_order.customer, "_Test Customer") sales_order.delivery_date = "2014-01-01" sales_order.naming_series = "_T-Quotation-" sales_order.transaction_date = nowdate() sales_order.insert() self.assertEqual(sales_order.payment_schedule[0].payment_amount, 8906.00) self.assertEqual(sales_order.payment_schedule[0].due_date, quotation.transaction_date) self.assertEqual(sales_order.payment_schedule[1].payment_amount, 8906.00) self.assertEqual( sales_order.payment_schedule[1].due_date, add_days(quotation.transaction_date, 30) )