/*----------------------------------------------------Level 1------------------------------------------------------------*/
//Checking if row.Level == 1, then run all the levels
if(row.Level == "Level-1")
{
	for each  cwplrec in input.BoM_Details_CWPL
	{
		//LEVEL-1
		if(cwplrec.Level == "Level-1")
		{
			for each  lis1 in Create_BOM[Part_No == cwplrec.Part_No]
			{
				for each  var in input.BoM_Details_CWPL
				{
					if(var.Part_No.Part_No == lis1.Material_Details.Part_No.Part_No)
					{
						var.BoM_Qty=cwplrec.Actual_Qty;
						var.Actual_Qty=ifnull(var.BoM_Qty,0.0) * ifnull(var.bom_stk_qty,0.0) - ifnull(var.Stock_Qty,0.0);
						var.Plan_Qty=var.Actual_Qty;
					}
					if(var.Stock_Qty > var.BoM_Qty)
					{
						var.Blocked_Qty=var.Actual_Qty;
					}
					if(var.Stock_Qty != 0 && var.Blocked_Qty > var.Stock_Qty || var.Stock_Qty < var.BoM_Qty)
					{
						var.Blocked_Qty=var.Stock_Qty;
					}
					//Below Foreach is for General Purchase calculation
					for each  vargp in input.BoM_Details_General_Purchase
					{
						row.Tot_BoM_Qty=ifnull(input.MRP_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						if(vargp.Part_No.Part_No.startswith("BT") == true || vargp.Part_No.Part_No.startswith("NT") == true || vargp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var.Part_No.Part_No.contains("_UP") == true)
							{
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								vargp.BoM_Qty=ifnull(var.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(vargp.BoM_Qty,0) * ifnull(vargp.Org_BoM_Qty,0.0) - ifnull(vargp.Stock_Qty,0) >= 0)
								{
									vargp.Plan_Qty=ifnull(vargp.BoM_Qty,0) * ifnull(vargp.Org_BoM_Qty,0.0) - ifnull(vargp.Stock_Qty,0);
								}
								else
								{
									vargp.Plan_Qty=ifnull(vargp.Stock_Qty,0) - ifnull(vargp.BoM_Qty,0) * ifnull(vargp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								vargp.Purchase_Qty=ifnull(vargp.Plan_Qty,0);
							}
						}
						else
						{
							if(vargp.Level == var.Level && vargp.Level == "Level-1")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								vargp.BoM_Qty=var.Actual_Qty;
								if(ifnull(vargp.BoM_Qty,0) * ifnull(vargp.Org_BoM_Qty,0.0) - ifnull(vargp.Stock_Qty,0) >= 0)
								{
									vargp.Plan_Qty=ifnull(vargp.BoM_Qty,0) * ifnull(vargp.Org_BoM_Qty,0.0) - ifnull(vargp.Stock_Qty,0);
								}
								else
								{
									vargp.Plan_Qty=ifnull(vargp.Stock_Qty,0) - ifnull(vargp.BoM_Qty,0) * ifnull(vargp.Org_BoM_Qty,0.0);
								}
								vargp.Purchase_Qty=vargp.Plan_Qty;
							}
						}
					}
				}
			}
		}
		//LEVEL-2
		if(cwplrec.Level == "Level-2")
		{
			info "level2";
			info cwplrec.Actual_Qty;
			for each  lis2 in Create_BOM[Part_No == cwplrec.Part_No]
			{
				for each  var2 in input.BoM_Details_CWPL
				{
					if(var2.Part_No.Part_No == lis2.Material_Details.Part_No.Part_No)
					{
						var2.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var2.BoM_Qty=cwplrec.Actual_Qty;
						var2.Actual_Qty=ifnull(var2.BoM_Qty,0.0) * ifnull(var2.bom_stk_qty,0.0) - ifnull(var2.Stock_Qty,0.0);
						var2.Plan_Qty=var2.Actual_Qty;
					}
					if(var2.Stock_Qty > var2.BoM_Qty)
					{
						var2.Blocked_Qty=var2.Actual_Qty;
					}
					if(var2.Stock_Qty != 0 && var2.Blocked_Qty > var2.Stock_Qty || var2.Stock_Qty < var2.BoM_Qty)
					{
						var2.Blocked_Qty=var2.Stock_Qty;
					}
					for each  var2gp in input.BoM_Details_General_Purchase
					{
						row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						if(var2gp.Part_No.Part_No.startswith("BT") == true || var2gp.Part_No.Part_No.startswith("NT") == true || var2gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var2.Part_No.Part_No.contains("_UP") == true)
							{
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var2gp.BoM_Qty=ifnull(var2.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0) >= 0)
								{
									var2gp.Plan_Qty=ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0);
								}
								else
								{
									var2gp.Plan_Qty=ifnull(var2gp.Stock_Qty,0) - ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var2gp.Purchase_Qty=ifnull(var2gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var2gp.Level == var2.Level && var2gp.Level == "Level-2")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var2gp.BoM_Qty=var2.Actual_Qty;
								//var2gp.Plan_Qty=ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0) >= 0)
								{
									var2gp.Plan_Qty=ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0);
								}
								else
								{
									var2gp.Plan_Qty=ifnull(var2gp.Stock_Qty,0) - ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0);
								}
								var2gp.Purchase_Qty=var2gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec.Plan_Qty=ifnull(cwplrec.BoM_Qty,0.0) * ifnull(cwplrec.bom_stk_qty,0.0) - ifnull(cwplrec.Stock_Qty,0.0);
			//cwplrec.Actual_Qty=cwplrec.Plan_Qty;
		}
		//LEVEL-3  
		if(cwplrec.Level == "Level-3")
		{
			for each  lis3 in Create_BOM[Part_No == cwplrec.Part_No]
			{
				for each  var3 in input.BoM_Details_CWPL
				{
					if(var3.Part_No.Part_No == lis3.Material_Details.Part_No.Part_No)
					{
						var3.Tot_BoM_Qty=ifnull(var3.BoM_Qty,0) * ifnull(var3.bom_stk_qty,0.0);
						var3.BoM_Qty=cwplrec.Actual_Qty;
						var3.Actual_Qty=ifnull(var3.BoM_Qty,0.0) * ifnull(var3.bom_stk_qty,0.0) - ifnull(var3.Stock_Qty,0.0);
						var3.Plan_Qty=var3.Actual_Qty;
					}
					if(var3.Stock_Qty > var3.BoM_Qty)
					{
						var3.Blocked_Qty=var3.Actual_Qty;
					}
					if(var3.Stock_Qty != 0 && var3.Blocked_Qty > var3.Stock_Qty || var3.Stock_Qty < var3.BoM_Qty)
					{
						var3.Blocked_Qty=var3.Stock_Qty;
					}
					for each  var3gp in input.BoM_Details_General_Purchase
					{
						if(var3gp.Part_No.Part_No.startswith("BT") == true || var3gp.Part_No.Part_No.startswith("NT") == true || var3gp.Part_No.Part_No.startswith("WS") == true)
						{
							row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var3.Part_No.Part_No.contains("_UP") == true)
							{
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var3gp.BoM_Qty=ifnull(var3.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0) >= 0)
								{
									var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								}
								else
								{
									var3gp.Plan_Qty=ifnull(var3gp.Stock_Qty,0) - ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var3gp.Purchase_Qty=ifnull(var3gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var3gp.Level == var3.Level && var3gp.Level == "Level-3")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var3gp.BoM_Qty=var3.Actual_Qty;
								//var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0) >= 0)
								{
									var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								}
								else
								{
									var3gp.Plan_Qty=ifnull(var3gp.Stock_Qty,0) - ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var3gp.Purchase_Qty=var3gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec.Plan_Qty=ifnull(cwplrec.BoM_Qty,0.0) * ifnull(cwplrec.bom_stk_qty,0.0) - ifnull(cwplrec.Stock_Qty,0.0);
			//cwplrec.Actual_Qty=cwplrec.Plan_Qty;
		}
		//LEVEL-4
		if(cwplrec.Level == "Level-4")
		{
			for each  lis4 in Create_BOM[Part_No == cwplrec.Part_No]
			{
				for each  var4 in input.BoM_Details_CWPL
				{
					if(var4.Part_No.Part_No == lis4.Material_Details.Part_No.Part_No)
					{
						var4.Tot_BoM_Qty=ifnull(var4.Actual_Qty,0) * ifnull(var4.bom_stk_qty,0.0);
						var4.BoM_Qty=cwplrec.Actual_Qty;
						var4.Actual_Qty=ifnull(var4.BoM_Qty,0.0) * ifnull(var4.bom_stk_qty,0.0) - ifnull(var4.Stock_Qty,0.0);
						var4.Plan_Qty=var4.Actual_Qty;
					}
					if(var4.Stock_Qty > var4.BoM_Qty)
					{
						var4.Blocked_Qty=var4.Actual_Qty;
					}
					if(var4.Stock_Qty != 0 && var4.Blocked_Qty > var4.Stock_Qty || var4.Stock_Qty < var4.BoM_Qty)
					{
						var4.Blocked_Qty=var4.Stock_Qty;
					}
					for each  var4gp in input.BoM_Details_General_Purchase
					{
						row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						if(var4gp.Part_No.Part_No.startswith("BT") == true || var4gp.Part_No.Part_No.startswith("NT") == true || var4gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var4.Part_No.Part_No.contains("_UP") == true)
							{
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var4gp.BoM_Qty=ifnull(var4.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0) >= 0)
								{
									var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								}
								else
								{
									var4gp.Plan_Qty=ifnull(var4gp.Stock_Qty,0) - ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var4gp.Purchase_Qty=ifnull(var4gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var4gp.Level == var4.Level && var4gp.Level == "Level-4")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var4gp.BoM_Qty=var4.Actual_Qty;
								//  var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0) >= 0)
								{
									var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								}
								else
								{
									var4gp.Plan_Qty=ifnull(var4gp.Stock_Qty,0) - ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var4gp.Purchase_Qty=var4gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec.Plan_Qty=ifnull(cwplrec.BoM_Qty,0.0) * ifnull(cwplrec.bom_stk_qty,0.0) - ifnull(cwplrec.Stock_Qty,0.0);
			//cwplrec.Actual_Qty=cwplrec.Plan_Qty;
		}
		//LEVEL-5
		if(cwplrec.Level == "Level-5")
		{
			for each  lis5 in Create_BOM[Part_No == cwplrec.Part_No]
			{
				for each  var5 in input.BoM_Details_CWPL
				{
					if(var5.Part_No.Part_No == lis5.Material_Details.Part_No.Part_No)
					{
						var5.Tot_BoM_Qty=ifnull(var5.Actual_Qty,0) * ifnull(var5.bom_stk_qty,0.0);
						var5.BoM_Qty=cwplrec.Actual_Qty;
						var5.Actual_Qty=ifnull(var5.BoM_Qty,0.0) * ifnull(var5.bom_stk_qty,0.0) - ifnull(var5.Stock_Qty,0.0);
						var5.Plan_Qty=var5.Actual_Qty;
					}
					for each  var5gp in input.BoM_Details_General_Purchase
					{
						if(var5gp.Level == var5.Level && var5gp.Level == "Level-5")
						{
							row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
							var5gp.BoM_Qty=var5.Actual_Qty;
							//  var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
							//Below ifelse is to check negative value
							if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
							{
								var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
							}
							else
							{
								var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
							}
							//Above ifelse ends here
							var5gp.Purchase_Qty=var5gp.Plan_Qty;
						}
					}
				}
			}
			//cwplrec.Plan_Qty=ifnull(cwplrec.BoM_Qty,0.0) * ifnull(cwplrec.bom_stk_qty,0.0) - ifnull(cwplrec.Stock_Qty,0.0);
			//cwplrec.Actual_Qty=cwplrec.Plan_Qty;
		}
	}
	//Foreach Ends
}
//Level1 checking close
/*----------------------------------------------------Level 2------------------------------------------------------------*/
//Checking if row.Level == 2, then run all the levels >=2
if(row.Level == "Level-2")
{
	for each  cwplrec2 in input.BoM_Details_CWPL
	{
		//LEVEL-2
		if(cwplrec2.Level == "Level-2")
		{
			for each  lis2 in Create_BOM[Part_No == cwplrec2.Part_No]
			{
				for each  var2 in input.BoM_Details_CWPL
				{
					if(var2.Part_No.Part_No == lis2.Material_Details.Part_No.Part_No)
					{
						var2.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var2.BoM_Qty=cwplrec2.Actual_Qty;
						var2.Actual_Qty=ifnull(var2.BoM_Qty,0.0) * ifnull(var2.bom_stk_qty,0.0) - ifnull(var2.Stock_Qty,0.0);
						var2.Plan_Qty=var2.Actual_Qty;
					}
					for each  var2gp in input.BoM_Details_General_Purchase
					{
						if(var2gp.Part_No.Part_No.startswith("BT") == true || var2gp.Part_No.Part_No.startswith("NT") == true || var2gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var2.Part_No.Part_No.contains("_UP") == true)
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var2gp.BoM_Qty=ifnull(var2.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0) >= 0)
								{
									var2gp.Plan_Qty=ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0);
								}
								else
								{
									var2gp.Plan_Qty=ifnull(var2gp.Stock_Qty,0) - ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var2gp.Purchase_Qty=ifnull(var2gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var2gp.Level == var2.Level && var2gp.Level == "Level-2")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var2gp.BoM_Qty=var2.Actual_Qty;
								//var2gp.Plan_Qty=ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0) >= 0)
								{
									var2gp.Plan_Qty=ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0) - ifnull(var2gp.Stock_Qty,0);
								}
								else
								{
									var2gp.Plan_Qty=ifnull(var2gp.Stock_Qty,0) - ifnull(var2gp.BoM_Qty,0) * ifnull(var2gp.Org_BoM_Qty,0.0);
								}
								var2gp.Purchase_Qty=var2gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec2.Plan_Qty=ifnull(cwplrec2.BoM_Qty,0.0) * ifnull(cwplrec2.bom_stk_qty,0.0) - ifnull(cwplrec2.Stock_Qty,0.0);
			//cwplrec2.Actual_Qty=cwplrec2.Plan_Qty;
		}
		//LEVEL-3  
		if(cwplrec2.Level == "Level-3")
		{
			for each  lis3 in Create_BOM[Part_No == cwplrec2.Part_No]
			{
				for each  var3 in input.BoM_Details_CWPL
				{
					if(var3.Part_No.Part_No == lis3.Material_Details.Part_No.Part_No)
					{
						var3.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var3.BoM_Qty=cwplrec2.Actual_Qty;
						var3.Actual_Qty=ifnull(var3.BoM_Qty,0.0) * ifnull(var3.bom_stk_qty,0.0) - ifnull(var3.Stock_Qty,0.0);
						var3.Plan_Qty=var3.Actual_Qty;
					}
					for each  var3gp in input.BoM_Details_General_Purchase
					{
						if(var3gp.Part_No.Part_No.startswith("BT") == true || var3gp.Part_No.Part_No.startswith("NT") == true || var3gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var3.Part_No.Part_No.contains("_UP") == true)
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var3gp.BoM_Qty=ifnull(var3.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0) >= 0)
								{
									var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								}
								else
								{
									var3gp.Plan_Qty=ifnull(var3gp.Stock_Qty,0) - ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var3gp.Purchase_Qty=ifnull(var3gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var3gp.Level == var3.Level && var3gp.Level == "Level-3")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var3gp.BoM_Qty=var3.Actual_Qty;
								//var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0) >= 0)
								{
									var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								}
								else
								{
									var3gp.Plan_Qty=ifnull(var3gp.Stock_Qty,0) - ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var3gp.Purchase_Qty=var3gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec2.Plan_Qty=ifnull(cwplrec2.BoM_Qty,0.0) * ifnull(cwplrec2.bom_stk_qty,0.0) - ifnull(cwplrec2.Stock_Qty,0.0);
			//cwplrec2.Actual_Qty=cwplrec2.Plan_Qty;
		}
		//LEVEL-4
		if(cwplrec2.Level == "Level-4")
		{
			for each  lis4 in Create_BOM[Part_No == cwplrec2.Part_No]
			{
				for each  var4 in input.BoM_Details_CWPL
				{
					if(var4.Part_No.Part_No == lis4.Material_Details.Part_No.Part_No)
					{
						var4.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var4.BoM_Qty=cwplrec2.Actual_Qty;
						var4.Actual_Qty=ifnull(var4.BoM_Qty,0.0) * ifnull(var4.bom_stk_qty,0.0) - ifnull(var4.Stock_Qty,0.0);
						var4.Plan_Qty=var4.Actual_Qty;
					}
					for each  var4gp in input.BoM_Details_General_Purchase
					{
						if(var4gp.Part_No.Part_No.startswith("BT") == true || var4gp.Part_No.Part_No.startswith("NT") == true || var4gp.Part_No.Part_No.startswith("WS") == true)
						{
							row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var4.Part_No.Part_No.contains("_UP") == true)
							{
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var4gp.BoM_Qty=ifnull(var4.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0) >= 0)
								{
									var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								}
								else
								{
									var4gp.Plan_Qty=ifnull(var4gp.Stock_Qty,0) - ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var4gp.Purchase_Qty=ifnull(var4gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var4gp.Level == var4.Level && var4gp.Level == "Level-4")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var4gp.BoM_Qty=var4.Actual_Qty;
								//  var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0) >= 0)
								{
									var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								}
								else
								{
									var4gp.Plan_Qty=ifnull(var4gp.Stock_Qty,0) - ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var4gp.Purchase_Qty=var4gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec2.Plan_Qty=ifnull(cwplrec2.BoM_Qty,0.0) * ifnull(cwplrec2.bom_stk_qty,0.0) - ifnull(cwplrec2.Stock_Qty,0.0);
			//cwplrec2.Actual_Qty=cwplrec2.Plan_Qty;
		}
		//LEVEL-5
		if(cwplrec2.Level == "Level-5")
		{
			for each  lis5 in Create_BOM[Part_No == cwplrec2.Part_No]
			{
				for each  var5 in input.BoM_Details_CWPL
				{
					if(var5.Part_No.Part_No == lis5.Material_Details.Part_No.Part_No)
					{
						var5.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var5.BoM_Qty=cwplrec2.Actual_Qty;
						var5.Actual_Qty=ifnull(var5.BoM_Qty,0.0) * ifnull(var5.bom_stk_qty,0.0) - ifnull(var5.Stock_Qty,0.0);
						var5.Plan_Qty=var5.Actual_Qty;
					}
					for each  var5gp in input.BoM_Details_General_Purchase
					{
						if(var5gp.Part_No.Part_No.startswith("BT") == true || var5gp.Part_No.Part_No.startswith("NT") == true || var5gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var5.Part_No.Part_No.contains("_UP") == true)
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var5gp.BoM_Qty=ifnull(var5.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
								{
									var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								}
								else
								{
									var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var5gp.Purchase_Qty=ifnull(var5gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var5gp.Level == var5.Level && var5gp.Level == "Level-5")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var5gp.BoM_Qty=var5.Actual_Qty;
								//  var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
								{
									var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								}
								else
								{
									var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var5gp.Purchase_Qty=var5gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec2.Plan_Qty=ifnull(cwplrec2.BoM_Qty,0.0) * ifnull(cwplrec2.bom_stk_qty,0.0) - ifnull(cwplrec2.Stock_Qty,0.0);
			//cwplrec2.Actual_Qty=cwplrec2.Plan_Qty;
		}
	}
}
//Level 2 checking close
/*----------------------------------------------------Level 3------------------------------------------------------------*/
////Checking if row.Level == 3, then run all the levels >=3
if(row.Level == "Level-3")
{
	for each  cwplrec3 in input.BoM_Details_CWPL
	{
		//LEVEL-3  
		if(cwplrec3.Level == "Level-3")
		{
			for each  lis3 in Create_BOM[Part_No == cwplrec3.Part_No]
			{
				for each  var3 in input.BoM_Details_CWPL
				{
					if(var3.Part_No.Part_No == lis3.Material_Details.Part_No.Part_No)
					{
						var3.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var3.BoM_Qty=cwplrec3.Actual_Qty;
						var3.Actual_Qty=ifnull(var3.BoM_Qty,0.0) * ifnull(var3.bom_stk_qty,0.0) - ifnull(var3.Stock_Qty,0.0);
						var3.Plan_Qty=var3.Actual_Qty;
					}
					for each  var3gp in input.BoM_Details_General_Purchase
					{
						if(var3gp.Part_No.Part_No.startswith("BT") == true || var3gp.Part_No.Part_No.startswith("NT") == true || var3gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var3.Part_No.Part_No.contains("_UP") == true)
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var3gp.BoM_Qty=ifnull(var3.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0) >= 0)
								{
									var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								}
								else
								{
									var3gp.Plan_Qty=ifnull(var3gp.Stock_Qty,0) - ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var3gp.Purchase_Qty=ifnull(var3gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var3gp.Level == var3.Level && var3gp.Level == "Level-3")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var3gp.BoM_Qty=var3.Actual_Qty;
								//var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0) >= 0)
								{
									var3gp.Plan_Qty=ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0) - ifnull(var3gp.Stock_Qty,0);
								}
								else
								{
									var3gp.Plan_Qty=ifnull(var3gp.Stock_Qty,0) - ifnull(var3gp.BoM_Qty,0) * ifnull(var3gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var3gp.Purchase_Qty=var3gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec3.Plan_Qty=ifnull(cwplrec3.BoM_Qty,0.0) * ifnull(cwplrec3.bom_stk_qty,0.0) - ifnull(cwplrec3.Stock_Qty,0.0);
			//cwplrec3.Actual_Qty=cwplrec3.Plan_Qty;
		}
		//LEVEL-4
		if(cwplrec3.Level == "Level-4")
		{
			for each  lis4 in Create_BOM[Part_No == cwplrec3.Part_No]
			{
				for each  var4 in input.BoM_Details_CWPL
				{
					if(var4.Part_No.Part_No == lis4.Material_Details.Part_No.Part_No)
					{
						var4.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var4.BoM_Qty=cwplrec3.Actual_Qty;
						var4.Actual_Qty=ifnull(var4.BoM_Qty,0.0) * ifnull(var4.bom_stk_qty,0.0) - ifnull(var4.Stock_Qty,0.0);
						var4.Plan_Qty=var4.Actual_Qty;
					}
					for each  var4gp in input.BoM_Details_General_Purchase
					{
						if(var4gp.Part_No.Part_No.startswith("BT") == true || var4gp.Part_No.Part_No.startswith("NT") == true || var4gp.Part_No.Part_No.startswith("WS") == true)
						{
							row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var4.Part_No.Part_No.contains("_UP") == true)
							{
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var4gp.BoM_Qty=ifnull(var4.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0) >= 0)
								{
									var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								}
								else
								{
									var4gp.Plan_Qty=ifnull(var4gp.Stock_Qty,0) - ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var4gp.Purchase_Qty=ifnull(var4gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var4gp.Level == var4.Level && var4gp.Level == "Level-4")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var4gp.BoM_Qty=var4.Actual_Qty;
								//  var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0) >= 0)
								{
									var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								}
								else
								{
									var4gp.Plan_Qty=ifnull(var4gp.Stock_Qty,0) - ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var4gp.Purchase_Qty=var4gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec3.Plan_Qty=ifnull(cwplrec3.BoM_Qty,0.0) * ifnull(cwplrec3.bom_stk_qty,0.0) - ifnull(cwplrec3.Stock_Qty,0.0);
			//cwplrec3.Actual_Qty=cwplrec3.Plan_Qty;
		}
		//LEVEL-5
		if(cwplrec3.Level == "Level-5")
		{
			for each  lis5 in Create_BOM[Part_No == cwplrec3.Part_No]
			{
				for each  var5 in input.BoM_Details_CWPL
				{
					if(var5.Part_No.Part_No == lis5.Material_Details.Part_No.Part_No)
					{
						var5.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var5.BoM_Qty=cwplrec3.Actual_Qty;
						var5.Actual_Qty=ifnull(var5.BoM_Qty,0.0) * ifnull(var5.bom_stk_qty,0.0) - ifnull(var5.Stock_Qty,0.0);
						var5.Plan_Qty=var5.Actual_Qty;
					}
					for each  var5gp in input.BoM_Details_General_Purchase
					{
						if(var5gp.Part_No.Part_No.startswith("BT") == true || var5gp.Part_No.Part_No.startswith("NT") == true || var5gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var5.Part_No.Part_No.contains("_UP") == true)
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var5gp.BoM_Qty=ifnull(var5.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
								{
									var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								}
								else
								{
									var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var5gp.Purchase_Qty=ifnull(var5gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var5gp.Level == var5.Level && var5gp.Level == "Level-5")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var5gp.BoM_Qty=var5.Actual_Qty;
								//  var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
								{
									var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								}
								else
								{
									var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var5gp.Purchase_Qty=var5gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec3.Plan_Qty=ifnull(cwplrec3.BoM_Qty,0.0) * ifnull(cwplrec3.bom_stk_qty,0.0) - ifnull(cwplrec3.Stock_Qty,0.0);
			//cwplrec3.Actual_Qty=cwplrec3.Plan_Qty;
		}
	}
}
//Level 3 checking close
/*----------------------------------------------------Level 4------------------------------------------------------------*/
//Checking if row.Level == 4, then run all the levels >=4
if(row.Level == "Level-4")
{
	for each  cwplrec4 in input.BoM_Details_CWPL
	{
		//LEVEL-4
		if(cwplrec4.Level == "Level-4")
		{
			for each  lis4 in Create_BOM[Part_No == cwplrec4.Part_No]
			{
				for each  var4 in input.BoM_Details_CWPL
				{
					if(var4.Part_No.Part_No == lis4.Material_Details.Part_No.Part_No)
					{
						var4.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var4.BoM_Qty=cwplrec4.Actual_Qty;
						var4.Actual_Qty=ifnull(var4.BoM_Qty,0.0) * ifnull(var4.bom_stk_qty,0.0) - ifnull(var4.Stock_Qty,0.0);
						var4.Plan_Qty=var4.Actual_Qty;
					}
					for each  var4gp in input.BoM_Details_General_Purchase
					{
						if(var4gp.Part_No.Part_No.startswith("BT") == true || var4gp.Part_No.Part_No.startswith("NT") == true || var4gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var4.Part_No.Part_No.contains("_UP") == true)
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var4gp.BoM_Qty=ifnull(var4.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0) >= 0)
								{
									var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								}
								else
								{
									var4gp.Plan_Qty=ifnull(var4gp.Stock_Qty,0) - ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var4gp.Purchase_Qty=ifnull(var4gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var4gp.Level == var4.Level && var4gp.Level == "Level-4")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var4gp.BoM_Qty=var4.Actual_Qty;
								//  var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0) >= 0)
								{
									var4gp.Plan_Qty=ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0) - ifnull(var4gp.Stock_Qty,0);
								}
								else
								{
									var4gp.Plan_Qty=ifnull(var4gp.Stock_Qty,0) - ifnull(var4gp.BoM_Qty,0) * ifnull(var4gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var4gp.Purchase_Qty=var4gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec4.Plan_Qty=ifnull(cwplrec4.BoM_Qty,0.0) * ifnull(cwplrec4.bom_stk_qty,0.0) - ifnull(cwplrec4.Stock_Qty,0.0);
			//cwplrec4.Actual_Qty=cwplrec4.Plan_Qty;
		}
		//LEVEL-5
		if(cwplrec4.Level == "Level-5")
		{
			for each  lis5 in Create_BOM[Part_No == cwplrec4.Part_No]
			{
				for each  var5 in input.BoM_Details_CWPL
				{
					if(var5.Part_No.Part_No == lis5.Material_Details.Part_No.Part_No)
					{
						var5.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var5.BoM_Qty=cwplrec4.Actual_Qty;
						var5.Actual_Qty=ifnull(var5.BoM_Qty,0.0) * ifnull(var5.bom_stk_qty,0.0) - ifnull(var5.Stock_Qty,0.0);
						var5.Plan_Qty=var5.Actual_Qty;
					}
					for each  var5gp in input.BoM_Details_General_Purchase
					{
						if(var5gp.Part_No.Part_No.startswith("BT") == true || var5gp.Part_No.Part_No.startswith("NT") == true || var5gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var5.Part_No.Part_No.contains("_UP") == true)
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var5gp.BoM_Qty=ifnull(var5.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
								{
									var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								}
								else
								{
									var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var5gp.Purchase_Qty=ifnull(var5gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var5gp.Level == var5.Level && var5gp.Level == "Level-5")
							{
								var5gp.BoM_Qty=var5.Actual_Qty;
								//  var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
								{
									var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								}
								else
								{
									var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var5gp.Purchase_Qty=var5gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec4.Plan_Qty=ifnull(cwplrec4.BoM_Qty,0.0) * ifnull(cwplrec4.bom_stk_qty,0.0) - ifnull(cwplrec4.Stock_Qty,0.0);
			//cwplrec4.Actual_Qty=cwplrec4.Plan_Qty;
		}
	}
}
//Level 4 checking close
/*----------------------------------------------------Level 5------------------------------------------------------------*/
//Checking if row.Level == 5, then run all the levels >=5
if(row.Level == "Level-5")
{
	for each  cwplrec5 in input.BoM_Details_CWPL
	{
		//LEVEL-5
		if(cwplrec5.Level == "Level-5")
		{
			for each  lis5 in Create_BOM[Part_No == cwplrec5.Part_No]
			{
				for each  var5 in input.BoM_Details_CWPL
				{
					if(var5.Part_No.Part_No == lis5.Material_Details.Part_No.Part_No)
					{
						var5.Tot_BoM_Qty=ifnull(row.Actual_Qty,0) * ifnull(row.bom_stk_qty,0.0);
						var5.BoM_Qty=cwplrec5.Actual_Qty;
						var5.Actual_Qty=ifnull(var5.BoM_Qty,0.0) * ifnull(var5.bom_stk_qty,0.0) - ifnull(var5.Stock_Qty,0.0);
						var5.Plan_Qty=var5.Actual_Qty;
					}
					if(var5.Stock_Qty > var5.BoM_Qty)
					{
						var5.Blocked_Qty=var5.Actual_Qty;
					}
					if(var5.Stock_Qty != 0 && var5.Blocked_Qty > var5.Stock_Qty || var5.Stock_Qty < var5.BoM_Qty)
					{
						var5.Blocked_Qty=var5.Stock_Qty;
					}
					for each  var5gp in input.BoM_Details_General_Purchase
					{
						if(var5gp.Part_No.Part_No.startswith("BT") == true || var5gp.Part_No.Part_No.startswith("NT") == true || var5gp.Part_No.Part_No.startswith("WS") == true)
						{
							//If the CWPL is RIM, Corresponding General Pruchase is BT,NT,WS -->So this line is written to check the General Purchase.
							if(var5.Part_No.Part_No.contains("_UP") == true)
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								//If RIM means, var.Actual_qty should be passed to this BOM_Qty
								var5gp.BoM_Qty=ifnull(var5.Actual_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
								{
									var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								}
								else
								{
									var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var5gp.Purchase_Qty=ifnull(var5gp.Plan_Qty,0);
							}
						}
						else
						{
							if(var5gp.Level == var5.Level && var5gp.Level == "Level-5")
							{
								row.Tot_BoM_Qty=ifnull(row.BoM_Qty,0) * ifnull(row.bom_stk_qty,0.0);
								var5gp.BoM_Qty=var5.Actual_Qty;
								//  var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								//Below ifelse is to check negative value
								if(ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0) >= 0)
								{
									var5gp.Plan_Qty=ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0) - ifnull(var5gp.Stock_Qty,0);
								}
								else
								{
									var5gp.Plan_Qty=ifnull(var5gp.Stock_Qty,0) - ifnull(var5gp.BoM_Qty,0) * ifnull(var5gp.Org_BoM_Qty,0.0);
								}
								//Above ifelse ends here
								var5gp.Purchase_Qty=var5gp.Plan_Qty;
							}
						}
					}
				}
			}
			//cwplrec5.Plan_Qty=ifnull(cwplrec5.BoM_Qty,0.0) * ifnull(cwplrec5.bom_stk_qty,0.0) - ifnull(cwplrec5.Stock_Qty,0.0);
			//cwplrec5.Actual_Qty=cwplrec5.Plan_Qty;
		}
	}
}
//Level 5 checking close
for each  rec in input.BoM_Details_CWPL
{
	if(rec.Actual_Qty < 0)
	{
		rec.Actual_Qty=0;
		rec.Plan_Qty=0;
		rec.BoM_Qty=0;
	}
	if(rec.Blocked_Qty < 0)
	{
		rec.Blocked_Qty=0;
	}
	if(rec.Stock_Qty > rec.BoM_Qty)
	{
		rec.Blocked_Qty=rec.Actual_Qty;
	}
	if(rec.Stock_Qty != 0 && rec.Blocked_Qty > rec.Stock_Qty || rec.Stock_Qty < rec.BoM_Qty)
	{
		rec.Blocked_Qty=rec.Stock_Qty;
	}
}
for each  rec1 in input.BoM_Details_General_Purchase
{
	if(rec1.Blocked_Qty < 0)
	{
		rec1.Blocked_Qty=0;
	}
	if(rec1.Purchase_Qty < 0 || rec1.BoM_Qty < 0)
	{
		rec1.Purchase_Qty=0;
		rec1.Plan_Qty=0;
		rec1.BoM_Qty=0;
	}
	if(rec1.Stock_Qty > rec1.BoM_Qty)
	{
		rec1.Blocked_Qty=rec1.Purchase_Qty;
	}
	if(rec1.Stock_Qty != 0 && rec1.Blocked_Qty > rec1.Stock_Qty || rec1.Stock_Qty < rec1.BoM_Qty)
	{
		rec1.Blocked_Qty=rec1.Stock_Qty;
	}
}