def make_stock_entry(production_order_id, purpose, qty=None): production_order = frappe.get_doc("Production Order", production_order_id) if not frappe.db.get_value("Warehouse", production_order.wip_warehouse, "is_group") \ and not production_order.skip_transfer: wip_warehouse = production_order.wip_warehouse else: wip_warehouse = None stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.production_order = production_order_id stock_entry.company = production_order.company stock_entry.from_bom = 1 stock_entry.bom_no = production_order.bom_no stock_entry.use_multi_level_bom = production_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(production_order.qty) - flt(production_order.produced_qty)) if purpose == "Material Transfer for Manufacture": stock_entry.to_warehouse = wip_warehouse stock_entry.project = production_order.project else: stock_entry.from_warehouse = wip_warehouse stock_entry.to_warehouse = production_order.fg_warehouse additional_costs = get_additional_costs( production_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.project = production_order.project stock_entry.set("additional_costs", additional_costs) stock_entry.get_items() return stock_entry.as_dict()
def make_stock_entry(self, bom, purpose, sales_order_no=None, qty=None): stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.sales_order = sales_order_no stock_entry.delivery_note_no = self.name stock_entry.company = self.company stock_entry.from_bom = 1 stock_entry.bom_no = bom stock_entry.use_multi_level_bom = 1 stock_entry.fg_completed_qty = qty if purpose == "Manufacture": # stock_entry.from_warehouse = production_order.wip_warehouse # stock_entry.to_warehouse = production_order.fg_warehouse stock_entry.project = self.project from erpnext.stock.doctype.stock_entry.stock_entry import get_additional_costs additional_costs = get_additional_costs( production_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.set("additional_costs", additional_costs) else: # stock_entry.from_warehouse = production_order.source_warehouse # stock_entry.to_warehouse = production_order.wip_warehouse stock_entry.project = self.project stock_entry.get_items() return stock_entry.as_dict()
def make_stock_entry(work_order_id, purpose, qty=None): work_order = frappe.get_doc("Work Order", work_order_id) if not frappe.db.get_value("Warehouse", work_order.wip_warehouse, "is_group") \ and not work_order.skip_transfer: wip_warehouse = work_order.wip_warehouse else: wip_warehouse = None stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.work_order = work_order_id stock_entry.company = work_order.company stock_entry.from_bom = 1 stock_entry.bom_no = work_order.bom_no stock_entry.use_multi_level_bom = work_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(work_order.qty) - flt(work_order.produced_qty)) if work_order.bom_no: stock_entry.inspection_required = frappe.db.get_value('BOM', work_order.bom_no, 'inspection_required') if purpose=="Material Transfer for Manufacture": stock_entry.to_warehouse = wip_warehouse stock_entry.project = work_order.project else: stock_entry.from_warehouse = wip_warehouse stock_entry.to_warehouse = work_order.fg_warehouse stock_entry.project = work_order.project if purpose=="Manufacture": additional_costs = get_additional_costs(work_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.set("additional_costs", additional_costs) stock_entry.set_stock_entry_type() stock_entry.get_items() return stock_entry.as_dict()
def make_stock_entry(production_order_id, purpose, qty=None): production_order = frappe.get_doc("Production Order", production_order_id) stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.production_order = production_order_id stock_entry.company = production_order.company stock_entry.from_bom = 1 stock_entry.bom_no = production_order.bom_no stock_entry.use_multi_level_bom = production_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(production_order.qty) - flt(production_order.produced_qty)) if purpose=="Material Transfer for Manufacture": if production_order.source_warehouse: stock_entry.from_warehouse = production_order.source_warehouse stock_entry.to_warehouse = production_order.wip_warehouse stock_entry.project = production_order.project else: stock_entry.from_warehouse = production_order.wip_warehouse stock_entry.to_warehouse = production_order.fg_warehouse additional_costs = get_additional_costs(production_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.project = frappe.db.get_value("Stock Entry",{"production_order": production_order_id,"purpose": "Material Transfer for Manufacture"}, "project") stock_entry.set("additional_costs", additional_costs) stock_entry.get_items() stock_entry.docstatus=1 stock_entry.save() return stock_entry.as_dict()
def make_stock_entry(production_order_id, purpose, qty=None): production_order = frappe.get_doc("Production Order", production_order_id) if not frappe.db.get_value("Warehouse", production_order.wip_warehouse, "is_group"): wip_warehouse = production_order.wip_warehouse else: wip_warehouse = None stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.production_order = production_order_id stock_entry.company = production_order.company stock_entry.from_bom = 1 stock_entry.bom_no = production_order.bom_no stock_entry.use_multi_level_bom = production_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(production_order.qty) - flt(production_order.produced_qty)) if purpose=="Material Transfer for Manufacture": stock_entry.to_warehouse = wip_warehouse stock_entry.project = production_order.project else: stock_entry.from_warehouse = wip_warehouse stock_entry.to_warehouse = production_order.fg_warehouse additional_costs = get_additional_costs(production_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.project = production_order.project stock_entry.set("additional_costs", additional_costs) stock_entry.get_items() return stock_entry.as_dict()
def make_stock_entry(work_order_id, purpose, qty=None): work_order = frappe.get_doc("Work Order", work_order_id) if not frappe.db.get_value("Warehouse", work_order.wip_warehouse, "is_group") \ and not work_order.skip_transfer: wip_warehouse = work_order.wip_warehouse else: wip_warehouse = None stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.work_order = work_order_id stock_entry.company = work_order.company stock_entry.from_bom = 1 stock_entry.bom_no = work_order.bom_no stock_entry.use_multi_level_bom = work_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(work_order.qty) - flt(work_order.produced_qty)) if work_order.bom_no: stock_entry.inspection_required = frappe.db.get_value('BOM', work_order.bom_no, 'inspection_required') if purpose=="Material Transfer for Manufacture": stock_entry.to_warehouse = wip_warehouse stock_entry.project = work_order.project else: stock_entry.from_warehouse = wip_warehouse stock_entry.to_warehouse = work_order.fg_warehouse stock_entry.project = work_order.project if purpose=="Manufacture": additional_costs = get_additional_costs(work_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.set("additional_costs", additional_costs) stock_entry.get_items() return stock_entry.as_dict()
def make_stock_entry(production_order_id, purpose, qty=None, tipo=None): production_order = frappe.get_doc("Production Order", production_order_id) if not frappe.db.get_value("Warehouse", production_order.wip_warehouse, "is_group") \ and not production_order.skip_transfer: wip_warehouse = production_order.wip_warehouse else: wip_warehouse = None stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.production_order = production_order_id stock_entry.company = production_order.company stock_entry.from_bom = 1 stock_entry.bom_no = production_order.bom_no stock_entry.use_multi_level_bom = production_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(production_order.qty) - flt(production_order.produced_qty)) if purpose=="Material Transfer for Manufacture": stock_entry.to_warehouse = wip_warehouse stock_entry.project = production_order.project else: stock_entry.from_warehouse = wip_warehouse stock_entry.to_warehouse = production_order.fg_warehouse additional_costs = get_additional_costs(production_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.project = production_order.project stock_entry.set("additional_costs", additional_costs) stock_entry.get_items() # customization stock_entry.tipo = tipo items = [] value = 1 if tipo == 'impresion' else 0 for i in stock_entry.items: print i if frappe.get_value('Item', i.item_code, 'print_process_required') == value: items.append(i) stock_entry.set('items', items) stock_entry.save() # return stock_entry.as_dict()
def make_stock_entry(production_order_id, purpose, qty=None, save=False, skip_transfer=False, verify_past_se=False): production_order = frappe.get_doc("Production Order", production_order_id) if verify_past_se: ste_list = [] stock_entries = frappe.db.sql( """select name from `tabStock Entry` where production_order=%s and docstatus=0 and purpose=%s and bom_no = %s and fg_completed_qty = %s""", (production_order_id, purpose, production_order.bom_no, qty), as_dict=1) if stock_entries: return None if skip_transfer: wip_warehouse = production_order.source_warehouse # elif not frappe.db.get_value("Warehouse", production_order.wip_warehouse, "is_group") \ # and not production_order.skip_transfer: # wip_warehouse = production_order.wip_warehouse else: wip_warehouse = production_order.wip_warehouse if frappe.db.get_value("Warehouse", wip_warehouse, "is_group"): wip_warehouse = None stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.production_order = production_order_id stock_entry.company = production_order.company stock_entry.from_bom = 1 stock_entry.bom_no = production_order.bom_no stock_entry.use_multi_level_bom = production_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(production_order.qty) - flt(production_order.produced_qty)) if purpose == "Material Transfer for Manufacture": stock_entry.to_warehouse = wip_warehouse stock_entry.project = production_order.project else: stock_entry.from_warehouse = wip_warehouse stock_entry.to_warehouse = production_order.fg_warehouse additional_costs = get_additional_costs( production_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.project = production_order.project stock_entry.set("additional_costs", additional_costs) stock_entry.get_items() if save: from erpnext.stock.stock_ledger import NegativeStockError from erpnext.stock.doctype.stock_entry.stock_entry import IncorrectValuationRateError, \ DuplicateEntryForProductionOrderError, OperationsNotCompleteError try: stock_entry.posting_date = frappe.flags.current_date for d in stock_entry.get("items"): d.cost_center = "Main - " + frappe.db.get_value( 'Company', stock_entry.company, 'abbr') stock_entry.insert() frappe.db.commit() except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForProductionOrderError, OperationsNotCompleteError): frappe.db.rollback() return stock_entry.as_dict()
def make_stock_entry(production_order_id, purpose, qty=None): if print_debug: frappe.logger().debug("---radplusplus.manufacturing_controllers.make_stock_entry---") production_order = frappe.get_doc("Production Order", production_order_id) if not frappe.db.get_value("Warehouse", production_order.wip_warehouse, "is_group") \ and not production_order.skip_transfer: wip_warehouse = production_order.wip_warehouse else: wip_warehouse = None stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.production_order = production_order_id stock_entry.company = production_order.company stock_entry.from_bom = 1 stock_entry.bom_no = production_order.bom_no stock_entry.use_multi_level_bom = production_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(production_order.qty) - flt(production_order.produced_qty)) if purpose=="Material Transfer for Manufacture": defaut_raw_warehouse = frappe.db.get_single_value('Manufacturing Settings', 'default_raw_material_warehouse') if defaut_raw_warehouse: stock_entry.from_warehouse = defaut_raw_warehouse stock_entry.to_warehouse = production_order.wip_warehouse stock_entry.project = production_order.project if production_order.sales_order: doc_sales_order = frappe.get_doc("Sales Order", production_order.sales_order) if doc_sales_order.po_no: stock_entry.po_no = doc_sales_order.po_no else: stock_entry.from_warehouse = production_order.wip_warehouse stock_entry.to_warehouse = production_order.fg_warehouse additional_costs = get_additional_costs(production_order, fg_qty=stock_entry.fg_completed_qty) # stock_entry.project = frappe.db.get_value("Stock Entry",{"production_order": production_order_id,"purpose": "Material Transfer for Manufacture"}, "project") - renmai - 2018-02-20 - V10 stock_entry.project = production_order.project stock_entry.set("additional_costs", additional_costs) get_items(stock_entry) if purpose=="Material Transfer for Manufacture": for d in stock_entry.items: item = frappe.get_doc("Item",d.item_code) if production_order.sales_order_item and item.variant_of == "PM": if frappe.db.get_value("Sales Order Item", production_order.sales_order_item, "description_sous_traitance"): # d.s_warehouse = frappe.db.get_value("Customer", production_order.customer, "default_warehouse") - renmai - 2018-02-20 - V10 d.allow_zero_valuation_rate = 1 # else: # d.s_warehouse = item.default_warehouse # elif item.default_warehouse: # d.s_warehouse = item.default_warehouse # else: # d.s_warehouse = production_order.source_warehouse if purpose=="Manufacture": stock_entry_for_reserved_material = frappe.get_value("Stock Entry", filters={"production_order": production_order_id, "purpose":"Material Transfer for Manufacture", "docstatus":1}) reserved_material = frappe.get_doc("Stock Entry",stock_entry_for_reserved_material) for d in stock_entry.items: item = frappe.get_doc("Item",d.item_code) stock_entry_for_reserved_material_item = frappe.get_value("Stock Entry Detail", filters={"parent": stock_entry_for_reserved_material, "item_code":item.name}) if stock_entry_for_reserved_material_item: reserved_material_detail = frappe.get_doc("Stock Entry Detail",stock_entry_for_reserved_material_item) if production_order.customer and item.variant_of == "PM": d.allow_zero_valuation_rate = 1 if reserved_material_detail.qty_per_box: d.qty_per_box = reserved_material_detail.qty_per_box return stock_entry.as_dict()
def make_stock_entry(production_order_id, purpose, qty=None): if print_debug: frappe.errprint("make_stock_entry") production_order = frappe.get_doc("Production Order", production_order_id) if print_debug: frappe.msgprint(cstr(production_order.name)) stock_entry = frappe.new_doc("Stock Entry") stock_entry.purpose = purpose stock_entry.production_order = production_order_id stock_entry.company = production_order.company stock_entry.from_bom = 1 stock_entry.bom_no = production_order.bom_no stock_entry.use_multi_level_bom = production_order.use_multi_level_bom stock_entry.fg_completed_qty = qty or (flt(production_order.qty) - flt(production_order.produced_qty)) if purpose=="Material Transfer for Manufacture": if print_debug: frappe.errprint("if purpose") if production_order.source_warehouse: stock_entry.from_warehouse = production_order.source_warehouse stock_entry.to_warehouse = production_order.wip_warehouse stock_entry.project = production_order.project if production_order.sales_order: if print_debug: frappe.errprint("if production_order.sales_order : " + production_order.sales_order) doc_sales_order = frappe.get_doc("Sales Order", production_order.sales_order) if doc_sales_order.po_no: stock_entry.po_no = doc_sales_order.po_no else: stock_entry.from_warehouse = production_order.wip_warehouse stock_entry.to_warehouse = production_order.fg_warehouse additional_costs = get_additional_costs(production_order, fg_qty=stock_entry.fg_completed_qty) stock_entry.project = frappe.db.get_value("Stock Entry",{"production_order": production_order_id,"purpose": "Material Transfer for Manufacture"}, "project") stock_entry.set("additional_costs", additional_costs) get_items(stock_entry) if purpose=="Material Transfer for Manufacture": if print_debug: frappe.msgprint("Début du balayage des lignes d'entrée de stock.") for d in stock_entry.items: if print_debug: frappe.msgprint("Item : " + d.item_code) item = frappe.get_doc("Item",d.item_code) if production_order.sales_order_item and item.variant_of == "PM": if print_debug: frappe.msgprint("Si ligne de commande et PM.") if frappe.db.get_value("Sales Order Item", production_order.sales_order_item, "description_sous_traitance"): d.s_warehouse = frappe.db.get_value("Customer", production_order.customer, "default_warehouse") d.is_sample_item = 1 else: d.s_warehouse = item.default_warehouse elif item.default_warehouse: if print_debug: frappe.msgprint("Si entrepôt par défaut de l'item.") d.s_warehouse = item.default_warehouse else: if print_debug: frappe.msgprint("Entrepôt par défaut de l'OF.") d.s_warehouse = production_order.source_warehouse if purpose=="Manufacture": if print_debug: frappe.msgprint("production_order.name : " + production_order.name) stock_entry_for_reserved_material = frappe.get_value("Stock Entry", filters={"production_order": production_order_id, "purpose":"Material Transfer for Manufacture", "docstatus":1}) if print_debug: frappe.msgprint("stock_entry_for_reserved_material : " + stock_entry_for_reserved_material) reserved_material = frappe.get_doc("Stock Entry",stock_entry_for_reserved_material) for d in stock_entry.items: item = frappe.get_doc("Item",d.item_code) if print_debug: frappe.msgprint("item.name : " + item.name) stock_entry_for_reserved_material_item = frappe.get_value("Stock Entry Detail", filters={"parent": stock_entry_for_reserved_material, "item_code":item.name}) if stock_entry_for_reserved_material_item: reserved_material_detail = frappe.get_doc("Stock Entry Detail",stock_entry_for_reserved_material_item) if print_debug: frappe.msgprint("stock_entry_for_reserved_material_item : " ) if print_debug: frappe.msgprint(stock_entry_for_reserved_material_item) if production_order.customer and item.variant_of == "PM": d.is_sample_item = 1 #d.batch_no = reserved_material_detail.batch_no if reserved_material_detail.qty_per_box: d.qty_per_box = reserved_material_detail.qty_per_box return stock_entry.as_dict()