blob: a3f631c8b71ed84805fe4a0ff09f6c990599f5c2 [file] [log] [blame]
Rushabh Mehtacca33b22016-07-08 18:24:46 +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, erpnext
7from frappe.utils.make_random import how_many
8from frappe.desk import query_report
Rohit Waghchaure8002d472016-07-13 16:03:05 +05309from erpnext.manufacturing.doctype.workstation.workstation import WorkstationHolidayError
Ameya Shenoy848d34f2018-04-12 13:21:16 +053010from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record
Rushabh Mehtacca33b22016-07-08 18:24:46 +053011
12def work():
13 frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
14
15 from erpnext.projects.doctype.timesheet.timesheet import OverlapError
16
17 ppt = frappe.get_doc("Production Planning Tool", "Production Planning Tool")
18 ppt.company = erpnext.get_default_company()
19 ppt.use_multi_level_bom = 1
20 ppt.get_items_from = "Sales Order"
21 ppt.purchase_request_for_warehouse = "Stores - WPL"
22 ppt.run_method("get_open_sales_orders")
23 ppt.run_method("get_items")
Zarrar13ddc7e2018-03-20 12:38:43 +053024 ppt.run_method("raise_work_orders")
Rushabh Mehtacca33b22016-07-08 18:24:46 +053025 ppt.run_method("raise_material_requests")
26 frappe.db.commit()
27
Zarrar13ddc7e2018-03-20 12:38:43 +053028 # submit work orders
29 for pro in frappe.db.get_values("Work Order", {"docstatus": 0}, "name"):
30 b = frappe.get_doc("Work Order", pro[0])
Rushabh Mehtacca33b22016-07-08 18:24:46 +053031 b.wip_warehouse = "Work in Progress - WPL"
32 b.submit()
33 frappe.db.commit()
34
35 # submit material requests
36 for pro in frappe.db.get_values("Material Request", {"docstatus": 0}, "name"):
37 b = frappe.get_doc("Material Request", pro[0])
38 b.submit()
39 frappe.db.commit()
40
41 # stores -> wip
42 if random.random() < 0.3:
Zarrar13ddc7e2018-03-20 12:38:43 +053043 for pro in query_report.run("Open Work Orders")["result"][:how_many("Stock Entry for WIP")]:
Rushabh Mehtacca33b22016-07-08 18:24:46 +053044 make_stock_entry_from_pro(pro[0], "Material Transfer for Manufacture")
45
46 # wip -> fg
47 if random.random() < 0.3:
Zarrar13ddc7e2018-03-20 12:38:43 +053048 for pro in query_report.run("Work Orders in Progress")["result"][:how_many("Stock Entry for FG")]:
Rushabh Mehtacca33b22016-07-08 18:24:46 +053049 make_stock_entry_from_pro(pro[0], "Manufacture")
50
Rohit Waghchaure8002d472016-07-13 16:03:05 +053051 for bom in frappe.get_all('BOM', fields=['item'], filters = {'with_operations': 1}):
Ameya Shenoy848d34f2018-04-12 13:21:16 +053052 pro_order = make_wo_order_test_record(item=bom.item, qty=2,
Rohit Waghchaure8002d472016-07-13 16:03:05 +053053 source_warehouse="Stores - WPL", wip_warehouse = "Work in Progress - WPL",
54 fg_warehouse = "Stores - WPL", company = erpnext.get_default_company(),
55 stock_uom = frappe.db.get_value('Item', bom.item, 'stock_uom'),
56 planned_start_date = frappe.flags.current_date)
57
Rushabh Mehtacca33b22016-07-08 18:24:46 +053058 # submit time logs
59 for timesheet in frappe.get_all("Timesheet", ["name"], {"docstatus": 0,
Zarrar13ddc7e2018-03-20 12:38:43 +053060 "work_order": ("!=", ""), "to_time": ("<", frappe.flags.current_date)}):
Rushabh Mehtacca33b22016-07-08 18:24:46 +053061 timesheet = frappe.get_doc("Timesheet", timesheet.name)
62 try:
63 timesheet.submit()
64 frappe.db.commit()
65 except OverlapError:
66 pass
Rohit Waghchaure8002d472016-07-13 16:03:05 +053067 except WorkstationHolidayError:
68 pass
Rushabh Mehtacca33b22016-07-08 18:24:46 +053069
70def make_stock_entry_from_pro(pro_id, purpose):
Zarrar13ddc7e2018-03-20 12:38:43 +053071 from erpnext.manufacturing.doctype.work_order.work_order import make_stock_entry
Rushabh Mehtacca33b22016-07-08 18:24:46 +053072 from erpnext.stock.stock_ledger import NegativeStockError
73 from erpnext.stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, \
Zarrar13ddc7e2018-03-20 12:38:43 +053074 DuplicateEntryForWorkOrderError, OperationsNotCompleteError
Rushabh Mehtacca33b22016-07-08 18:24:46 +053075
76 try:
77 st = frappe.get_doc(make_stock_entry(pro_id, purpose))
78 st.posting_date = frappe.flags.current_date
79 st.fiscal_year = str(frappe.flags.current_date.year)
80 for d in st.get("items"):
81 d.cost_center = "Main - " + frappe.db.get_value('Company', st.company, 'abbr')
82 st.insert()
83 frappe.db.commit()
84 st.submit()
85 frappe.db.commit()
Zarrar13ddc7e2018-03-20 12:38:43 +053086 except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForWorkOrderError,
Rushabh Mehtacca33b22016-07-08 18:24:46 +053087 OperationsNotCompleteError):
88 frappe.db.rollback()