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()
Exemple #2
0
    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()
Exemple #3
0
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()
Exemple #6
0
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()
Exemple #7
0
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()
Exemple #8
0
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()
Exemple #9
0
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()
Exemple #10
0
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()