blob: 6206dfd2d038133becf70fb338a449c276b68056 [file] [log] [blame]
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +05301
2# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
3# License: GNU General Public License v3. See license.txt
4
5from __future__ import unicode_literals
6
Chinmay Paib5038962019-04-27 01:39:50 +05307import erpnext
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +05308import frappe
9import random
10from frappe.utils import random_string
11from frappe.desk import query_report
Nabin Hait26cad302016-07-21 10:28:54 +053012from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry_against_invoice
13from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
Saurabh90c0b7f2016-07-22 14:15:03 +053014from frappe.utils.make_random import get_random
15from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request, make_payment_entry
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +053016from erpnext.demo.user.sales import make_sales_order
17from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
18from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053019
20def work():
21 frappe.set_user(frappe.db.get_global('demo_accounts_user'))
22
Nabin Hait26cad302016-07-21 10:28:54 +053023 if random.random() <= 0.6:
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053024 report = "Ordered Items to be Billed"
Rushabh Mehta92d1b8c2016-07-14 15:46:12 +053025 for so in list(set([r[0] for r in query_report.run(report)["result"]
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053026 if r[0]!="Total"]))[:random.randint(1, 5)]:
Rushabh Mehtae9d9b8e2016-12-15 11:27:35 +053027 try:
28 si = frappe.get_doc(make_sales_invoice(so))
29 si.posting_date = frappe.flags.current_date
30 for d in si.get("items"):
31 if not d.income_account:
Rushabh Mehta708e47a2018-08-08 16:37:31 +053032 d.income_account = "Sales - {}".format(frappe.get_cached_value('Company', si.company, 'abbr'))
Rushabh Mehtae9d9b8e2016-12-15 11:27:35 +053033 si.insert()
34 si.submit()
35 frappe.db.commit()
36 except frappe.ValidationError:
37 pass
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053038
Nabin Hait26cad302016-07-21 10:28:54 +053039 if random.random() <= 0.6:
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053040 report = "Received Items to be Billed"
41 for pr in list(set([r[0] for r in query_report.run(report)["result"]
42 if r[0]!="Total"]))[:random.randint(1, 5)]:
Rushabh Mehtae9d9b8e2016-12-15 11:27:35 +053043 try:
44 pi = frappe.get_doc(make_purchase_invoice(pr))
45 pi.posting_date = frappe.flags.current_date
46 pi.bill_no = random_string(6)
47 pi.insert()
48 pi.submit()
49 frappe.db.commit()
50 except frappe.ValidationError:
51 pass
52
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053053
Nabin Hait16066262016-07-21 11:00:28 +053054 if random.random() < 0.5:
Nabin Hait26cad302016-07-21 10:28:54 +053055 make_payment_entries("Sales Invoice", "Accounts Receivable")
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053056
Nabin Hait16066262016-07-21 11:00:28 +053057 if random.random() < 0.5:
Nabin Hait26cad302016-07-21 10:28:54 +053058 make_payment_entries("Purchase Invoice", "Accounts Payable")
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053059
Zlash65dcf74012018-09-27 18:51:18 +053060 if random.random() < 0.4:
Saurabh90c0b7f2016-07-22 14:15:03 +053061 #make payment request against sales invoice
62 sales_invoice_name = get_random("Sales Invoice", filters={"docstatus": 1})
63 if sales_invoice_name:
64 si = frappe.get_doc("Sales Invoice", sales_invoice_name)
65 if si.outstanding_amount > 0:
66 payment_request = make_payment_request(dt="Sales Invoice", dn=si.name, recipient_id=si.contact_email,
67 submit_doc=True, mute_email=True, use_dummy_message=True)
68
Saurabh6e0a00b2016-07-22 15:17:17 +053069 payment_entry = frappe.get_doc(make_payment_entry(payment_request.name))
70 payment_entry.posting_date = frappe.flags.current_date
71 payment_entry.submit()
Saurabh90c0b7f2016-07-22 14:15:03 +053072
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +053073 make_pos_invoice()
74
Nabin Hait26cad302016-07-21 10:28:54 +053075def make_payment_entries(ref_doctype, report):
Chinmay Paib5038962019-04-27 01:39:50 +053076 outstanding_invoices = list(set([r[3] for r in query_report.run(report, {
77 "report_date": frappe.flags.current_date,
78 "company": erpnext.get_default_company()
79 })["result"] if r[2]==ref_doctype]))
Rushabh Mehtae9d9b8e2016-12-15 11:27:35 +053080
Nabin Hait26cad302016-07-21 10:28:54 +053081 # make Payment Entry
Nabin Hait16066262016-07-21 11:00:28 +053082 for inv in outstanding_invoices[:random.randint(1, 2)]:
Nabin Hait26cad302016-07-21 10:28:54 +053083 pe = get_payment_entry(ref_doctype, inv)
84 pe.posting_date = frappe.flags.current_date
85 pe.reference_no = random_string(6)
86 pe.reference_date = frappe.flags.current_date
87 pe.insert()
88 pe.submit()
Nabin Hait16066262016-07-21 11:00:28 +053089 frappe.db.commit()
90 outstanding_invoices.remove(inv)
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +053091
Nabin Hait16066262016-07-21 11:00:28 +053092 # make payment via JV
93 for inv in outstanding_invoices[:1]:
94 jv = frappe.get_doc(get_payment_entry_against_invoice(ref_doctype, inv))
95 jv.posting_date = frappe.flags.current_date
96 jv.cheque_no = random_string(6)
97 jv.cheque_date = frappe.flags.current_date
98 jv.insert()
99 jv.submit()
Saurabh90c0b7f2016-07-22 14:15:03 +0530100 frappe.db.commit()
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +0530101
102def make_pos_invoice():
103 make_sales_order()
104
105 for data in frappe.get_all('Sales Order', fields=["name"],
106 filters = [["per_billed", "<", "100"]]):
107 si = frappe.get_doc(make_sales_invoice(data.name))
108 si.is_pos =1
109 si.posting_date = frappe.flags.current_date
110 for d in si.get("items"):
111 if not d.income_account:
Rushabh Mehta708e47a2018-08-08 16:37:31 +0530112 d.income_account = "Sales - {}".format(frappe.get_cached_value('Company', si.company, 'abbr'))
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +0530113 si.set_missing_values()
114 make_payment_entries_for_pos_invoice(si)
115 si.insert()
116 si.submit()
117
118def make_payment_entries_for_pos_invoice(si):
119 for data in si.payments:
120 data.amount = si.outstanding_amount
121 return