mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-26 05:15:20 +00:00
[cleanup]
This commit is contained in:
77
erpnext/demo/user/manufacturing.py
Normal file
77
erpnext/demo/user/manufacturing.py
Normal file
@@ -0,0 +1,77 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe, random, erpnext
|
||||
from frappe.utils.make_random import how_many
|
||||
from frappe.desk import query_report
|
||||
|
||||
def work():
|
||||
frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
|
||||
|
||||
from erpnext.projects.doctype.timesheet.timesheet import OverlapError
|
||||
|
||||
ppt = frappe.get_doc("Production Planning Tool", "Production Planning Tool")
|
||||
ppt.company = erpnext.get_default_company()
|
||||
ppt.use_multi_level_bom = 1
|
||||
ppt.get_items_from = "Sales Order"
|
||||
ppt.purchase_request_for_warehouse = "Stores - WPL"
|
||||
ppt.run_method("get_open_sales_orders")
|
||||
ppt.run_method("get_items")
|
||||
ppt.run_method("raise_production_orders")
|
||||
ppt.run_method("raise_material_requests")
|
||||
frappe.db.commit()
|
||||
|
||||
# submit production orders
|
||||
for pro in frappe.db.get_values("Production Order", {"docstatus": 0}, "name"):
|
||||
b = frappe.get_doc("Production Order", pro[0])
|
||||
b.wip_warehouse = "Work in Progress - WPL"
|
||||
b.submit()
|
||||
frappe.db.commit()
|
||||
|
||||
# submit material requests
|
||||
for pro in frappe.db.get_values("Material Request", {"docstatus": 0}, "name"):
|
||||
b = frappe.get_doc("Material Request", pro[0])
|
||||
b.submit()
|
||||
frappe.db.commit()
|
||||
|
||||
# stores -> wip
|
||||
if random.random() < 0.3:
|
||||
for pro in query_report.run("Open Production Orders")["result"][:how_many("Stock Entry for WIP")]:
|
||||
make_stock_entry_from_pro(pro[0], "Material Transfer for Manufacture")
|
||||
|
||||
# wip -> fg
|
||||
if random.random() < 0.3:
|
||||
for pro in query_report.run("Production Orders in Progress")["result"][:how_many("Stock Entry for FG")]:
|
||||
make_stock_entry_from_pro(pro[0], "Manufacture")
|
||||
|
||||
# submit time logs
|
||||
for timesheet in frappe.get_all("Timesheet", ["name"], {"docstatus": 0,
|
||||
"production_order": ("!=", ""), "to_time": ("<", frappe.flags.current_date)}):
|
||||
timesheet = frappe.get_doc("Timesheet", timesheet.name)
|
||||
try:
|
||||
timesheet.submit()
|
||||
frappe.db.commit()
|
||||
except OverlapError:
|
||||
pass
|
||||
|
||||
def make_stock_entry_from_pro(pro_id, purpose):
|
||||
from erpnext.manufacturing.doctype.production_order.production_order import make_stock_entry
|
||||
from erpnext.stock.stock_ledger import NegativeStockError
|
||||
from erpnext.stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, \
|
||||
DuplicateEntryForProductionOrderError, OperationsNotCompleteError
|
||||
|
||||
try:
|
||||
st = frappe.get_doc(make_stock_entry(pro_id, purpose))
|
||||
st.posting_date = frappe.flags.current_date
|
||||
st.fiscal_year = str(frappe.flags.current_date.year)
|
||||
for d in st.get("items"):
|
||||
d.cost_center = "Main - " + frappe.db.get_value('Company', st.company, 'abbr')
|
||||
st.insert()
|
||||
frappe.db.commit()
|
||||
st.submit()
|
||||
frappe.db.commit()
|
||||
except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForProductionOrderError,
|
||||
OperationsNotCompleteError):
|
||||
frappe.db.rollback()
|
||||
@@ -27,6 +27,7 @@ def work():
|
||||
for mr in frappe.get_all('Material Request',
|
||||
filters={'material_request_type': 'Purchase', 'status': 'Open'},
|
||||
limit=random.randint(1,6)):
|
||||
print mr.name
|
||||
if not frappe.get_all('Request for Quotation',
|
||||
filters={'material_request': mr.name}, limit=1):
|
||||
rfq = make_request_for_quotation(mr.name)
|
||||
@@ -59,11 +60,11 @@ def work():
|
||||
exchange_rate = get_exchange_rate(party_account_currency, company_currency)
|
||||
|
||||
# make supplier quotations
|
||||
if random.random() < 0.3:
|
||||
if random.random() < 0.2:
|
||||
from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
|
||||
|
||||
report = "Material Requests for which Supplier Quotations are not created"
|
||||
for row in query_report.run(report)["result"][:how_many("Supplier Quotation")]:
|
||||
for row in query_report.run(report)["result"][:random.randint(1, 3)]:
|
||||
if row[0] != "'Total'":
|
||||
sq = frappe.get_doc(make_supplier_quotation(row[0]))
|
||||
sq.transaction_date = frappe.flags.current_date
|
||||
@@ -89,13 +90,15 @@ def work():
|
||||
po.submit()
|
||||
frappe.db.commit()
|
||||
|
||||
if random.random() < 0.3:
|
||||
if random.random() < 0.2:
|
||||
make_subcontract()
|
||||
|
||||
def make_material_request(item_code, qty):
|
||||
mr = frappe.new_doc("Material Request")
|
||||
|
||||
if frappe.db.get_value('BOM', {'item': item_code, 'is_default': 1, 'is_active': 1}):
|
||||
variant_of = frappe.db.get_value('Item', item_code, 'variant_of') or item_code
|
||||
|
||||
if frappe.db.get_value('BOM', {'item': variant_of, 'is_default': 1, 'is_active': 1}):
|
||||
mr.material_request_type = 'Manufacture'
|
||||
else:
|
||||
mr.material_request_type = "Purchase"
|
||||
@@ -143,6 +146,6 @@ def make_subcontract():
|
||||
|
||||
# transfer material for sub-contract
|
||||
stock_entry = frappe.get_doc(make_stock_entry(po.name, po.items[0].item_code))
|
||||
stock_entry.from_warehouse = "Stores - WP"
|
||||
stock_entry.to_warehouse = "Supplier - WP"
|
||||
stock_entry.from_warehouse = "Stores - WPL"
|
||||
stock_entry.to_warehouse = "Supplier - WPL"
|
||||
stock_entry.insert()
|
||||
|
||||
97
erpnext/demo/user/stock.py
Normal file
97
erpnext/demo/user/stock.py
Normal file
@@ -0,0 +1,97 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe, random
|
||||
from frappe.desk import query_report
|
||||
from erpnext.stock.stock_ledger import NegativeStockError
|
||||
from erpnext.stock.doctype.serial_no.serial_no import SerialNoRequiredError, SerialNoQtyError
|
||||
|
||||
def work():
|
||||
frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
|
||||
|
||||
make_purchase_receipt()
|
||||
make_delivery_note()
|
||||
make_stock_reconciliation()
|
||||
submit_draft_stock_entries()
|
||||
|
||||
def make_purchase_receipt():
|
||||
if random.random() < 0.6:
|
||||
from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
|
||||
report = "Purchase Order Items To Be Received"
|
||||
po_list =list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="'Total'"]))[:random.randint(1, 10)]
|
||||
for po in po_list:
|
||||
pr = frappe.get_doc(make_purchase_receipt(po))
|
||||
|
||||
if pr.is_subcontracted=="Yes":
|
||||
pr.supplier_warehouse = "Supplier - WPL"
|
||||
|
||||
pr.posting_date = frappe.flags.current_date
|
||||
pr.insert()
|
||||
try:
|
||||
pr.submit()
|
||||
frappe.db.commit()
|
||||
except (NegativeStockError):
|
||||
frappe.db.rollback()
|
||||
|
||||
def make_delivery_note():
|
||||
# make purchase requests
|
||||
|
||||
# make delivery notes (if possible)
|
||||
if random.random() < 0.3:
|
||||
from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
|
||||
report = "Ordered Items To Be Delivered"
|
||||
for so in list(set([r[0] for r in query_report.run(report)["result"]
|
||||
if r[0]!="'Total'"]))[:random.randint(1, 3)]:
|
||||
dn = frappe.get_doc(make_delivery_note(so))
|
||||
dn.posting_date = frappe.flags.current_date
|
||||
for d in dn.get("items"):
|
||||
if not d.expense_account:
|
||||
d.expense_account = ("Cost of Goods Sold - {0}".format(
|
||||
frappe.db.get_value('Company', dn.company, 'abbr')))
|
||||
dn.insert()
|
||||
try:
|
||||
dn.submit()
|
||||
frappe.db.commit()
|
||||
except (NegativeStockError, SerialNoRequiredError, SerialNoQtyError):
|
||||
frappe.db.rollback()
|
||||
|
||||
def make_stock_reconciliation():
|
||||
# random set some items as damaged
|
||||
from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation \
|
||||
import OpeningEntryAccountError, EmptyStockReconciliationItemsError
|
||||
|
||||
if random.random() < 0.1:
|
||||
stock_reco = frappe.new_doc("Stock Reconciliation")
|
||||
stock_reco.posting_date = frappe.flags.current_date
|
||||
stock_reco.get_items_for("Stores - WP")
|
||||
if stock_reco.items:
|
||||
for item in stock_reco.items:
|
||||
if item.qty:
|
||||
item.qty = item.qty - round(random.randint(1, item.qty))
|
||||
try:
|
||||
stock_reco.insert()
|
||||
stock_reco.submit()
|
||||
frappe.db.commit()
|
||||
except OpeningEntryAccountError:
|
||||
frappe.db.rollback()
|
||||
except EmptyStockReconciliationItemsError:
|
||||
frappe.db.rollback()
|
||||
|
||||
def submit_draft_stock_entries():
|
||||
from erpnext.stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, \
|
||||
DuplicateEntryForProductionOrderError, OperationsNotCompleteError
|
||||
|
||||
# try posting older drafts (if exists)
|
||||
for st in frappe.db.get_values("Stock Entry", {"docstatus":0}, "name"):
|
||||
try:
|
||||
ste = frappe.get_doc("Stock Entry", st[0])
|
||||
ste.posting_date = frappe.flags.current_date
|
||||
ste.save()
|
||||
ste.submit()
|
||||
frappe.db.commit()
|
||||
except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForProductionOrderError,
|
||||
OperationsNotCompleteError):
|
||||
frappe.db.rollback()
|
||||
|
||||
Reference in New Issue
Block a user