blob: 304576aca932d2b1c2b09dc90ebe8518873f3f51 [file] [log] [blame]
Rushabh Mehtadc8067e2016-06-29 18:38:32 +05301# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2# License: GNU General Public License v3. See license.txt
3
4from __future__ import unicode_literals
5
6import frappe, random
Saurabh90c0b7f2016-07-22 14:15:03 +05307from frappe.utils import flt
Rushabh Mehtadc8067e2016-06-29 18:38:32 +05308from frappe.utils.make_random import add_random_children, get_random
9from erpnext.setup.utils import get_exchange_rate
10from erpnext.accounts.party import get_party_account_currency
Saurabh90c0b7f2016-07-22 14:15:03 +053011from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request, make_payment_entry
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053012
13def work():
14 frappe.set_user(frappe.db.get_global('demo_sales_user_2'))
Zlash65dcf74012018-09-27 18:51:18 +053015
16 for i in range(random.randint(1,7)):
17 if random.random() < 0.5:
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053018 make_opportunity()
19
Zlash65dcf74012018-09-27 18:51:18 +053020 for i in range(random.randint(1,3)):
21 if random.random() < 0.5:
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053022 make_quotation()
23
24 # lost quotations / inquiries
25 if random.random() < 0.3:
Achilles Rasquinha96698c92018-02-28 16:12:51 +053026 for i in range(random.randint(1,3)):
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053027 quotation = get_random('Quotation', doc=True)
28 if quotation and quotation.status == 'Submitted':
29 quotation.declare_order_lost('Did not ask')
30
Achilles Rasquinha96698c92018-02-28 16:12:51 +053031 for i in range(random.randint(1,3)):
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053032 opportunity = get_random('Opportunity', doc=True)
33 if opportunity and opportunity.status in ('Open', 'Replied'):
34 opportunity.declare_enquiry_lost('Did not ask')
35
Zlash65dcf74012018-09-27 18:51:18 +053036 for i in range(random.randint(1,3)):
37 if random.random() < 0.3:
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053038 make_sales_order()
39
Zlash65dcf74012018-09-27 18:51:18 +053040 if random.random() < 0.5:
Saurabh90c0b7f2016-07-22 14:15:03 +053041 #make payment request against Sales Order
42 sales_order_name = get_random("Sales Order", filters={"docstatus": 1})
43 if sales_order_name:
44 so = frappe.get_doc("Sales Order", sales_order_name)
Saurabh6e0a00b2016-07-22 15:17:17 +053045 if flt(so.per_billed) != 100:
Saurabh90c0b7f2016-07-22 14:15:03 +053046 payment_request = make_payment_request(dt="Sales Order", dn=so.name, recipient_id=so.contact_email,
47 submit_doc=True, mute_email=True, use_dummy_message=True)
48
Saurabh6e0a00b2016-07-22 15:17:17 +053049 payment_entry = frappe.get_doc(make_payment_entry(payment_request.name))
50 payment_entry.posting_date = frappe.flags.current_date
51 payment_entry.submit()
Saurabh90c0b7f2016-07-22 14:15:03 +053052
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053053def make_opportunity():
54 b = frappe.get_doc({
55 "doctype": "Opportunity",
56 "enquiry_from": "Customer",
57 "customer": get_random("Customer"),
Rushabh Mehtaa5ebebd2017-11-16 17:03:52 +053058 "opportunity_type": "Sales",
Rushabh Mehtae9d9b8e2016-12-15 11:27:35 +053059 "with_items": 1,
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053060 "transaction_date": frappe.flags.current_date,
61 })
62
63 add_random_children(b, "items", rows=4, randomize = {
64 "qty": (1, 5),
Rushabh Mehtae9d9b8e2016-12-15 11:27:35 +053065 "item_code": ("Item", {"has_variants": 0, "is_fixed_asset": 0})
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053066 }, unique="item_code")
67
68 b.insert()
69 frappe.db.commit()
70
71def make_quotation():
72 # get open opportunites
Rushabh Mehtae9d9b8e2016-12-15 11:27:35 +053073 opportunity = get_random("Opportunity", {"status": "Open", "with_items": 1})
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053074
75 if opportunity:
76 from erpnext.crm.doctype.opportunity.opportunity import make_quotation
77 qtn = frappe.get_doc(make_quotation(opportunity))
78 qtn.insert()
79 frappe.db.commit()
80 qtn.submit()
81 frappe.db.commit()
82 else:
83 # make new directly
84
85 # get customer, currency and exchange_rate
86 customer = get_random("Customer")
87
Rushabh Mehta708e47a2018-08-08 16:37:31 +053088 company_currency = frappe.get_cached_value('Company', "Wind Power LLC", "default_currency")
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053089 party_account_currency = get_party_account_currency("Customer", customer, "Wind Power LLC")
90 if company_currency == party_account_currency:
91 exchange_rate = 1
92 else:
Shreya3f778522018-05-15 16:59:20 +053093 exchange_rate = get_exchange_rate(party_account_currency, company_currency, args="for_selling")
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053094
95 qtn = frappe.get_doc({
96 "creation": frappe.flags.current_date,
97 "doctype": "Quotation",
98 "quotation_to": "Customer",
99 "customer": customer,
100 "currency": party_account_currency or company_currency,
101 "conversion_rate": exchange_rate,
102 "order_type": "Sales",
103 "transaction_date": frappe.flags.current_date,
104 })
105
106 add_random_children(qtn, "items", rows=3, randomize = {
107 "qty": (1, 5),
Nabin Hait26cad302016-07-21 10:28:54 +0530108 "item_code": ("Item", {"has_variants": "0", "is_fixed_asset": 0})
Rushabh Mehtadc8067e2016-06-29 18:38:32 +0530109 }, unique="item_code")
110
111 qtn.insert()
112 frappe.db.commit()
113 qtn.submit()
114 frappe.db.commit()
115
116def make_sales_order():
117 q = get_random("Quotation", {"status": "Submitted"})
118 if q:
Zlash65dcf74012018-09-27 18:51:18 +0530119 from erpnext.selling.doctype.quotation.quotation import make_sales_order as mso
120 so = frappe.get_doc(mso(q))
Rushabh Mehtadc8067e2016-06-29 18:38:32 +0530121 so.transaction_date = frappe.flags.current_date
Nabin Hait495ef672017-07-31 11:25:51 +0530122 so.delivery_date = frappe.utils.add_days(frappe.flags.current_date, 10)
Rushabh Mehtadc8067e2016-06-29 18:38:32 +0530123 so.insert()
124 frappe.db.commit()
125 so.submit()
126 frappe.db.commit()