def run_stock(current_date): # make purchase requests if can_make("Purchase Receipt"): from buying.doctype.purchase_order.purchase_order import make_purchase_receipt from stock.stock_ledger import NegativeStockError report = "Purchase Order Items To Be Received" for po in list( set([ r[0] for r in query_report.run(report)["result"] if r[0] != "Total" ]))[:how_many("Purchase Receipt")]: pr = webnotes.bean(make_purchase_receipt(po)) pr.doc.posting_date = current_date pr.doc.fiscal_year = current_date.year pr.insert() try: pr.submit() webnotes.conn.commit() except NegativeStockError: pass # make delivery notes (if possible) if can_make("Delivery Note"): from selling.doctype.sales_order.sales_order import make_delivery_note from stock.stock_ledger import NegativeStockError from stock.doctype.serial_no.serial_no import SerialNoRequiredError, SerialNoQtyError 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" ]))[:how_many("Delivery Note")]: dn = webnotes.bean(make_delivery_note(so)) dn.doc.posting_date = current_date dn.doc.fiscal_year = current_date.year for d in dn.doclist.get({"parentfield": "delivery_note_details"}): d.expense_account = "Cost of Goods Sold - {}".format( company_abbr) dn.insert() try: dn.submit() webnotes.conn.commit() except NegativeStockError: pass except SerialNoRequiredError: pass except SerialNoQtyError: pass # try submitting existing for dn in webnotes.conn.get_values("Delivery Note", {"docstatus": 0}, "name"): b = webnotes.bean("Delivery Note", dn[0]) b.submit() webnotes.conn.commit()
def run_manufacturing(current_date): from stock.stock_ledger import NegativeStockError from stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, DuplicateEntryForProductionOrderError ppt = webnotes.bean("Production Planning Tool", "Production Planning Tool") ppt.doc.company = company ppt.doc.use_multi_level_bom = 1 ppt.doc.purchase_request_for_warehouse = "Stores - WP" ppt.run_method("get_open_sales_orders") ppt.run_method("get_items_from_so") ppt.run_method("raise_production_order") ppt.run_method("raise_purchase_request") webnotes.conn.commit() # submit production orders for pro in webnotes.conn.get_values("Production Order", {"docstatus": 0}, "name"): b = webnotes.bean("Production Order", pro[0]) b.doc.wip_warehouse = "Work in Progress - WP" b.submit() webnotes.conn.commit() # submit material requests for pro in webnotes.conn.get_values("Material Request", {"docstatus": 0}, "name"): b = webnotes.bean("Material Request", pro[0]) b.submit() webnotes.conn.commit() # stores -> wip if can_make("Stock Entry for WIP"): 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", current_date) # wip -> fg if can_make("Stock Entry for FG"): 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/Repack", current_date) # try posting older drafts (if exists) for st in webnotes.conn.get_values("Stock Entry", {"docstatus": 0}, "name"): try: webnotes.bean("Stock Entry", st[0]).submit() webnotes.conn.commit() except NegativeStockError: pass except IncorrectValuationRateError: pass except DuplicateEntryForProductionOrderError: pass
def run_purchase(current_date): # make material requests for purchase items that have negative projected qtys if can_make("Material Request"): report = "Items To Be Requested" for row in query_report.run( report)["result"][:how_many("Material Request")]: mr = webnotes.new_bean("Material Request") mr.doc.material_request_type = "Purchase" mr.doc.transaction_date = current_date mr.doc.fiscal_year = current_date.year mr.doclist.append({ "doctype": "Material Request Item", "parentfield": "indent_details", "schedule_date": webnotes.utils.add_days(current_date, 7), "item_code": row[0], "qty": -row[-1] }) mr.insert() mr.submit() # make supplier quotations if can_make("Supplier Quotation"): from 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")]: if row[0] != "Total": sq = webnotes.bean(make_supplier_quotation(row[0])) sq.doc.transaction_date = current_date sq.doc.fiscal_year = current_date.year sq.insert() sq.submit() webnotes.conn.commit() # make purchase orders if can_make("Purchase Order"): from stock.doctype.material_request.material_request import make_purchase_order report = "Requested Items To Be Ordered" for row in query_report.run( report)["result"][:how_many("Purchase Order")]: if row[0] != "Total": po = webnotes.bean(make_purchase_order(row[0])) po.doc.transaction_date = current_date po.doc.fiscal_year = current_date.year po.insert() po.submit() webnotes.conn.commit()
def run_accounts(current_date): if can_make("Sales Invoice"): from selling.doctype.sales_order.sales_order import make_sales_invoice report = "Ordered Items to be Billed" for so in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Sales Invoice")]: si = webnotes.bean(make_sales_invoice(so)) si.doc.posting_date = current_date for d in si.doclist.get({"parentfield": "entries"}): if not d.income_account: d.income_account = "Sales - {}".format(company_abbr) si.insert() si.submit() webnotes.conn.commit() if can_make("Purchase Invoice"): from stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice report = "Received Items to be Billed" for pr in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Purchase Invoice")]: pi = webnotes.bean(make_purchase_invoice(pr)) pi.doc.posting_date = current_date pi.doc.bill_no = random_string(6) pi.insert() pi.submit() webnotes.conn.commit() if can_make("Payment Received"): from accounts.doctype.journal_voucher.journal_voucher import get_payment_entry_from_sales_invoice report = "Accounts Receivable" for si in list(set([r[4] for r in query_report.run(report, {"report_date": current_date })["result"] if r[3]=="Sales Invoice"]))[:how_many("Payment Received")]: jv = webnotes.bean(get_payment_entry_from_sales_invoice(si)) jv.doc.posting_date = current_date jv.doc.cheque_no = random_string(6) jv.doc.cheque_date = current_date jv.insert() jv.submit() webnotes.conn.commit() if can_make("Payment Made"): from accounts.doctype.journal_voucher.journal_voucher import get_payment_entry_from_purchase_invoice report = "Accounts Payable" for pi in list(set([r[4] for r in query_report.run(report, {"report_date": current_date })["result"] if r[3]=="Purchase Invoice"]))[:how_many("Payment Made")]: jv = webnotes.bean(get_payment_entry_from_purchase_invoice(pi)) jv.doc.posting_date = current_date jv.doc.cheque_no = random_string(6) jv.doc.cheque_date = current_date jv.insert() jv.submit() webnotes.conn.commit()
def run_stock(current_date): # make purchase requests if can_make("Purchase Receipt"): from buying.doctype.purchase_order.purchase_order import make_purchase_receipt report = "Purchase Order Items To Be Received" for po in list( set([ r[0] for r in query_report.run(report)["result"] if r[0] != "Total" ]))[:how_many("Purchase Receipt")]: pr = webnotes.bean(make_purchase_receipt(po)) pr.doc.posting_date = current_date pr.doc.fiscal_year = "2013" pr.insert() pr.submit() webnotes.conn.commit() # make delivery notes (if possible) if can_make("Delivery Note"): from selling.doctype.sales_order.sales_order import make_delivery_note from stock.stock_ledger import NegativeStockError from stock.doctype.stock_ledger_entry.stock_ledger_entry import SerialNoRequiredError, SerialNoQtyError 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" ]))[:how_many("Delivery Note")]: dn = webnotes.bean(make_delivery_note(so)) dn.doc.posting_date = current_date dn.doc.fiscal_year = "2013" dn.insert() try: dn.submit() webnotes.conn.commit() except NegativeStockError: pass except SerialNoRequiredError: pass except SerialNoQtyError: pass # try submitting existing for dn in webnotes.conn.get_values("Delivery Note", {"docstatus": 0}, "name"): b = webnotes.bean("Delivery Note", dn[0]) b.submit() webnotes.conn.commit()
def run_manufacturing(current_date): from stock.stock_ledger import NegativeStockError from stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, DuplicateEntryForProductionOrderError ppt = webnotes.bean("Production Planning Tool", "Production Planning Tool") ppt.doc.company = company ppt.doc.use_multi_level_bom = 1 ppt.doc.purchase_request_for_warehouse = "Stores - WP" ppt.run_method("get_open_sales_orders") ppt.run_method("get_items_from_so") ppt.run_method("raise_production_order") ppt.run_method("raise_purchase_request") webnotes.conn.commit() # submit production orders for pro in webnotes.conn.get_values("Production Order", {"docstatus": 0}, "name"): b = webnotes.bean("Production Order", pro[0]) b.doc.wip_warehouse = "Work in Progress - WP" b.submit() webnotes.conn.commit() # submit material requests for pro in webnotes.conn.get_values("Material Request", {"docstatus": 0}, "name"): b = webnotes.bean("Material Request", pro[0]) b.submit() webnotes.conn.commit() # stores -> wip if can_make("Stock Entry for WIP"): 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", current_date) # wip -> fg if can_make("Stock Entry for FG"): 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/Repack", current_date) # try posting older drafts (if exists) for st in webnotes.conn.get_values("Stock Entry", {"docstatus":0}, "name"): try: webnotes.bean("Stock Entry", st[0]).submit() webnotes.conn.commit() except NegativeStockError: pass except IncorrectValuationRateError: pass except DuplicateEntryForProductionOrderError: pass
def run_accounts(current_date): if can_make("Sales Invoice"): from selling.doctype.sales_order.sales_order import make_sales_invoice report = "Ordered Items to be Billed" for so in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Sales Invoice")]: si = webnotes.bean(make_sales_invoice(so)) si.doc.posting_date = current_date si.insert() si.submit() webnotes.conn.commit() if can_make("Purchase Invoice"): from stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice report = "Received Items to be Billed" for pr in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Purchase Invoice")]: pi = webnotes.bean(make_purchase_invoice(pr)) pi.doc.posting_date = current_date pi.doc.bill_no = random_string(6) pi.insert() pi.submit() webnotes.conn.commit() if can_make("Payment Received"): from accounts.doctype.journal_voucher.journal_voucher import get_payment_entry_from_sales_invoice report = "Accounts Receivable" for si in list(set([r[4] for r in query_report.run(report, {"report_date": current_date })["result"] if r[3]=="Sales Invoice"]))[:how_many("Payment Received")]: jv = webnotes.bean(get_payment_entry_from_sales_invoice(si)) jv.doc.posting_date = current_date jv.doc.cheque_no = random_string(6) jv.doc.cheque_date = current_date jv.insert() jv.submit() webnotes.conn.commit() if can_make("Payment Made"): from accounts.doctype.journal_voucher.journal_voucher import get_payment_entry_from_purchase_invoice report = "Accounts Payable" for pi in list(set([r[4] for r in query_report.run(report, {"report_date": current_date })["result"] if r[3]=="Purchase Invoice"]))[:how_many("Payment Made")]: jv = webnotes.bean(get_payment_entry_from_purchase_invoice(pi)) jv.doc.posting_date = current_date jv.doc.cheque_no = random_string(6) jv.doc.cheque_date = current_date jv.insert() jv.submit() webnotes.conn.commit()
def run_purchase(current_date): # make material requests for purchase items that have negative projected qtys if can_make("Material Request"): report = "Items To Be Requested" for row in query_report.run(report)["result"][:how_many("Material Request")]: mr = webnotes.new_bean("Material Request") mr.doc.material_request_type = "Purchase" mr.doc.transaction_date = current_date mr.doc.fiscal_year = "2013" mr.doclist.append({ "doctype": "Material Request Item", "parentfield": "indent_details", "schedule_date": webnotes.utils.add_days(current_date, 7), "item_code": row[0], "qty": -row[-1] }) mr.insert() mr.submit() # make supplier quotations if can_make("Supplier Quotation"): from 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")]: if row[0] != "Total": sq = webnotes.bean(make_supplier_quotation(row[0])) sq.doc.transaction_date = current_date sq.doc.fiscal_year = "2013" sq.insert() sq.submit() webnotes.conn.commit() # make purchase orders if can_make("Purchase Order"): from stock.doctype.material_request.material_request import make_purchase_order report = "Requested Items To Be Ordered" for row in query_report.run(report)["result"][:how_many("Purchase Order")]: if row[0] != "Total": po = webnotes.bean(make_purchase_order(row[0])) po.doc.transaction_date = current_date po.doc.fiscal_year = "2013" po.insert() po.submit() webnotes.conn.commit()
def run_stock(current_date): # make purchase requests if can_make("Purchase Receipt"): from buying.doctype.purchase_order.purchase_order import make_purchase_receipt from stock.stock_ledger import NegativeStockError report = "Purchase Order Items To Be Received" for po in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Purchase Receipt")]: pr = webnotes.bean(make_purchase_receipt(po)) pr.doc.posting_date = current_date pr.doc.fiscal_year = current_date.year pr.insert() try: pr.submit() webnotes.conn.commit() except NegativeStockError: pass # make delivery notes (if possible) if can_make("Delivery Note"): from selling.doctype.sales_order.sales_order import make_delivery_note from stock.stock_ledger import NegativeStockError from stock.doctype.serial_no.serial_no import SerialNoRequiredError, SerialNoQtyError 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"]))[:how_many("Delivery Note")]: dn = webnotes.bean(make_delivery_note(so)) dn.doc.posting_date = current_date dn.doc.fiscal_year = current_date.year for d in dn.doclist.get({"parentfield": "delivery_note_details"}): d.expense_account = "Cost of Goods Sold - {}".format(company_abbr) dn.insert() try: dn.submit() webnotes.conn.commit() except NegativeStockError: pass except SerialNoRequiredError: pass except SerialNoQtyError: pass # try submitting existing for dn in webnotes.conn.get_values("Delivery Note", {"docstatus": 0}, "name"): b = webnotes.bean("Delivery Note", dn[0]) b.submit() webnotes.conn.commit()
def run_stock(current_date): # make purchase requests if can_make("Purchase Receipt"): from buying.doctype.purchase_order.purchase_order import make_purchase_receipt report = "Purchase Order Items To Be Received" for po in list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:how_many("Purchase Receipt")]: pr = webnotes.bean(make_purchase_receipt(po)) pr.doc.posting_date = current_date pr.doc.fiscal_year = "2013" pr.insert() pr.submit() webnotes.conn.commit() # make delivery notes (if possible) if can_make("Delivery Note"): from selling.doctype.sales_order.sales_order import make_delivery_note from stock.stock_ledger import NegativeStockError from stock.doctype.stock_ledger_entry.stock_ledger_entry import SerialNoRequiredError, SerialNoQtyError 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"]))[:how_many("Delivery Note")]: dn = webnotes.bean(make_delivery_note(so)) dn.doc.posting_date = current_date dn.doc.fiscal_year = "2013" dn.insert() try: dn.submit() webnotes.conn.commit() except NegativeStockError: pass except SerialNoRequiredError: pass except SerialNoQtyError: pass # try submitting existing for dn in webnotes.conn.get_values("Delivery Note", {"docstatus": 0}, "name"): b = webnotes.bean("Delivery Note", dn[0]) b.submit() webnotes.conn.commit()