blob: 392d13db92c0429b68d9846056ab5da2139195c0 [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
7import frappe
8import random
9from frappe.utils import random_string
10from frappe.desk import query_report
Nabin Hait26cad302016-07-21 10:28:54 +053011from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry_against_invoice
12from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
Saurabh90c0b7f2016-07-22 14:15:03 +053013from frappe.utils.make_random import get_random
14from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request, make_payment_entry
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +053015from erpnext.demo.user.sales import make_sales_order
16from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
17from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053018
19def work():
20 frappe.set_user(frappe.db.get_global('demo_accounts_user'))
21
Nabin Hait26cad302016-07-21 10:28:54 +053022 if random.random() <= 0.6:
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053023 report = "Ordered Items to be Billed"
Rushabh Mehta92d1b8c2016-07-14 15:46:12 +053024 for so in list(set([r[0] for r in query_report.run(report)["result"]
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053025 if r[0]!="Total"]))[:random.randint(1, 5)]:
26 si = frappe.get_doc(make_sales_invoice(so))
27 si.posting_date = frappe.flags.current_date
28 for d in si.get("items"):
29 if not d.income_account:
30 d.income_account = "Sales - {}".format(frappe.db.get_value('Company', si.company, 'abbr'))
31 si.insert()
32 si.submit()
33 frappe.db.commit()
34
Nabin Hait26cad302016-07-21 10:28:54 +053035 if random.random() <= 0.6:
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053036 report = "Received Items to be Billed"
37 for pr in list(set([r[0] for r in query_report.run(report)["result"]
38 if r[0]!="Total"]))[:random.randint(1, 5)]:
39 pi = frappe.get_doc(make_purchase_invoice(pr))
40 pi.posting_date = frappe.flags.current_date
41 pi.bill_no = random_string(6)
42 pi.insert()
43 pi.submit()
44 frappe.db.commit()
45
Nabin Hait16066262016-07-21 11:00:28 +053046 if random.random() < 0.5:
Nabin Hait26cad302016-07-21 10:28:54 +053047 make_payment_entries("Sales Invoice", "Accounts Receivable")
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053048
Nabin Hait16066262016-07-21 11:00:28 +053049 if random.random() < 0.5:
Nabin Hait26cad302016-07-21 10:28:54 +053050 make_payment_entries("Purchase Invoice", "Accounts Payable")
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053051
Saurabh90c0b7f2016-07-22 14:15:03 +053052 if random.random() < 0.1:
53 #make payment request against sales invoice
54 sales_invoice_name = get_random("Sales Invoice", filters={"docstatus": 1})
55 if sales_invoice_name:
56 si = frappe.get_doc("Sales Invoice", sales_invoice_name)
57 if si.outstanding_amount > 0:
58 payment_request = make_payment_request(dt="Sales Invoice", dn=si.name, recipient_id=si.contact_email,
59 submit_doc=True, mute_email=True, use_dummy_message=True)
60
Saurabh6e0a00b2016-07-22 15:17:17 +053061 payment_entry = frappe.get_doc(make_payment_entry(payment_request.name))
62 payment_entry.posting_date = frappe.flags.current_date
63 payment_entry.submit()
Saurabh90c0b7f2016-07-22 14:15:03 +053064
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +053065 make_pos_invoice()
66
Nabin Hait26cad302016-07-21 10:28:54 +053067def make_payment_entries(ref_doctype, report):
Saurabh90c0b7f2016-07-22 14:15:03 +053068 outstanding_invoices = list(set([r[3] for r in query_report.run(report,
Nabin Hait26cad302016-07-21 10:28:54 +053069 {"report_date": frappe.flags.current_date })["result"] if r[2]==ref_doctype]))
Neil Trini Lasrado06724592016-08-22 12:57:09 +053070
Nabin Hait26cad302016-07-21 10:28:54 +053071 # make Payment Entry
Nabin Hait16066262016-07-21 11:00:28 +053072 for inv in outstanding_invoices[:random.randint(1, 2)]:
Nabin Hait26cad302016-07-21 10:28:54 +053073 pe = get_payment_entry(ref_doctype, inv)
74 pe.posting_date = frappe.flags.current_date
75 pe.reference_no = random_string(6)
76 pe.reference_date = frappe.flags.current_date
77 pe.insert()
78 pe.submit()
Nabin Hait16066262016-07-21 11:00:28 +053079 frappe.db.commit()
80 outstanding_invoices.remove(inv)
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +053081
Nabin Hait16066262016-07-21 11:00:28 +053082 # make payment via JV
83 for inv in outstanding_invoices[:1]:
84 jv = frappe.get_doc(get_payment_entry_against_invoice(ref_doctype, inv))
85 jv.posting_date = frappe.flags.current_date
86 jv.cheque_no = random_string(6)
87 jv.cheque_date = frappe.flags.current_date
88 jv.insert()
89 jv.submit()
Saurabh90c0b7f2016-07-22 14:15:03 +053090 frappe.db.commit()
Rohit Waghchaure7d439ec2016-07-21 14:50:59 +053091
92def make_pos_invoice():
93 make_sales_order()
94
95 for data in frappe.get_all('Sales Order', fields=["name"],
96 filters = [["per_billed", "<", "100"]]):
97 si = frappe.get_doc(make_sales_invoice(data.name))
98 si.is_pos =1
99 si.posting_date = frappe.flags.current_date
100 for d in si.get("items"):
101 if not d.income_account:
102 d.income_account = "Sales - {}".format(frappe.db.get_value('Company', si.company, 'abbr'))
103 si.set_missing_values()
104 make_payment_entries_for_pos_invoice(si)
105 si.insert()
106 si.submit()
107
108def make_payment_entries_for_pos_invoice(si):
109 for data in si.payments:
110 data.amount = si.outstanding_amount
111 return