Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors |
| 2 | # License: GNU General Public License v3. See license.txt |
| 3 | |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 4 | |
Chillar Anand | 915b343 | 2021-09-02 16:44:59 +0530 | [diff] [blame] | 5 | import random |
| 6 | |
| 7 | import frappe |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 8 | from frappe.desk import query_report |
Chillar Anand | 915b343 | 2021-09-02 16:44:59 +0530 | [diff] [blame] | 9 | |
| 10 | import erpnext |
Rohit Waghchaure | c4ee77a | 2017-09-28 11:51:03 +0530 | [diff] [blame] | 11 | from erpnext.stock.doctype.batch.batch import UnableToSelectBatchError |
Rohit Waghchaure | 05cc36a | 2016-07-29 18:25:40 +0530 | [diff] [blame] | 12 | from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_return |
| 13 | from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_return |
Chillar Anand | 915b343 | 2021-09-02 16:44:59 +0530 | [diff] [blame] | 14 | from erpnext.stock.doctype.serial_no.serial_no import SerialNoQtyError, SerialNoRequiredError |
| 15 | from erpnext.stock.stock_ledger import NegativeStockError |
| 16 | |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 17 | |
| 18 | def work(): |
| 19 | frappe.set_user(frappe.db.get_global('demo_manufacturing_user')) |
| 20 | |
| 21 | make_purchase_receipt() |
| 22 | make_delivery_note() |
| 23 | make_stock_reconciliation() |
| 24 | submit_draft_stock_entries() |
Rohit Waghchaure | 05cc36a | 2016-07-29 18:25:40 +0530 | [diff] [blame] | 25 | make_sales_return_records() |
| 26 | make_purchase_return_records() |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 27 | |
| 28 | def make_purchase_receipt(): |
| 29 | if random.random() < 0.6: |
| 30 | from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt |
| 31 | report = "Purchase Order Items To Be Received" |
Aditya Hase | 41d189a | 2019-01-07 14:25:58 +0530 | [diff] [blame] | 32 | po_list =list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:random.randint(1, 10)] |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 33 | for po in po_list: |
| 34 | pr = frappe.get_doc(make_purchase_receipt(po)) |
| 35 | |
| 36 | if pr.is_subcontracted=="Yes": |
| 37 | pr.supplier_warehouse = "Supplier - WPL" |
| 38 | |
| 39 | pr.posting_date = frappe.flags.current_date |
| 40 | pr.insert() |
Rushabh Mehta | ffa70e3 | 2016-07-13 17:41:03 +0530 | [diff] [blame] | 41 | try: |
| 42 | pr.submit() |
| 43 | except NegativeStockError: |
Aditya Hase | 6ccb656 | 2017-08-28 18:17:36 +0530 | [diff] [blame] | 44 | print('Negative stock for {0}'.format(po)) |
Rushabh Mehta | ffa70e3 | 2016-07-13 17:41:03 +0530 | [diff] [blame] | 45 | pass |
Rushabh Mehta | 3ce24d6 | 2016-07-11 16:07:06 +0530 | [diff] [blame] | 46 | frappe.db.commit() |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 47 | |
| 48 | def make_delivery_note(): |
| 49 | # make purchase requests |
| 50 | |
| 51 | # make delivery notes (if possible) |
Zlash65 | dcf7401 | 2018-09-27 18:51:18 +0530 | [diff] [blame] | 52 | if random.random() < 0.6: |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 53 | from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note |
| 54 | report = "Ordered Items To Be Delivered" |
| 55 | for so in list(set([r[0] for r in query_report.run(report)["result"] |
Aditya Hase | 41d189a | 2019-01-07 14:25:58 +0530 | [diff] [blame] | 56 | if r[0]!="Total"]))[:random.randint(1, 3)]: |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 57 | dn = frappe.get_doc(make_delivery_note(so)) |
| 58 | dn.posting_date = frappe.flags.current_date |
| 59 | for d in dn.get("items"): |
| 60 | if not d.expense_account: |
| 61 | d.expense_account = ("Cost of Goods Sold - {0}".format( |
Rushabh Mehta | 708e47a | 2018-08-08 16:37:31 +0530 | [diff] [blame] | 62 | frappe.get_cached_value('Company', dn.company, 'abbr'))) |
Zlash65 | d080a17 | 2018-10-01 10:49:06 +0530 | [diff] [blame] | 63 | |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 64 | try: |
Zlash65 | d080a17 | 2018-10-01 10:49:06 +0530 | [diff] [blame] | 65 | dn.insert() |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 66 | dn.submit() |
| 67 | frappe.db.commit() |
Rohit Waghchaure | c4ee77a | 2017-09-28 11:51:03 +0530 | [diff] [blame] | 68 | except (NegativeStockError, SerialNoRequiredError, SerialNoQtyError, UnableToSelectBatchError): |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 69 | frappe.db.rollback() |
| 70 | |
| 71 | def make_stock_reconciliation(): |
| 72 | # random set some items as damaged |
Chillar Anand | 915b343 | 2021-09-02 16:44:59 +0530 | [diff] [blame] | 73 | from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import ( |
| 74 | EmptyStockReconciliationItemsError, |
| 75 | OpeningEntryAccountError, |
| 76 | ) |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 77 | |
Zlash65 | dcf7401 | 2018-09-27 18:51:18 +0530 | [diff] [blame] | 78 | if random.random() < 0.4: |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 79 | stock_reco = frappe.new_doc("Stock Reconciliation") |
| 80 | stock_reco.posting_date = frappe.flags.current_date |
Zlash65 | dcf7401 | 2018-09-27 18:51:18 +0530 | [diff] [blame] | 81 | stock_reco.company = erpnext.get_default_company() |
Chinmay Pai | b503896 | 2019-04-27 01:39:50 +0530 | [diff] [blame] | 82 | stock_reco.get_items_for("Stores - WPL") |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 83 | if stock_reco.items: |
| 84 | for item in stock_reco.items: |
| 85 | if item.qty: |
| 86 | item.qty = item.qty - round(random.randint(1, item.qty)) |
| 87 | try: |
igormbq | aa08fb9 | 2020-11-04 11:40:57 -0300 | [diff] [blame] | 88 | stock_reco.insert(ignore_permissions=True, ignore_mandatory=True) |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 89 | stock_reco.submit() |
| 90 | frappe.db.commit() |
| 91 | except OpeningEntryAccountError: |
| 92 | frappe.db.rollback() |
| 93 | except EmptyStockReconciliationItemsError: |
| 94 | frappe.db.rollback() |
| 95 | |
| 96 | def submit_draft_stock_entries(): |
Chillar Anand | 915b343 | 2021-09-02 16:44:59 +0530 | [diff] [blame] | 97 | from erpnext.stock.doctype.stock_entry.stock_entry import ( |
| 98 | DuplicateEntryForWorkOrderError, |
| 99 | IncorrectValuationRateError, |
| 100 | OperationsNotCompleteError, |
| 101 | ) |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 102 | |
| 103 | # try posting older drafts (if exists) |
Neil Trini Lasrado | 71e3746 | 2016-10-28 18:59:33 +0530 | [diff] [blame] | 104 | frappe.db.commit() |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 105 | for st in frappe.db.get_values("Stock Entry", {"docstatus":0}, "name"): |
| 106 | try: |
| 107 | ste = frappe.get_doc("Stock Entry", st[0]) |
| 108 | ste.posting_date = frappe.flags.current_date |
| 109 | ste.save() |
| 110 | ste.submit() |
| 111 | frappe.db.commit() |
Zlash65 | dcf7401 | 2018-09-27 18:51:18 +0530 | [diff] [blame] | 112 | except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForWorkOrderError, |
Rushabh Mehta | cca33b2 | 2016-07-08 18:24:46 +0530 | [diff] [blame] | 113 | OperationsNotCompleteError): |
| 114 | frappe.db.rollback() |
| 115 | |
Rohit Waghchaure | 05cc36a | 2016-07-29 18:25:40 +0530 | [diff] [blame] | 116 | def make_sales_return_records(): |
Rushabh Mehta | 99c814b | 2016-12-19 11:51:02 +0530 | [diff] [blame] | 117 | if random.random() < 0.1: |
| 118 | for data in frappe.get_all('Delivery Note', fields=["name"], filters={"docstatus": 1}): |
| 119 | if random.random() < 0.1: |
| 120 | try: |
| 121 | dn = make_sales_return(data.name) |
| 122 | dn.insert() |
| 123 | dn.submit() |
| 124 | frappe.db.commit() |
| 125 | except Exception: |
| 126 | frappe.db.rollback() |
Rohit Waghchaure | 05cc36a | 2016-07-29 18:25:40 +0530 | [diff] [blame] | 127 | |
| 128 | def make_purchase_return_records(): |
Rushabh Mehta | 99c814b | 2016-12-19 11:51:02 +0530 | [diff] [blame] | 129 | if random.random() < 0.1: |
| 130 | for data in frappe.get_all('Purchase Receipt', fields=["name"], filters={"docstatus": 1}): |
| 131 | if random.random() < 0.1: |
| 132 | try: |
| 133 | pr = make_purchase_return(data.name) |
| 134 | pr.insert() |
| 135 | pr.submit() |
| 136 | frappe.db.commit() |
| 137 | except Exception: |
| 138 | frappe.db.rollback() |