コード例 #1
0
def validate_items_stock_level(doc,method):
    settings = frappe.get_single("Extraesia Settings")
    if not settings.sales_order_items_validation:
        return
    for item in doc.items:
        item_data = get_data(item.item_code)
        for data in item_data:
            if data["warehouse"] == item.warehouse:
                if data["projected_qty"] < item.qty:
                    frappe.throw(_("Available for item {0} in warehouse {1} quantity {2} available for sale".format(item.item_code,item.warehouse,data["projected_qty"])))
コード例 #2
0
ファイル: ngse_bom.py プロジェクト: Suraj787/ngsebom
 def get_stock_and_rate(self):
     from erpnext.stock.dashboard.item_dashboard import get_data
     from erpnext.stock.get_item_details import get_price_list_rate
     stock_data = get_data(self.itemid)
     data = []
     total_stock = 0
     for d in stock_data:
         total_stock += d.actual_qty
         data.append({
             'warehouse': d.warehouse,
             'actual_qty': d.actual_qty,
             'uom': self.stock_uom
         })
     args = frappe._dict({
         "doctype":
         self.doctype,
         "price_list":
         frappe.db.get_single_value("NGSE BOM Setting",
                                    "buying_price_list"),
         "qty":
         1,
         "uom":
         self.uom or "Nos",
         "stock_uom":
         self.stock_uom,
         "transaction_type":
         "buying",
         "company":
         frappe.defaults.get_defaults("Company")["company"],
         "currency":
         frappe.defaults.get_defaults("Company")["currency"],
         "conversion_rate":
         1,  # Passed conversion rate as 1 purposefully, as conversion rate is applied at the end of the function
         "conversion_factor":
         1,
         "plc_conversion_rate":
         1,
         "ignore_party":
         True
     })
     item_doc = frappe.get_doc("Item", self.itemid)
     out = frappe._dict()
     get_price_list_rate(args, item_doc, out)
     rate = out.price_list_rate
     data.append({
         'warehouse': "Total Stock",
         'actual_qty': total_stock,
         'uom': self.stock_uom
     })
     data.append({
         'warehouse': "Rate",
         'actual_qty': rate,
         'uom': frappe.defaults.get_defaults("Company")["currency"]
     })
     return data, total_stock, rate
コード例 #3
0
def on_submit(doc, method):
	"""Handle sample item"""
	if frappe.flags.in_import or frappe.flags.in_test:
		return

	if not doc.is_sample:
		return

	valid_groups = [
		_('Flower Lot'),
		_('CO2 Hash Oil'),
		_('Food Grade Solvent Extract'),
		_('Hydrocarbon Wax'),
		_('Marijuana Extract for Inhalation'),
		_('Solid Marijuana Infused Edible'),
		_('Usable Marijuana')
	]

	item_group = frappe.get_value("Item", doc.item_code, "item_group")
	if not _(item_group) in valid_groups:
		frappe.throw(
			_("Item is not eligible for making sample."),
			title="Invalid Item")

	# Stock update had been handled by delivery_note
	if doc.inspection_type == "Outgoing" and doc.delivery_note_no:
		return

	inventories = get_data(item_code=doc.item_code)
	source_warehouse = None
	actual_qty = 0

	for inventory in inventories:
		if inventory.actual_qty > actual_qty:
			actual_qty = inventory.actual_qty

		if inventory.actual_qty >= doc.sample_size:
			source_warehouse = inventory.warehouse
			break

	if not source_warehouse:
		frappe.throw(
			_("Qty is not available for provided sample size. Qty remaining <strong>{0}</strong>.").format(actual_qty),
			title="Insufficient Stock")

	make_stock_entry(item_code=doc.item_code, source=source_warehouse, qty=doc.sample_size)
コード例 #4
0
def execute_board_detail(filters=None):
	columns = get_detailed_corrugation_columns()
	items = get_data(None, None, "Board Layer")
	data = []
	for item in items:
		if item.actual_qty == 0: continue
		orders = frappe.db.sql("""select mfg_date, name, stock_batch_qty from `tabCM Corrugation Order`
										where board_name='{0}' and stock_batch_qty > 0 and docstatus != 2""".format(item.item_code), as_dict=1)
		for order in orders:
			if (order.stock_batch_qty == 0): continue
			lt = list()
			lt.append(order.mfg_date)
			lt.append (item.item_code)
			lt.append (order.stock_batch_qty)
			lt.append(order.name)
			data.append (lt)
	print("Returning data")
	return columns, data
コード例 #5
0
def execute(filters=None):
	item_groups = [filters.get("group_name")]
	if ("Board Detail" in item_groups):
		return execute_board_detail(filters)

	if (filters.get("group_name") == "Others"):
		item_groups = ["Gum", "Ink"]
	columns, data, items = [], [], []
	for item_group in item_groups:
		items += get_data(None, None, item_group)
	if (filters.get("group_name") == "Products"):
		columns = get_detailed_production_columns()
	else:
		columns = get_columns ()
	for item in items:
		if item.actual_qty == 0: continue
		lt = list()
		lt.append (item.item_code)
		lt.append (item.actual_qty)
		lt.append (item.warehouse)
		notes = ""
		if (item_group == "Paper"):
			rolls = frappe.db.sql("""select number, weight from `tabCM Paper Roll` where paper='{0}'""".format(item.item_code), as_dict=1)
			notes = ", ".join(roll.number + "(" + str(int(roll.weight)) + ")" for roll in rolls if roll.weight > 10)
		elif (item_group == "Board Layer"):
			orders = frappe.db.sql("""select name, stock_batch_qty from `tabCM Corrugation Order`
											where board_name='{0}' and stock_batch_qty > 0 and docstatus != 2""".format(item.item_code), as_dict=1)
			notes = ", ".join(order.name + "(" + str(order.stock_batch_qty) + ")" for order in orders)
		elif (item_group == "Products"):
			orders = frappe.db.sql("""select name from `tabCM Corrugation Order`
											where box ='{0}' and stock_qty > 0 """.format(item.item_code), as_dict=1)
			production_order = ", ".join(order.name  for order in orders)	
			lt.append(production_order)
		if (item_group <> "Products"):	
			lt.append(notes)
		data.append (lt)
	return columns, data
コード例 #6
0
ファイル: test_item.py プロジェクト: ankush/erpnext
    def test_item_dashboard(self):
        from erpnext.stock.dashboard.item_dashboard import get_data

        self.assertTrue(get_data(item_code="_Test Item"))
        self.assertTrue(get_data(warehouse="_Test Warehouse - _TC"))
        self.assertTrue(get_data(item_group="All Item Groups"))
コード例 #7
0
def get_item_available_qty(item):
    item_available_qty = 0
    item_data = get_data(item)
    for data in item_data:
        item_available_qty += data["projected_qty"]
    return item_available_qty