Snippets Collections
i = 0;
for each  rec_sn in input.Despatch_Schedule
{
	i = i + 1;
	row.S_No=i;
}
//For Delivery Schedule
clear row.Part_No;
item_list = List();
deliv_list = List();
for each  an_item in input.Item_Details
{
	item_list.add(an_item.Part_Description);
}
for each  deliv in input.Despatch_Schedule
{
	if(deliv.Part_No != null && deliv.Full_Quantity == true)
	{
		deliv_list.add(deliv.Part_No);
	}
}
item_list.removeAll(deliv_list);
row.Part_No:ui.add(item_list.sort(true));
if(item_list.size() > 0)
{
	row.Part_No=item_list.get(0);
	//Setting Quantity
	for each  rec in input.Item_Details
	{
		if(rec.Qty < 1)
		{
			alert "Please enter quantity for all the item(s) in Item Details ";
			row.Quantity=null;
		}
		else
		{
			tot = 0.0;
			for each  rec1 in input.Despatch_Schedule
			{
				if(rec1.Part_No == rec.Part_Description)
				{
					tot = tot + ifnull(rec1.Quantity,0.0);
				}
			}
			if(rec.Part_Description == row.Part_No)
			{
				row.Quantity=if(tot > 0,rec.Qty - tot,rec.Qty);
				row.Delivery_Date=if(tot > 0,null,input.Expected_Shipment_Date);
				row.Specification=rec.Remarks_multiline;
				row.Full_Quantity=true;
			}
		}
	}
}
i = 0;
for each  rec_sn in input.Item_Details
{
	i = i + 1;
	row.S_No=i;
}
//item details part no should be loaded from customer pricing master based on customer selected as per user requirement-7/3/2023,if not in master then load asusal
clear row.Part_No;
clear row.Part_Description;
if(input.Sales_Type != "Tooling" && input.Sales_Type != "Research & Development Charges")
{
	getcust = Customer_Pricing_Master[Customer_Name == input.Customer_Name && Status == "Active"];
	if(getcust.count() > 0)
	{
		//Remove the Part No available in Regular Item master for contract- User Requirement - MR.Senthil - 14/03/2024 - will open after production 
		//if input.Sales_Type == "Contract"
		//{
		//regularitem = Regular_Item_Master[ID != 0].Part_No.getAll();
		//get_active = Customer_Pricing_subform[Customer_Pricing_Master_Recid == getcust.ID && sf_Status == "Active" && Part_No != regularitem].Part_No.getAll();
		//}
		//else 
		//  {
		get_active = Customer_Pricing_subform[Customer_Pricing_Master_Recid == getcust.ID && sf_Status == "Active"].Part_No.getAll();
		//   }
		//info get_active;
		row.Part_No:ui.add(get_active);
		//To restrict choosing same items
		clear row.Part_Description;
		//Remove the Part No available in Regular Item master for contract- User Requirement - MR.Senthil - 14/03/2024 - will open after production 
		//if input.Sales_Type == "Contract"
		//{
		//regularitem = Regular_Item_Master[ID != 0].Part_No.getAll();
		//get_active = Customer_Pricing_subform[Customer_Pricing_Master_Recid == getcust.ID && sf_Status == "Active" && Part_No != regularitem].Part_No.getAll();
		//}
		//else 
		//  {
		prdcts = Customer_Pricing_subform[ID == getcust.ID && sf_Status == "Active"].Part_No.getAll();
		//	}
		addproduct = List();
		addproduct.addAll(prdcts);
		remproduct = List();
		for each  prd in input.Item_Details
		{
			if(prd.Part_No != 0)
			{
				toadd = Materials[ID == prd.Part_Description].ID;
				remproduct.add(toadd);
			}
		}
		addproduct.removeAll(remproduct);
		row.Part_Description:ui.add(addproduct);
		clear row.Part_No;
		//Remove the Part No available in Regular Item master for contract- User Requirement - MR.Senthil - 14/03/2024 - will open after production 
		//if input.Sales_Type == "Contract"
		//{
		//regularitem = Regular_Item_Master[ID != 0].Part_No.getAll();
		//get_active = Customer_Pricing_subform[Customer_Pricing_Master_Recid == getcust.ID && sf_Status == "Active" && Part_No != regularitem].Part_No.getAll();
		//}
		//else 
		//  {
		prdcts = Customer_Pricing_subform[Customer_Pricing_Master_Recid == getcust.ID && sf_Status == "Active"].Part_No.getAll();
		//}
		addproduct = List();
		addproduct.addAll(prdcts);
		remproduct = List();
		for each  prd in input.Item_Details
		{
			if(prd.Part_No != 0)
			{
				toadd = Materials[ID == prd.Part_No].ID;
				remproduct.add(toadd);
			}
		}
		addproduct.removeAll(remproduct);
		row.Part_No:ui.add(addproduct);
	}
}
else
{
	//New Sale type Research & Development Charges - Mail Dated 29/11/2023 -Parthasarathy
	if(input.Sales_Type == "Tooling")
	{
		prdcts = Materials[Category.Category == "Tooling" && Status == "Active"].ID.getAll();
	}
	else if(input.Sales_Type == "Research & Development Charges")
	{
		prdcts = Materials[Category.Category == "R&D" && Status == "Active"].ID.getAll();
	}
	addproduct = List();
	addproduct.addAll(prdcts);
	remproduct = List();
	for each  prd in input.Item_Details
	{
		if(prd.Part_Description != 0)
		{
			toadd = Materials[ID == prd.Part_Description].ID;
			remproduct.add(toadd);
		}
	}
	addproduct.removeAll(remproduct);
	row.Part_Description:ui.add(addproduct);
	clear row.Part_No;
	if(input.Sales_Type == "Tooling")
	{
		prdcts = Materials[Category.Category == "Tooling" && Status == "Active"].ID.getAll();
	}
	else if(input.Sales_Type == "Research & Development Charges")
	{
		prdcts = Materials[Category.Category == "R&D" && Status == "Active"].ID.getAll();
	}
	addproduct = List();
	addproduct.addAll(prdcts);
	remproduct = List();
	for each  prd in input.Item_Details
	{
		if(prd.Part_No != 0)
		{
			toadd = Materials[ID == prd.Part_No].ID;
			remproduct.add(toadd);
		}
	}
	addproduct.removeAll(remproduct);
	row.Part_No:ui.add(addproduct);
}
//below code is blocked as per user request - 01/04/2023
/*if(getcust.count() == 0)
{
	clear row.Part_No;
	clear row.Part_Description;
	prdcts = Materials[ID != 0 && Material_Item_Type.Material_Type == "CWPL Products" && CRM_Sync == "Yes"].ID.getAll();
	addproduct = List();
	addproduct.addAll(prdcts);
	remproduct = List();
	for each  prd in input.Item_Details
	{
		if(prd.Part_Description != 0)
		{
			toadd = Materials[ID == prd.Part_Description].ID;
			remproduct.add(toadd);
		}
	}
	addproduct.removeAll(remproduct);
	row.Part_Description:ui.add(addproduct);
	clear row.Part_No;
	prdcts = Materials[ID != 0 && Material_Item_Type.Material_Type == "CWPL Products" && CRM_Sync == "Yes"].ID.getAll();
	addproduct = List();
	addproduct.addAll(prdcts);
	remproduct = List();
	for each  prd in input.Item_Details
	{
		if(prd.Part_No != 0)
		{
			toadd = Materials[ID == prd.Part_No].ID;
			remproduct.add(toadd);
		}
	}
	addproduct.removeAll(remproduct);
	row.Part_No:ui.add(addproduct);
}*/
if(row.Part_Description != null)
{
	check_same_item = 0;
	for each  rec in input.Item_Details
	{
		if(rec.Part_Description == row.Part_Description)
		{
			check_same_item = check_same_item + 1;
		}
	}
	if(check_same_item == 2)
	{
		alert "You have already entered the same item";
		row.Part_Description=null;
	}
	else
	{
		mat_data = Materials[ID == row.Part_Description];
		row.Rate=ifnull(mat_data.Selling_Price,0.0);
		row.Part_No=mat_data.ID;
		/*-------------------------Tax Showing----------------------------*/
		if(input.Place_of_Supply.Inside_India == "Yes")
		{
			tax_det = if(input.Customer_Name.Destination.Short_Name == "" || input.Customer_Name.Destination.Short_Name == null,if(input.Place_of_Supply.Short_Name == "TN",mat_data.GST_Details,mat_data.IGST_Details),if(input.Customer_Name.Destination.Short_Name == "TN",mat_data.GST_Details,mat_data.IGST_Details));
		}
		else
		{
			tax_det = GST_Details[Tax_Name == "IGST0"].ID;
		}
		/*-----------------------End-------------------------------------------------------------------------------*/
		row.Tax=tax_det;
		row.UoM=row.Part_Description.Primary_UoM;
		row.Remarks_multiline=row.Part_Description.Specification;
		//Check Stock Summary
		row.Stock_FG_Qty=ifnull(Inventory[Part_No == row.Part_No && Part_Description == row.Part_Description].Available_Qty,0.0);
	}
}
if(row.Part_No != null)
{
	mat_data = Materials[ID == row.Part_No];
	getcustdet = Customer_Pricing_subform[Part_No == row.Part_No && Customer_Name == input.Customer_Name && sf_Status == "Active"];
	if(getcustdet.count() > 0)
	{
		getcustdet = Customer_Pricing_subform[Part_No == row.Part_No && Customer_Name == input.Customer_Name && sf_Status == "Active"];
		row.Part_Description=getcustdet.Part_Description;
		row.UoM=Materials[ID == getcustdet.Part_No].Primary_UoM;
		//	row.Rate=getcustdet.Price;
		row.Rate=getcustdet.Settled_Price;
		row.Tax=getcustdet.Tax;
		row.Packing_Std=getcustdet.Packaging;
		row.Customer_Part_Code=getcustdet.Customer_Part_Code;
		row.HSN_Code=mat_data.HSN_SAC;
		row.Classification=mat_data.Classification;
	}
	if(getcustdet.count() == 0 && input.Sales_Type == "Tooling" || input.Sales_Type == "Research & Development Charges")
	{
		row.Part_Description=mat_data.ID;
		if(input.Place_of_Supply.Inside_India == "Yes")
		{
			if(input.Place_of_Supply.Short_Name == "UP")
			{
				row.Tax=row.Part_No.GST_Details;
			}
			else
			{
				row.Tax=row.Part_No.IGST_Details;
			}
		}
		//row.Tax=tax_det;
	}
	row.UoM=row.Part_Description.Primary_UoM;
	row.Stock_FG_Qty=ifnull(Inventory[Part_No == row.Part_No].sum(Available_Qty),0.0);
	row.Stock_SFG_Qty=ifnull(Semi_Finished_Goods_Summary[Part_No == row.Part_No && Part_Description == row.Part_Description && Warehouse == input.Warehouse].Available_Qty,0.0);
}
else
{
	row.Part_Description=null;
	row.Remarks_multiline=null;
	row.Rate=null;
	row.Stock_FG_Qty=0.0;
	row.Stock_SFG_Qty=0.0;
}
for each  rec in input.Despatch_Schedule
{
	if(rec.Part_No == row.Part_No)
	{
		rec.Part_No=null;
	}
}
for each  var in input.Item_Details
{
	row.Blocke_Qty=Inventory[Part_No == row.Part_No && Part_Description == row.Part_Description].Block_Qty;
}
if(input.Place_of_Supply.Short_Name != "UP")
{
	if(row.Tax != null)
	{
		if(row.Tax.Tax_Name.startswith("G") == True)
		{
			alert "Tax should be IGST for this customer.Tax configured as " + row.Tax.Tax_Name + "  Pls check";
			row.Tax=null;
		}
	}
}
//set the tax percentage since its same for all the line items
input.TaxP = row.Tax;
if(row.Rate != null && row.Qty != null && row.Tax != null)
{
	get_tax_value = GST_Details[ID == ifnull(row.Tax,"")].Total_Rate;
	Tax_calc = ifnull(row.Qty,0.0) * ifnull(row.Rate,0.0) * ifnull(get_tax_value,0.0) / 100;
	amount_calc = ifnull(row.Qty,0.0) * ifnull(row.Rate,0.0);
	row.Sub_Total=ifnull(amount_calc,0.00);
	row.Tax_Value=Tax_calc;
	row.Total_Amount=ifnull(amount_calc,0.0) + ifnull(Tax_calc,0.0);
	tot = 0.0;
	totqty = 0.0;
	subtot = 0.0;
	for each  rec1 in Item_Details
	{
		tot = tot + ifnull(rec1.Total_Amount,0.0);
		totqty = totqty + ifnull(rec1.Qty,0.0);
		subtot = subtot + ifnull(rec1.Sub_Total,0.0);
	}
	input.Item_Total = tot;
	input.Overall_Total = ifnull(input.Item_Total,0.0) + ifnull(input.Extra_Charge_s_Total,0.0);
	//new field calculation starts here - 1/4/2023
	input.Total_Quantity = ifnull(totqty,0.0);
	input.Gross_Total = ifnull(subtot,0.0);
	input.Gross_with_Discount = ifnull(input.Gross_Total,0.0);
	if(input.Discount_Amount > 0)
	{
		input.Gross_with_Discount = ifnull(input.Gross_Total,0.0) - ifnull(input.Discount_Amount,0.0);
		input.Overall_Total = ifnull(input.Overall_Total,0.0) - ifnull(input.Discount_Amount,0.0);
	}
	else
	{
		input.Gross_with_Discount = ifnull(input.Gross_with_Discount,0.0);
	}
	get_tax_value = GST_Details[ID == ifnull(input.TaxP,"")].Total_Rate;
	if(get_tax_value == 0)
	{
		input.Gross_Value_Tax = 0;
	}
	else
	{
		Tax_calc = ifnull(input.Gross_with_Discount,0.0) * ifnull(get_tax_value,0.0) / 100;
		input.Tax_Total = ifnull(Tax_calc,0.0);
		input.Gross_Value_Tax = ifnull(Tax_calc,0.0);
		input.Gross_Total_with_Discount = ifnull(input.Gross_with_Discount,0.0) + ifnull(input.Gross_Value_Tax,0.0);
	}
	if(input.Packing_Forwarding > 0)
	{
		Tax_calc1 = ifnull(input.Packing_Forwarding,0.0) * ifnull(get_tax_value,0.0) / 100;
		input.PF_Tax_value = ifnull(Tax_calc1,0.0);
		input.PF_Total_with_tax = ifnull(input.Packing_Forwarding,0.0) + ifnull(input.PF_Tax_value,0.0);
	}
	input.Grand_Total = ifnull(input.Gross_Total_with_Discount,0.0) + ifnull(input.PF_Total_with_tax,0.0);
	//new fields calculation ends 
}
if(row.Rate != null && row.Qty != null && row.Tax != null)
{
	get_tax_value = GST_Details[ID == row.Tax].Total_Rate;
	Tax_calc = ifnull(row.Qty,0.0) * ifnull(row.Rate,0.0) * ifnull(get_tax_value,0.0) / 100;
	amount_calc = row.Qty * row.Rate;
	row.Sub_Total=ifnull(amount_calc,0.00);
	row.Tax_Value=Tax_calc;
	row.Total_Amount=ifnull(amount_calc,0.0) + ifnull(Tax_calc,0.0);
	tot = 0.0;
	for each  rec in Item_Details
	{
		tot = tot + ifnull(rec.Total_Amount,0.0);
	}
	input.Item_Total = tot;
	input.Overall_Total = ifnull(input.Item_Total,0.0) + ifnull(input.Extra_Charge_s_Total,0.0);
	// 	// new fields caluclation - 1/4/2023 - stats
	// 	input.Gross_Total = ifnull(input.Gross_Total,0.0) + ifnull(row.Sub_Total,0.0)+ifnull(input.Tax_Total,0.0);
	// 	input.Tax_Total = ifnull(input.Tax_Total,0.0)+ifnull(row.Tax_Value,0.0);
	// 	// new fields calculation ends
}
if(row.Tax == null)
{
	row.Tax_Value=0.0;
	row.Total_Amount=ifnull(row.Qty,0.0) * ifnull(row.Rate,0.0);
	tot1 = 0.0;
	for each  rec in Item_Details
	{
		tot1 = tot1 + rec.Total_Amount;
	}
	input.Item_Total = tot1;
	input.Overall_Total = ifnull(input.Item_Total,0.0) + ifnull(input.Extra_Charge_s_Total,0.0);
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1> CHAI OR CODE </h1>
    <button id = "stop ">stop </button>
</body>
<script>

////////////////////***** 1 WAY ***//////////////
    setTimeout(function(){
        consol.log("HITESH"); ///after 2 sec it will excute 
    },2000) // only 1 time will excute 

////////////////////***** 2 WAY ***//////////////

    const sayhitesh = function (){
        console.log("tanishq");
    }
const changeText = function () {
  document.querySelector('h1').innerHTML = "best js course on yt"; // change the h1   
};

const changeMe = setTimeout(changeText, 2000); // changeText will execute after 2 seconds

document.querySelector('#stop'). //// function to stop the changetext option 
addEventListener('click', function () { // if we press stop button it will stop the excution of changing of h1 
    clearTimeout(changeMe)
    console.log("STOPPED")
})

</script>
</html>
//For Negative validation Check
if(row.Rate < 0 && row.Rate != null)
{
	alert "Please enter positive values";
	row.Rate=null;
}
else
{
	get_tax_value = GST_Details[ID == ifnull(row.Tax,"")].Total_Rate;
	Tax_calc = ifnull(row.Qty,0) * ifnull(row.Rate,0) * ifnull(get_tax_value,0) / 100;
	amount_calc = ifnull(row.Qty,0) * ifnull(row.Rate,0);
	row.Sub_Total=ifnull(amount_calc,0.00);
	row.Tax_Value=ifnull(Tax_calc,0);
	row.Total_Amount=ifnull(amount_calc,0) + ifnull(Tax_calc,0);
	//alert amount_calc + Tax_calc;
	tot = 0.0;
	subtot = 0.0;
	totqty = 0.0;
	for each  rec in Item_Details
	{
		tot = tot + ifnull(rec.Total_Amount,0.0);
		totqty = totqty + ifnull(rec.Qty,0.0);
		subtot = subtot + ifnull(rec.Sub_Total,0.0);
	}
	input.Item_Total = tot;
	input.Overall_Total = tot + ifnull(input.Extra_Charge_s_Total,0.0);
	//new field calculation starts here - 1/4/2023
	//input.Gross_Total = ifnull(input.Gross_Total,0.0) + ifnull(row.Sub_Total,0.0);
	//input.Grand_Total = ifnull(input.Gross_Total,0.0);
	input.Total_Quantity = ifnull(totqty,0.0);
	input.Gross_Total = ifnull(subtot,0.0);
	input.Gross_with_Discount = ifnull(input.Gross_Total,0.0);
	if(input.Discount_Amount > 0)
	{
		input.Gross_with_Discount = ifnull(input.Gross_Total,0.0) - ifnull(input.Discount_Amount,0.0);
		input.Overall_Total = ifnull(input.Overall_Total,0.0) - ifnull(input.Discount_Amount,0.0);
	}
	else
	{
		input.Gross_with_Discount = ifnull(input.Gross_with_Discount,0.0);
	}
	get_tax_value = GST_Details[ID == ifnull(input.TaxP,"")].Total_Rate;
	if(get_tax_value == 0)
	{
		input.Gross_Value_Tax = 0;
		//	input.Grand_Total = ifnull(input.Gross_Total_after_Discount_PF,0.0);
	}
	else
	{
		Tax_calc = ifnull(input.Gross_with_Discount,0.0) * ifnull(get_tax_value,0.0) / 100;
		input.Tax_Total = ifnull(Tax_calc,0.0);
		input.Gross_Value_Tax = ifnull(Tax_calc,0.0);
		input.Gross_Total_with_Discount = ifnull(input.Gross_with_Discount,0.0) + ifnull(input.Gross_Value_Tax,0.0);
		//	input.Grand_Total = ifnull(input.Gross_Total_after_Discount_PF,0.0) + ifnull(input.Tax_Total,0.0);
	}
	if(input.Packing_Forwarding > 0)
	{
		Tax_calc1 = ifnull(input.Packing_Forwarding,0.0) * ifnull(get_tax_value,0.0) / 100;
		input.PF_Tax_value = ifnull(Tax_calc1,0.0);
		input.PF_Total_with_tax = ifnull(input.Packing_Forwarding,0.0) + ifnull(input.PF_Tax_value,0.0);
	}
	input.Grand_Total = ifnull(input.Gross_Total_with_Discount,0.0) + ifnull(input.PF_Total_with_tax,0.0);
	//new fields calculation ends 
}
getsprice = Customer_Pricing_subform[Part_No == row.Part_No && Packaging == row.Packing_Std && Customer_Name == input.Customer_Name && sf_Status == "Active"];
row.Rate=getsprice.Settled_Price;
if(row.Rate != null && row.Qty != null && row.Tax != null)
{
	get_tax_value = GST_Details[ID == ifnull(row.Tax,"")].Total_Rate;
	Tax_calc = ifnull(row.Qty,0.0) * ifnull(row.Rate,0.0) * ifnull(get_tax_value,0.0) / 100;
	amount_calc = ifnull(row.Qty,0.0) * ifnull(row.Rate,0.0);
	row.Sub_Total=ifnull(amount_calc,0.00);
	row.Tax_Value=Tax_calc;
	row.Total_Amount=ifnull(amount_calc,0.0) + ifnull(Tax_calc,0.0);
	tot = 0.0;
	totqty = 0.0;
	subtot = 0.0;
	for each  rec in Item_Details
	{
		tot = tot + ifnull(rec.Total_Amount,0.0);
		totqty = totqty + ifnull(rec.Qty,0.0);
		subtot = subtot + ifnull(rec.Sub_Total,0.0);
	}
	input.Item_Total = tot;
	input.Overall_Total = ifnull(input.Item_Total,0.0) + ifnull(input.Extra_Charge_s_Total,0.0);
	input.Total_Quantity = ifnull(totqty,0.0);
	//new field calculation starts here - 1/4/2023
	input.Gross_Total = ifnull(subtot,0.0);
	if(input.Discount_Amount > 0)
	{
		input.Gross_with_Discount = ifnull(input.Gross_Total,0.0) - ifnull(input.Discount_Amount,0.0);
	}
	else
	{
		input.Gross_with_Discount = ifnull(input.Gross_Total,0.0);
	}
	get_tax_value = GST_Details[ID == ifnull(input.TaxP,"")].Total_Rate;
	if(get_tax_value == 0)
	{
		input.Gross_Value_Tax = 0;
		input.Gross_Total_with_Discount = ifnull(input.Gross_with_Discount,0.0);
	}
	else
	{
		Tax_calc = ifnull(input.Gross_with_Discount,0.0) * ifnull(get_tax_value,0.0) / 100;
		input.Tax_Total = ifnull(Tax_calc,0.0);
		input.Gross_Value_Tax = ifnull(Tax_calc,0.0);
		input.Gross_Total_with_Discount = ifnull(input.Gross_with_Discount,0.0) + ifnull(input.Gross_Value_Tax,0.0);
	}
	if(input.Packing_Forwarding > 0)
	{
		if(get_tax_value == 0)
		{
			Tax_calc1 = 0;
		}
		else
		{
			Tax_calc1 = ifnull(input.Packing_Forwarding,0.0) * ifnull(get_tax_value,0.0) / 100;
		}
		input.PF_Tax_value = ifnull(Tax_calc1,0.0);
		input.PF_Total_with_tax = ifnull(input.Packing_Forwarding,0.0) + ifnull(input.PF_Tax_value,0.0);
	}
	else
	{
		input.PF_Total_with_tax = 0;
	}
	input.Grand_Total = ifnull(input.Gross_Total_with_Discount,0.0) + ifnull(input.PF_Total_with_tax,0.0);
	//new fields calculation ends 
}
//For Adding subtotal field
if(row.Qty != null && row.Rate != null && row.Tax == null)
{
	row.Sub_Total=row.Qty * row.Rate;
}
//rate is null 
if(row.Rate == null)
{
	row.Sub_Total=null;
	row.Tax_Value=null;
	row.Total_Amount=null;
}
//For Negative validation Check
for each  var in input.Item_Details
{
	var.Balance_Qty=var.Qty;
}
if(row.Qty <= 0 && row.Qty != null)
{
	alert "Please enter positive values";
	row.Qty=null;
}
else
{
	if(row.Rate != null && row.Qty != null && row.Tax != null)
	{
		get_tax_value = GST_Details[ID == ifnull(row.Tax,"")].Total_Rate;
		Tax_calc = ifnull(row.Qty,0.0) * ifnull(row.Rate,0.0) * ifnull(get_tax_value,0.0) / 100;
		amount_calc = ifnull(row.Qty,0.0) * ifnull(row.Rate,0.0);
		row.Sub_Total=ifnull(amount_calc,0.00);
		row.Tax_Value=Tax_calc;
		row.Total_Amount=ifnull(amount_calc,0.0) + ifnull(Tax_calc,0.0);
		tot = 0.0;
		totqty = 0.0;
		subtot = 0.0;
		for each  rec in Item_Details
		{
			tot = tot + ifnull(rec.Total_Amount,0.0);
			totqty = totqty + ifnull(rec.Qty,0.0);
			subtot = subtot + ifnull(rec.Sub_Total,0.0);
		}
		input.Item_Total = tot;
		input.Overall_Total = ifnull(input.Item_Total,0.0) + ifnull(input.Extra_Charge_s_Total,0.0);
		input.Total_Quantity = ifnull(totqty,0.0);
		//new field calculation starts here - 1/4/2023
		input.Gross_Total = ifnull(subtot,0.0);
		if(input.Discount_Amount > 0)
		{
			input.Gross_with_Discount = ifnull(input.Gross_Total,0.0) - ifnull(input.Discount_Amount,0.0);
		}
		else
		{
			input.Gross_with_Discount = ifnull(input.Gross_Total,0.0);
		}
		get_tax_value = GST_Details[ID == ifnull(input.TaxP,"")].Total_Rate;
		if(get_tax_value == 0)
		{
			input.Gross_Value_Tax = 0;
			input.Gross_Total_with_Discount = ifnull(input.Gross_with_Discount,0.0);
		}
		else
		{
			Tax_calc = ifnull(input.Gross_with_Discount,0.0) * ifnull(get_tax_value,0.0) / 100;
			input.Tax_Total = ifnull(Tax_calc,0.0);
			input.Gross_Value_Tax = ifnull(Tax_calc,0.0);
			input.Gross_Total_with_Discount = ifnull(input.Gross_with_Discount,0.0) + ifnull(input.Gross_Value_Tax,0.0);
		}
		if(input.Packing_Forwarding > 0)
		{
			if(get_tax_value == 0)
			{
				Tax_calc1 = 0;
			}
			else
			{
				Tax_calc1 = ifnull(input.Packing_Forwarding,0.0) * ifnull(get_tax_value,0.0) / 100;
			}
			input.PF_Tax_value = ifnull(Tax_calc1,0.0);
			input.PF_Total_with_tax = ifnull(input.Packing_Forwarding,0.0) + ifnull(input.PF_Tax_value,0.0);
		}
		else
		{
			input.PF_Total_with_tax = 0;
		}
		input.Grand_Total = ifnull(input.Gross_Total_with_Discount,0.0) + ifnull(input.PF_Total_with_tax,0.0);
		//new fields calculation ends 
	}
	//For Adding subtotal field
	if(row.Qty != null && row.Rate != null && row.Tax == null)
	{
		row.Sub_Total=row.Qty * row.Rate;
	}
	fet_deli = Delivery_Schedule[Part_No == row.Part_No];
	if(fet_deli.count() >= 1)
	{
		if(row.Qty > fet_deli.sum(Quantity))
		{
			fet_deli.Full_Quantity=false;
		}
	}
}
if(row.Delivery_Date <= zoho.currentdate)
{
	alert "Please enter future dates only";
	row.Delivery_Date=null;
}
else if(row.Delivery_Date != null)
{
	check_same_date = 0;
	coun = 1;
	for each  rec in input.Despatch_Schedule
	{
		if(rec.Part_No == row.Part_No && rec.Delivery_Date == row.Delivery_Date)
		{
			check_same_date = check_same_date + 1;
		}
	}
	//alert check_same_date;
	if(check_same_date == 2)
	{
		alert "Already you have chosen the same date for the same item.Please Choose different delivery date";
		row.Delivery_Date=null;
	}
}
i = 0;
for each  rec in input.Product_Details
{
	if(rec.S_NO != row.S_NO)
	{
		i = i + 1;
		rec.S_NO=i;
	}
}
 //Another Deletion of row code for S_No below
for each  r in input.Returnable_Packing_Material
{
	b = r.S_No - 1;
	r.S_No=b;
	if(r.S_No < row.S_No)
	{
		b = b + 1;
		r.S_No=b;
	}
}
i = 0;
for each  rec in input.Returnable_Packing_Material
{
	i = i + 1;
	row.S_No=i;
}
if(input.Dispatch_Type == "Actual")
{
	disp = 0;
	disp1 = 0;
	bal = 0;
	so = Sales_Order[ID == input.Sales_Order_ID];
	wo = Work_Order[Sales_Order_Nos.Sale_Order_No == so.Sale_Order_No];
	invmain = Invoice[ID == input.Invoice_ID];
	invsub = Invoice_Subform[Invoice_Exist_ID == invmain.ID];
	if(input.Sales_Type == "Direct Order" || input.Sales_Type == "Tooling")
	{
		if(so.CWPL_SO_Status == "Dispatch Note Partial")
		{
			so.CWPL_SO_Status="Invoice Created";
		}
	}
	for each  rec in input.Product_Details
	{
		invsub.Dispatch_Actual_Date_Time=rec.Disp_Actual_Date_Time;
		disp = ifNull(rec.Actual_Qty,0) + disp;
		rec.Ac_so_far=ifNull(rec.Actual_Qty_so_far,0) + ifNull(rec.Actual_Qty,0);
		rec.Balance_Qty=ifNull(rec.Balance_Qty,0) - ifNull(rec.Actual_Qty,0);
		rec.Edit_stk_qty=ifNull(rec.Actual_Qty,0);
		so = Sales_Order[ID == input.Sales_Order_ID];
		bal = ifNull(rec.Balance_Qty,0) + bal;
		if(rec.Balance_Qty < 0 || rec.Balance_Qty == rec.Actual_Qty)
		{
			rec.Balance_Qty=0;
		}
		if(rec.Actual_Qty == rec.Planned_Qty)
		{
			rec.Sales_Lost_Qty=0.0;
		}
		getsosub = Sale_Order_Subform[Sales_Order_Exis_ID == so.ID && Part_No == rec.Product_Code];
		if(so.count() > 0)
		{
			get_inven = Inventory[Part_No == rec.Product_Code && Location_Name.Location__Name == "FG Warehouse"];
			getstk = Inventory[Part_No == rec.Product_Code && Location_Name.Location__Name == "FG Warehouse"];
			fetwo = Work_Order[Sales_Order_Nos == input.Sales_Order_No];
			blksosub = Sale_Order_Subform[Part_No == rec.Product_Code && Sales_Order_Exis_ID.Sale_Order_No == input.Sales_Order_No.Sale_Order_No];
			wosub = Work_Order_Subform[Part_No == blksosub.Part_No];
			getsoblk = Sales_Order[ID == input.Sales_Order_ID];
			if(getsosub.Balance_Qty < 0 || getsosub.Balance_Qty == getsosub.Actual_Qty_So_far)
			{
				getsosub.Balance_Qty=0;
			}
			if(get_inven.count() > 0 && get_inven.Available_Qty > 0 && rec.Block_Qty == 0 && getsosub.DQR_Blk_Qty == null || getsosub.DQR_Blk_Qty <= 0 && getsosub.Logistics_Status != "Logistics Confirmed" || getsosub.Logistics_Status == "" || getsosub.Logistics_Status == null)
			{
				get_inven.Available_Qty=ifNull(get_inven.Available_Qty,0) - rec.Actual_Qty;
				get_inven.Total_Qty=ifNull(get_inven.Total_Qty,0) - rec.Actual_Qty;
				if(get_inven.Available_Qty < 0)
				{
					get_inven.Available_Qty=0;
					get_inven.Total_Qty=0;
				}
			}
			//Below code is to use the block qty for dispatch, only for the logistics confirmed Sale Order. ---Commented on 06/12/2024
			if(getsoblk.count() > 0 && getsosub.DQR_Blk_Qty > 0 && getstk.Block_Qty > 0 && input.Sales_Order_No == fetwo.Sales_Order_Nos && getsosub.Logistics_Status == "Logistics Confirmed")
			{
				if(getstk.count() > 0 && rec.Product_Code == wosub.Part_No && rec.Actual_Qty <= rec.Block_Qty)
				{
					getstk.Block_Qty=ifNull(getstk.Block_Qty,0) - ifnull(rec.Actual_Qty,0);
					getstk.Total_Qty=ifNull(getstk.Total_Qty,0) - ifnull(rec.Actual_Qty,0);
					fetwo.WO_Status="Dispatched";
					getsosub.WO_Status_in_sosub="Dispatched";
				}
				else if(getstk.count() > 0 && rec.Product_Code == wosub.Part_No && rec.Actual_Qty > rec.Block_Qty)
				{
					balc = rec.Actual_Qty - getstk.Block_Qty;
					getstk.Block_Qty=0;
					getstk.Available_Qty=ifNull(getstk.Available_Qty,0) - ifnull(balc,0);
					getstk.Total_Qty=ifNull(getstk.Total_Qty,0) - ifnull(rec.Actual_Qty,0);
					fetwo.WO_Status="Dispatched";
					getsosub.WO_Status_in_sosub="Dispatched";
				}
				sendmail
				[
					from :zoho.loginuserid
					to :"pooja.s@synprosoft.com"
					subject :"Dispatch Successful form submission - using Block" + input.Sales_Order_No.Sale_Order_No
					message :"Part No " + rec.Product_Code.Part_No + "TOT QTY-" + get_inven.Total_Qty + "AVL QTY-" + get_inven.Available_Qty + "BLK QTY-" + get_inven.Block_Qty + "ID-" + rec.ID + "Actual Qty=" + rec.Actual_Qty
				]
			}
			getsosub.Actual_Qty_So_far=ifNull(getsosub.Actual_Qty_So_far,0) + ifNull(rec.Ac_so_far,0);
			if(getsosub.count() > 0)
			{
				getsosub.Create_Dispatch_Note_Plan_ID=input.ID;
				so.Create_Dispatch_Note_REC_ID=input.ID;
				getsosub.Balance_Qty=ifnull(getsosub.Balance_Qty,0) - ifnull(rec.Ac_so_far,0);
				if(getsosub.Balance_Qty > 0)
				{
					so.DP_Status=False;
				}
				getsosub.Planned_Qty_So_far=0;
			}
			input.Disptach_Status = "Approved";
		}
	}
	//Below For-Each is for utilizing the Block Qty for dispatch
	if(rec.Actual_Weight != rec.Product_Weight || rec.Actual_Weight == rec.Product_Weight)
	{
		thisapp.Books.DispatchEmailTemplate(input.ID);
	}
	sasub = Sale_Order_Subform[Sales_Order_Exis_ID == so.ID];
	solist = List();
	solist.addAll(so.Dispatch_Note_No);
	solist.add(input.ID);
	so.Dispatch_Note_No=solist;
	so.Dispatch_Qty=sasub.sum(Actual_Qty_So_far);
	so.Balance_Qty=sasub.sum(Balance_Qty);
	//so.Dispatch_Qty=ifNull(so.Dispatch_Qty,0) + disp;
	so.Shipped_Qty=so.Dispatch_Qty;
	//so.Balance_Qty=bal;
	openUrl("#Report:Dispatch_Note_Actual","same window");
	thisapp.Update_Salesorder_Books(input.Sales_Order_ID,input.Dispatch_Type);
	thisapp.DC.DCtoBooks(input.ID);
	for each  var in input.Returnable_Packing_Material
	{
		insdc = insert into Create_DC_Subform
		[
			Qty=var.Qty
			Part_Description=var.Part_Name
			Part_No=var.Part_No
			S_No=var.S_No
			Added_User=zoho.loginuser
		];
	}
	//thisapp.Books.Dispatch_Note_Actual_In_Books(input.ID);
	//	thisapp.Books.Create_invoice_individual(input.ID);
	thisapp.Books.Create_Packages(input.ID);
	thisapp.Books.Create_Shipment(input.ID);
	con = true;
	for each  sal in Sale_Order_Subform[Sales_Order_Exis_ID == so.ID]
	{
		if(sal.Balance_Qty > 0 && sal.Planned_Qty_So_far == null || sal.Planned_Qty_So_far == 0)
		{
			con = false;
		}
	}
	so.DP_Status=con;
}
else if(input.Dispatch_Type == "Actual Edit")
{
	dispt = 0;
	balan = 0;
	for each  rec1 in input.Product_Details
	{
		getso = Sales_Order[ID == input.Sales_Order_ID];
		getsosub = Sale_Order_Subform[Sales_Order_Exis_ID == input.Sales_Order_ID && Part_No == rec1.Product_Code];
		getsosub.Actual_Qty_So_far=ifNull(getsosub.Actual_Qty_So_far,0) + ifNull(rec1.Actual_Qty,0);
		getsosub.Balance_Qty=ifnull(getsosub.Balance_Qty,0) - ifnull(rec1.Actual_Qty,0);
		getso = Sales_Order[ID == input.Sales_Order_ID];
		balan = ifNull(getsosub.Balance_Qty,0) + balan;
		dispt = ifNull(rec1.Actual_Qty,0) + dispt;
		if(getsosub.Balance_Qty > 0)
		{
			so = Sales_Order[ID == input.Sales_Order_ID];
			so.DP_Status=False;
		}
		// 		get_invent = Inventory[Part_No == rec1.Product_Code];
		// 		if(get_invent.count() > 0)
		// 		{
		// 			if(get_invent.Total_Qty < get_invent.Available_Qty)
		// 			{
		// 				//get_invent.Total_Qty=get_invent.Available_Qty;
		// 			}
		// 			//	get_invent.Available_Qty=ifNull(get_invent.Available_Qty,0) - rec1.Actual_Qty;
		// 			//	get_invent.Total_Qty=ifNull(get_invent.Total_Qty,0) - rec1.Actual_Qty;
		// 			sendmail
		// 			[
		// 				from :zoho.loginuserid
		// 				to :"parthasarathy.m@synprosoft.com"
		// 				subject :"Edited>Successful form submission>OnSuccess_edited input.Dispatch_Type == Actual Edit"
		// 				message :"PartNo " + get_inven.Part_No.Part_No + "Total Qty is " + get_inven.Total_Qty + "Available Qty.. " + get_inven.Available_Qty
		// 			]
		// 		}
	}
	if(rec1.Actual_Weight != rec1.Product_Weight || rec1.Actual_Weight == rec1.Product_Weight)
	{
		thisapp.Books.DispatchEmailTemplate(input.ID);
	}
	subsa = Sale_Order_Subform[Sales_Order_Exis_ID == getso.ID];
	getso.Dispatch_Qty=subsa.sum(Actual_Qty_So_far);
	getso.Balance_Qty=subsa.sum(Balance_Qty);
	//getso.Dispatch_Qty=dispt;
	getso.Shipped_Qty=getso.Dispatch_Qty;
	//	getso.Balance_Qty=balan;
	openUrl("#Report:Edit_Dispatch_Note_Actual","same window");
	thisapp.Books.Edit_discpatch_note_actual_invoice(input.ID);
}
else
{
	openUrl("#Report:Order_Gate_Process","same window");
}
fet_dis = Create_Dispatch_Note_Format[ID == input.ID];
insrec = insert into Dispatch_Note_Actual_History
[
	Dispatch_Type=fet_dis.Dispatch_Type
	Added_User=zoho.loginuser
	CDNF_ID=fet_dis.CDNF_ID
	Currency_Code=fet_dis.Currency_Code
	Dispatch_Note_Date=fet_dis.Dispatch_Note_Date
	Customer_Address=fet_dis.Customer_Address
	Sales_Type=fet_dis.Sales_Type
	Sales_Order_No=fet_dis.Sales_Order_No
	Customer_Name=fet_dis.Customer_Name
	Incoterms=fet_dis.Incoterms
	Incoterms_Location=fet_dis.Incoterms_Location
	Product_List=fet_dis.Product_List
	Load_Products=fet_dis.Load_Products
	Transport_Type=fet_dis.Transport_Type
	Transporter_Name=fet_dis.Transporter_Name
	Vehicle_No_dup=fet_dis.Vehicle_No_dup
	GR_No=fet_dis.GR_No
	Driver_Name=fet_dis.Driver_Name
	Driver_Mobile_Number=fet_dis.Driver_Mobile_Number
	Vehicle_Type=fet_dis.Vehicle_Type
	Total_Qty=fet_dis.Total_Qty
	Total_Weight=fet_dis.Total_Weight
];
for each  recsub in input.Product_Details
{
	subins = insert into Dispatch_Note_Actual_History_Subform
	[
		Added_User=zoho.loginuser
		Dispatch_Note_Actual_History_Exis_ID=insrec
		S_NO=recsub.S_NO
		Product_Code=recsub.Product_Code
		Product_Description=recsub.Product_Description
		Customer_Product_Code=recsub.Customer_Product_Code
		Packing_Details1=recsub.Packing_Details1
		UoM=recsub.UoM
		Planned_Qty=recsub.Planned_Qty
		Plan_Qty_so_far=recsub.Plan_Qty_so_far
		Product_Weight=recsub.Product_Weight
		Actual_Qty=recsub.Actual_Qty
		Ac_so_far=recsub.Ac_so_far
		Actual_Qty_so_far=recsub.Actual_Qty_so_far
		Actual_Weight=recsub.Actual_Weight
		Remarks=recsub.Remarks
		Reason=recsub.Reason
		Individual=recsub.Individual
		Stock_Qty=recsub.Stock_Qty
		Ordered_Qty=recsub.Ordered_Qty
		Balance_Qty=recsub.Balance_Qty
	];
}
for each  retmat in input.Returnable_Packing_Material
{
	retins = insert into Returnable_Packing_Material_History
	[
		Qty=retmat.Qty
		Part_No=retmat.Part_No
		Part_Name=retmat.Part_Name
		Added_User=zoho.loginuser
	];
}
if(input.Dispatch_Type == "Gate")
{
	invmain = Invoice[ID == input.Invoice_ID];
	invsub = Invoice_Subform[Invoice_Exist_ID == invmain.ID];
	invsub.Vehicle_Gate_in_Time=input.In_Time;
	invsub.Vehicle_Gate_out_time=input.Out_Time;
}
if(input.Dispatch_Type == "Plan")
{
	input.Plan_Date_Time = zoho.currenttime;
	fetso = Sales_Order[ID == input.Sales_Order_ID];
	invmain = Invoice[ID == input.Invoice_ID];
	invsub = Invoice_Subform[Invoice_Exist_ID == invmain.ID];
	if(input.Sales_Type == "Direct Order" || input.Sales_Type == "Tooling")
	{
		if(fetso.CWPL_SO_Status == "Active")
		{
			fetso.CWPL_SO_Status="Dispatch Note Partial";
		}
	}
	var = True;
	polist = List();
	for each  rec in input.Product_Details
	{
		invsub.Dispatch_Plan_Date_time=rec.Disp_Plan_Date_Time;
		fetsosub = Sale_Order_Subform[Sales_Order_Exis_ID == fetso.ID && Part_No == rec.Product_Code];
		polist.add(rec.Product_Code);
		fetsosub.Planned_Qty_So_far=ifNull(rec.Plan_Qty_so_far,0) + ifNull(rec.Planned_Qty,0);
		rec.Balance_Qty=ifNull(rec.Planned_Qty,0);
		bal = ifnull(fetsosub.Balance_Qty,0.0) - ifnull(rec.Planned_Qty,0.0);
		if(bal > 0)
		{
			var = False;
		}
		if(bal < 0)
		{
			fetsosub.Balance_Qty=0;
		}
	}
	for each  sorec in Sale_Order_Subform[Sales_Order_Exis_ID == fetso.ID && Part_No not in polist]
	{
		sobal = ifnull(sorec.Balance_Qty,0.0) - ifnull(sorec.Planned_Qty_So_far,0.0);
		if(sobal > 0)
		{
			var = false;
		}
		if(sobal < 0)
		{
			sorec.Balance_Qty=0;
		}
	}
	fetso.DP_Status=var;
	if(fetso.DP_Status == True && fetso.CWPL_SO_Status == "Active" || fetso.CWPL_SO_Status == "Dispatch Note Partial")
	{
		fetso.CWPL_SO_Status="Dispatch Note Plan Completed";
	}
	input.Disptach_Status = "Plan Closed";
	fetci = Check_Inventory[ID == input.Check_Inventory_ID];
	if(fetci.count() > 0)
	{
		fetci.Create_Dispatch_Note_RECID=input.ID;
		fetci.Status="Closed";
	}
	so = Sales_Order[ID == input.Sales_Order_ID];
	if(so.count() > 0)
	{
		getsosub = Sale_Order_Subform[Sales_Order_Exis_ID == so.ID];
		if(getsosub.count() > 0)
		{
			getsosub.Create_Dispatch_Note_Plan_ID=input.ID;
			so.Create_Dispatch_Note_REC_ID=input.ID;
		}
	}
}
getmodule = Module_Master[Module_Name == "Dispatch Note"];
getauto = Auto_Generate_Numbers[Module_Name == getmodule.ID];
input.CDNF_ID = getauto.Module_Short_Name + "-" + getauto.Prefix + "-" + input.Auto_Number;
openUrl("#Form:Alert_Messages?Status=" + "DN1" + "&Value=" + input.CDNF_ID + "&zc_LoadIn=dialog","same window");
// if(input.Sales_Type == "Contract")
// {
clear Product_Details;
fet_so = Sales_Order[ID == input.Sales_Order_ID];
if(input.Load_Products == True)
{
	show Product_Details;
	show Total_Qty;
	show Total_Weight;
	sno = 0;
	for each  var in input.Product_List
	{
		a1 = Sale_Order_Subform[Sales_Order_Exis_ID == fet_so.ID && Part_No == var && Balance_Qty > 0];
		planvar1 = ifNull(a1.Balance_Qty,0) - ifNull(a1.Planned_Qty_So_far,0);
		if(a1.count() > 0)
		{
			fetch_inven = Inventory[Part_No == a1.Part_No].sum(Available_Qty);
			row1 = Create_Dispatch_Note_Format.Product_Details();
			row1.Sale_Order_Subform_ID=a1.ID;
			row1.Product_Description=a1.Part_Description;
			row1.Product_Code=a1.Part_No;
			row1.Customer_Product_Code=a1.Customer_Part_Code;
			row1.Remarks=a1.Remarks;
			row1.UoM=a1.UoM;
			row1.Packing_Details1=a1.Packing_Std;
			//row1.Planned_Qty=a1.Qty;
			row1.Ordered_Qty=a1.Qty;
			//	row1.Stock_Qty=fetch_inven;
			row1.Plan_Qty_so_far=a1.Planned_Qty_So_far;
			if(a1.Balance_Qty > 0 && planvar1 > 0)
			{
				row1.S_NO=sno + 1;
				sno = sno + 1;
				input.Product_Details.insert(row1);
			}
			disable Sale_Order_Subform_RECID;
			disable Product_Details.S_NO;
			disable Product_Details.Product_Code;
			disable Product_Details.Product_Description;
		}
	}
	if(input.Dispatch_Type == "Plan")
	{
		Total1 = 0;
		wt = 0;
		for each  rec in input.Product_Details
		{
			fet_item = Materials[ID = rec.Product_Code];
			salesub = Sale_Order_Subform[Sales_Order_Exis_ID == input.Sales_Order_ID && Part_No == rec.Product_Code];
			rec.Planned_Qty=ifNull(salesub.Balance_Qty,0) - ifNull(salesub.Planned_Qty_So_far,0);
			//	rec.Stock_Qty=fetch_inven;
			Total1 = Total1 + rec.Planned_Qty;
			rec.Product_Weight=ifNull(fet_item.Final_Weight,0.0) * ifNull(rec.Planned_Qty,0.0);
			wt = wt + rec.Product_Weight;
			disable Total_Qty;
			disable Total_Weight;
		}
		input.Total_Qty = Total1;
		input.Total_Weight = wt;
	}
}
//}
disable Product_Details.Ordered_Qty;
disable Product_Details.UoM;
//hide Product_Details.Individual;
hide CDNF_ID;
hide Currency_Code;
hide Actual_Date_Time;
disable Plan_Date_Time;
hide Export_Information_ID;
//hide Disptach_Status;
hide Sale_Order_Subform_RECID;
disable Incoterms;
hide Product_Details.Block_Qty;
disable Incoterms_Location;
hide DN_No;
disable Product_Details.Packing_Details1;
hide Product_Details.Export_Information_Exis_ID;
hide Product_Details.Reason;
hide Sales_Order_ID;
hide Inventory_ID;
hide Create_Dispatch_Note_Plan_ID;
hide Check_Inventory_ID;
hide Unblock_Inventory_ID;
hide Product_Details.Actual_Qty_so_far;
hide Product_Details.Plan_Qty_so_far;
hide Product_Details.Ac_so_far;
hide Product_Details.Stock_Qty;
disable Product_Details.Customer_Product_Code;
disable Product_Details.Product_Weight;
disable Sales_Type;
disable Product_Details.Remarks;
//hide Product_Details.Actual_Qty;
hide Product_Details.Create_Dispatch_Note_Plan_RECID;
hide Disptach_Status;
if(input.Dispatch_Type == "Plan")
{
	input.Plan_Date_Time = zoho.currenttime;
	hide Transportation_Details;
	hide Returnable_Packing_Material;
	hide Product_Details.Ordered_Qty;
	hide Product_Details.Actual_Qty;
	hide Product_Details.Actual_Weight;
}
if(input.Dispatch_Type == "Actual")
{
	hide Product_Details.Ordered_Qty;
	hide Out_Time;
	hide In_Time;
	disable Product_Details.Actual_Qty;
}
if(input.Sale_Order_Subform_RECID != null)
{
	getSosub = Sale_Order_Subform[ID == input.Sale_Order_Subform_RECID];
	input.Sales_Order_ID = getSosub.Sales_Order_Exis_ID;
	input.Sales_Order_No = getSosub.Sales_Order_Exis_ID;
	disable Sales_Order_No;
	so = Sales_Order[ID == getSosub.Sales_Order_Exis_ID];
	input.Expected_Shipping_Date = so.Expected_Shipment_Date;
	//var = Check_Inventory[ID == input.ID];
	fet_so = Sales_Order[ID == input.Sales_Order_ID];
	getsosub = Sale_Order_Subform[Sales_Order_Exis_ID == fet_so.ID];
	fet_chk = Check_Inventory[Sale_Order_Subform_ID == input.Sale_Order_Subform_RECID];
	if(fet_chk.count() > 0)
	{
		input.Check_Inventory_ID = fet_chk.ID;
	}
	fet_pro = Proforma_Invoice[Customer_Name == fet_so.Customer_Name && Sales_Order_No == getsosub.Sales_Order_Exis_ID];
	//fetch_inve = Inventory[Part_No == getsosub.Part_No];
	input.Customer_Name = fet_so.Customer_Name;
	input.Customer_Address = fet_so.Shipping_Address;
	input.Incoterms = fet_so.Incoterms1;
	input.Incoterms_Location = fet_so.Incoterms_Location;
	input.Currency_Code = fet_so.Currency_Code;
	input.Sales_Type = fet_so.Sales_Type;
	input.Packing_Forwarding = fet_so.Packing_Forwarding;
	if(input.Sales_Type == "Direct Order" || input.Sales_Type == "Tooling" || input.Sales_Type == "Research & Development Charges")
	{
		input.Expected_Shipping_Date = so.Expected_Shipment_Date;
		hide Product_Details;
		hide Total_Qty;
		hide Total_Weight;
		sublistdo = List();
		sosub1 = Sale_Order_Subform[Sales_Order_Exis_ID == fet_so.ID && Balance_Qty > 0];
		for each  recsodo in sosub1
		{
			planvardo = ifNull(recsodo.Balance_Qty,0) - ifNull(recsodo.Planned_Qty_So_far,0);
			if(planvardo > 0)
			{
				sublistdo.add(recsodo.Part_No);
			}
		}
		input.Product_List:ui.add(sublistdo);
		if(fet_pro.Proforma_Invoice_Status == "Over Due")
		{
			alert "Proforma Invoice is in OverDue for this Customer";
		}
		else if(fet_pro.Proforma_Invoice_Status == "Due")
		{
			alert "Proforma Invoice is in Due for this Customer";
		}
		else if(fet_pro.Proforma_Invoice_Status == "Partially Paid")
		{
			alert "Proforma Invoice is in Partially Paid for this Customer";
		}
		//input.Invoice_Address = fet_so.Billing_Address.state_province;
		// 		sno = 0;
		// 		for each  a1 in fet_so.Item_Details
		// 		{
		// 			fetch_inven = Inventory[Part_No == a1.Part_No].sum(Available_Qty);
		// 			row1 = Create_Dispatch_Note_Format.Product_Details();
		// 			row1.Product_Description=a1.Part_Description;
		// 			row1.Product_Code=a1.Part_No;
		// 			row1.Customer_Product_Code=a1.Customer_Part_Code;
		// 			row1.Remarks=a1.Remarks;
		// 			row1.UoM=a1.UoM;
		// 			row1.Packing_Details1=a1.Packing_Std;
		// 			//row1.Planned_Qty=a1.Qty;
		// 			row1.Ordered_Qty=a1.Qty;
		// 			//	row1.Stock_Qty=fetch_inven;
		// 			row1.Plan_Qty_so_far=a1.Planned_Qty_So_far;
		// 			planvar = ifNull(a1.Balance_Qty,0) - ifNull(a1.Planned_Qty_So_far,0);
		// 			if(a1.Balance_Qty > 0 && planvar > 0)
		// 			{
		// 				row1.S_NO=sno + 1;
		// 				sno = sno + 1;
		// 				input.Product_Details.insert(row1);
		// 			}
		// 			disable Sale_Order_Subform_RECID;
		// 			disable Product_Details.S_NO;
		// 			disable Product_Details.Product_Code;
		// 			disable Product_Details.Product_Description;
		// 		}
		// 		if(input.Dispatch_Type == "Plan")
		// 		{
		// 			Tot = 0;
		// 			wt = 0;
		// 			for each  rec in input.Product_Details
		// 			{
		// 				rec.Disp_Plan_Date_Time=zoho.currenttime;
		// 				fet_item = Materials[ID = rec.Product_Code];
		// 				salesub = Sale_Order_Subform[Sales_Order_Exis_ID == input.Sales_Order_ID && Part_No == rec.Product_Code];
		// 				rec.Planned_Qty=ifNull(salesub.Balance_Qty,0) - ifNull(salesub.Planned_Qty_So_far,0);
		// 				//	rec.Stock_Qty=fetch_inven;
		// 				Tot = Tot + ifNull(rec.Planned_Qty,0);
		// 				rec.Product_Weight=ifNull(fet_item.Final_Weight,0.0) * ifNull(rec.Planned_Qty,0.0);
		// 				wt = wt + rec.Product_Weight;
		// 				disable Total_Qty;
		// 				disable Total_Weight;
		// 			}
		// 			input.Total_Qty = Tot;
		// 			input.Total_Weight = wt;
		// 		}
	}
	else if(input.Sales_Type == "Contract")
	{
		hide Product_Details;
		hide Total_Qty;
		hide Total_Weight;
		sublist = List();
		sosub = Sale_Order_Subform[Sales_Order_Exis_ID == fet_so.ID && Balance_Qty > 0];
		for each  recso in sosub
		{
			planvar1 = ifNull(recso.Balance_Qty,0) - ifNull(recso.Planned_Qty_So_far,0);
			if(planvar1 > 0)
			{
				sublist.add(recso.Part_No);
			}
		}
		input.Product_List:ui.add(sublist);
	}
}
/*----------------------------------------------------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;
	}
}
try 
{
	var = 0;
	fet_wosub = Work_Order_Subform[ID == input.Work_Order_Subform_ID];
	fet_wo = Work_Order[ID == fet_wosub.Work_Order_Exis_ID];
	fetsosub = Sale_Order_Subform[Work_Order_RECID == fet_wo.ID];
	fet_wosub.MRP_ID=input.ID;
	fet_wr = Warehouse[ID != null];
	if(isBlank(input.MRP_No.trim()))
	{
		var = 1;
		input.MRP_No = thisapp.Common.Number_Function_New("Material Resource Planning");
	}
	if(input.Process_to_Submit = "Draft")
	{
		input.MRP_Status = "Draft";
		fet_wo.WO_Status="MRP Draft";
		fet_wosub.Work_Order_Status="MRP Draft";
		if(fetsosub.count() > 0)
		{
			fetsosub.WO_Status_in_sosub="MRP Draft";
		}
		indnthead = "No";
		indsno = 0;
		for each  rec in input.BoM_Details_General_Purchase
		{
			if(rec.Draft_Indent == true && input.Process_to_Submit == "Draft" && rec.Purchase_Qty > 0)
			{
				indsno = indsno + 1;
				thisapp.routing.RoutingFunction(input.ID);
				str1 = thisapp.Common.Number_Function_New("Purchase Requisition");
				if(indnthead == "No" && rec.Purchase_Qty > 0)
				{
					fet_emp = Employee_Details[Employee_Email == zoho.loginuserid];
					//Check for the Part No is already exists in the Indent without generation the purchase order.
					chkpartno = Indent_Sub_Form[Part_No == rec.Part_No && Status == "Indent against WO" && Purpose_of_Indent == "For MRP"];
					if(chkpartno.count() == 0)
					{
						insrec = insert into Indent
						[
							Indent_Request_Date=zoho.currentdate
							Request_Raised_By=fet_emp.ID
							Indent_No=str1
							Material_Type="Standard"
							Department=fet_emp.Department_Name
							Approval_Status="Approved"
							Indent_Type="System Generated - Planning"
							Status="Indent against WO"
							Remarks="For Production Process"
							MRP_ID=input.ID
							Added_User=zoho.loginuser
						];
						indnthead = "Yes";
					}
				}
				if(chkpartno.count() == 0)
				{
					subins = insert into Indent_Sub_Form
					[
						Added_User=zoho.loginuser
						Indent_Form_RECID=insrec
						S_No=indsno
						Part_No=rec.Part_No
						Part_Description=rec.Part_Name
						UoM=rec.UoM
						Required_Qty=rec.Purchase_Qty
						Purpose_of_Indent="For MRP"
						Indent_No=str1
						Status="Indent against WO"
						Work_Order_No_ms=input.Work_Order_ID
					];
				}
				else
				{
					wonolist = List();
					wonolist.addall(chkpartno.Work_Order_No_ms);
					wonolist.add(input.Work_Order_No1);
					chkpartno.Work_Order_No_ms=wonolist;
					chkpartno.Required_Qty=ifnull(rec.Purchase_Qty,0) + ifnull(chkpartno.Required_Qty,0);
				}
				thisapp.MRP.Indent_Email_MRP(input.ID);
			}
		}
	}
	else if(input.Process_to_Submit = "Send for Approval")
	{
		input.MRP_Status = "Waiting for Approval";
		input.Approval = "Pending";
	}
	else if(input.Process_to_Submit = "Submit")
	{
		input.Approval = "Approved";
		input.MRP_Status = "MRP Done";
		fet_wo.WO_Status="MRP Done";
		if(fetsosub.count() > 0)
		{
			fetsosub.WO_Status_in_sosub="MRP Done";
		}
	}
	if(fet_wosub.Work_Order_Status == "MRP Rejected")
	{
		fet_wosub.Work_Order_Status="WO Created";
	}
	if(input.Auto_Approval == "Yes")
	{
		input.MRP_Status = "MRP Done";
		fet_wo.MRP_Status="MRP Done";
		fet_wosub.Work_Order_Status="MRP Done";
		input.Approval = "Approved";
		for each  blk in input.BoM_Details_CWPL
		{
			fet_inv = Inventory[Part_No == blk.Part_No && Available_Qty > 0] sort by Available_Qty desc;
			if(fet_inv.count() > 0)
			{
				if(blk.Block_Qty = True)
				{
					balqty = 0;
					i = 1;
					for each  invcwplrec in fet_inv
					{
						//blocked Quantiy is less inventory available qty
						if(blk.Blocked_Qty <= invcwplrec.Available_Qty && i == 1)
						{
							//info "issued qty is less than total qty";
							invcwplrec.Available_Qty=ifnull(invcwplrec.Available_Qty,0.0) - ifnull(blk.Blocked_Qty,0.0);
							invcwplrec.Block_Qty=ifnull(blk.Blocked_Qty,0) + ifnull(invcwplrec.Block_Qty,0);
						}
						//blocked Quantiy is more than inventory available qty
						else if(blk.Blocked_Qty > invcwplrec.Available_Qty && i == 1)
						{
							//info "issued qty is more than total qty";
							balqty = ifnull(blk.Blocked_Qty,0.0) - ifnull(invcwplrec.Available_Qty,0.0);
							invcwplrec.Available_Qty=0;
							invcwplrec.Block_Qty=ifnull(blk.Blocked_Qty,0) + ifnull(invcwplrec.Block_Qty,0);
						}
						//for first time it should not get inside the loop 
						if(balqty > 0 && i > 1)
						{
							//info "balance qty is more than zero";
							//Balance Qty is less 
							if(balqty <= invcwplrec.Available_Qty)
							{
								//info "balance qty is less than total qty";
								invcwplrec.Available_Qty=ifnull(invcwplrec.Available_Qty,0.0) - ifnull(balqty,0.0);
								invcwplrec.Block_Qty=ifnull(blk.Blocked_Qty,0) + ifnull(invcwplrec.Block_Qty,0);
								balqty = 0;
							}
							//----Balance Qty is More------
							else if(balqty >= invcwplrec.Available_Qty)
							{
								//info "balance qty is greater than total qty";
								balqty = ifnull(balqty,0.0) - ifnull(invcwplrec.Available_Qty,0.0);
								invcwplrec.Available_Qty=0;
								invcwplrec.Block_Qty=ifnull(balqty,0) + ifnull(invcwplrec.Block_Qty,0);
							}
						}
						if(balqty == 0)
						{
							break;
						}
						i = i + 1;
					}
					if(blk.Blocked_Qty > 0)
					{
						insblock = insert into Block_Quantity
						[
							Part_No=blk.Part_No
							Part_Name=blk.Part_Name
							Form_Type="MRP"
							Block_Qty=blk.Blocked_Qty
							MRP_RECID=input.ID
							WO_No=fet_wo.ID
							Status="Blocked from MRP"
							Added_User=zoho.loginuser
						];
					}
				}
			}
		}
		for each  blk1 in input.BoM_Details_General_Purchase
		{
			fet_virstk = Inventory[Part_No == blk1.Part_No && Available_Qty > 0] sort by Available_Qty desc;
			if(fet_virstk.count() > 0)
			{
				if(blk1.Block_Qty = True)
				{
					balqty = 0;
					i1 = 1;
					for each  invgprec in fet_virstk
					{
						// 					info balqty;
						// 					info i1;
						//if(input.MRP_Qty >= fet_inv.Available_Qty && input.MRP_Qty >= fet_inv.Total_Qty)
						if(blk1.Blocked_Qty <= invgprec.Available_Qty && i1 == 1)
						{
							//info "blocked qty is less than total qty";
							invgprec.Block_Qty=ifnull(blk1.Blocked_Qty,0) + ifnull(invgprec.Block_Qty,0);
							invgprec.Available_Qty=ifnull(invgprec.Available_Qty,0) - ifnull(blk1.Blocked_Qty,0);
						}
						else if(blk1.Blocked_Qty > invgprec.Available_Qty && i == 1)
						{
							//info "blocked qty is more than available qty";
							balqty = ifnull(blk1.Blocked_Qty,0.0) - ifnull(invgprec.Available_Qty,0.0);
							invgprec.Available_Qty=0;
							invgprec.Block_Qty=ifnull(blk1.Blocked_Qty,0) + ifnull(invgprec.Block_Qty,0);
						}
						if(balqty > 0 && i > 1)
						{
							//info "balaance qty is more than zero";
							//Balance Qty is less 
							if(balqty <= invgprec.Available_Qty)
							{
								//	info "balance qty is less than available qty";
								invgprec.Available_Qty=ifnull(invgprec.Available_Qty,0.0) - ifnull(balqty,0.0);
								invgprec.Block_Qty=ifnull(blk1.Blocked_Qty,0) + ifnull(invgprec.Block_Qty,0);
								balqty = 0;
							}
							//Balance Qty is More
							else if(balqty >= invgprec.Available_Qty)
							{
								//info "balance qty is greater than available qty";
								balqty = ifnull(balqty,0.0) - ifnull(invgprec.Available_Qty,0.0);
								invgprec.Available_Qty=0;
								invgprec.Block_Qty=ifnull(blk1.Blocked_Qty,0) + ifnull(invgprec.Block_Qty,0);
							}
						}
						if(balqty == 0)
						{
							//info "before break";
							break;
						}
						i = i + 1;
					}
				}
			}
			if(blk1.Blocked_Qty > 0)
			{
				insblock = insert into Block_Quantity
				[
					Part_No=blk1.Part_No
					Part_Name=blk1.Part_Name
					Form_Type="MRP"
					Block_Qty=blk1.Blocked_Qty
					MRP_RECID=input.ID
					MRP_No=input.MRP_No
					WO_No=fet_wo.ID
					Status="Blocked from MRP"
					Added_User=zoho.loginuser
				];
			}
		}
	}
	else if(input.Process_to_Submit == "Submit" && input.Auto_Approval == "Yes" || input.Auto_Approval == "No")
	{
		input.MRP_Status = "MRP Done";
		fet_wo.MRP_Status="MRP Done";
		fet_wosub.Work_Order_Status="MRP Done";
		input.Approval = "Approved";
		if(fetsosub.count() > 0)
		{
			fetsosub.WO_Status_in_sosub="MRP Done";
		}
		for each  blkcwpl in input.BoM_Details_CWPL
		{
			fet_inve = Inventory[Part_No == blkcwpl.Part_No && Available_Qty > 0] sort by Available_Qty desc;
			if(fet_inve.count() > 0)
			{
				if(blkcwpl.Block_Qty = True)
				{
					balqty = 0;
					i = 1;
					for each  invcwplrec1 in fet_inve
					{
						//blocked Quantiy is less inventory available qty
						if(blkcwpl.Blocked_Qty <= invcwplrec1.Available_Qty && i == 1)
						{
							//	info "issued qty is less than total qty";
							invcwplrec1.Available_Qty=ifnull(invcwplrec1.Available_Qty,0.0) - ifnull(blkcwpl.Blocked_Qty,0.0);
							invcwplrec1.Block_Qty=ifnull(blkcwpl.Blocked_Qty,0) + ifnull(invcwplrec1.Block_Qty,0);
						}
						//blocked Quantiy is more than inventory available qty
						else if(blkcwpl.Blocked_Qty > invcwplrec1.Available_Qty && i == 1)
						{
							//info "issued qty is more than total qty";
							balqty = ifnull(blkcwpl.Blocked_Qty,0.0) - ifnull(invcwplrec1.Available_Qty,0.0);
							invcwplrec1.Available_Qty=0;
							invcwplrec1.Block_Qty=ifnull(blkcwpl.Blocked_Qty,0) + ifnull(invcwplrec1.Block_Qty,0);
						}
						//for first time it should not get inside the loop 
						if(balqty > 0 && i > 1)
						{
							//info "balance qty is more than zero";
							//Balance Qty is less 
							if(balqty <= invcwplrec1.Available_Qty)
							{
								//info "balance qty is less than total qty";
								invcwplrec1.Available_Qty=ifnull(invcwplrec1.Available_Qty,0.0) - ifnull(balqty,0.0);
								invcwplrec1.Block_Qty=ifnull(blkcwpl.Blocked_Qty,0) + ifnull(invcwplrec1.Block_Qty,0);
								balqty = 0;
							}
							//----Balance Qty is More------
							else if(balqty >= invcwplrec1.Available_Qty)
							{
								//info "balance qty is greater than total qty";
								balqty = ifnull(balqty,0.0) - ifnull(invcwplrec1.Available_Qty,0.0);
								invcwplrec1.Available_Qty=0;
								invcwplrec1.Block_Qty=ifnull(balqty,0) + ifnull(invcwplrec1.Block_Qty,0);
							}
						}
						if(balqty == 0)
						{
							break;
						}
						i = i + 1;
					}
					if(blkcwpl.Blocked_Qty > 0)
					{
						insblock = insert into Block_Quantity
						[
							Part_No=blkcwpl.Part_No
							Part_Name=blkcwpl.Part_Name
							Form_Type="MRP"
							Block_Qty=blkcwpl.Blocked_Qty
							WO_No=fet_wo.ID
							MRP_RECID=input.ID
							Status="Blocked from MRP"
							Added_User=zoho.loginuser
						];
					}
				}
			}
		}
		for each  blkgp in input.BoM_Details_General_Purchase
		{
			fet_virstk1 = Inventory[Part_No == blkgp.Part_No && Available_Qty > 0] sort by Available_Qty desc;
			if(fet_virstk1.count() > 0)
			{
				if(blkgp.Block_Qty = True)
				{
					balqty = 0;
					i1 = 1;
					for each  invgprec1 in fet_virstk1
					{
						// 					info balqty;
						// 					info i1;
						//if(input.MRP_Qty >= fet_inve.Available_Qty && input.MRP_Qty >= fet_inv.Total_Qty)
						if(blkgp.Blocked_Qty <= invgprec1.Available_Qty && i1 == 1)
						{
							//info "blocked qty is less than total qty";
							invgprec1.Block_Qty=ifnull(blkgp.Blocked_Qty,0) + ifnull(invgprec1.Block_Qty,0);
							invgprec1.Available_Qty=ifnull(invgprec1.Available_Qty,0) - ifnull(blkgp.Blocked_Qty,0);
						}
						else if(blkgp.Blocked_Qty > invgprec1.Available_Qty && i1 == 1)
						{
							//info "blocked qty is more than available qty";
							balqty = ifnull(blkgp.Blocked_Qty,0.0) - ifnull(invgprec1.Available_Qty,0.0);
							invgprec1.Available_Qty=0;
							invgprec1.Block_Qty=ifnull(blkgp.Blocked_Qty,0) + ifnull(invgprec1.Block_Qty,0);
						}
						if(balqty > 0 && i1 > 1)
						{
							//info "balaance qty is more than zero";
							//Balance Qty is less 
							if(balqty <= invgprec1.Available_Qty)
							{
								//	info "balance qty is less than available qty";
								invgprec1.Available_Qty=ifnull(invgprec1.Available_Qty,0.0) - ifnull(balqty,0.0);
								invgprec1.Block_Qty=ifnull(blkgp.Blocked_Qty,0) + ifnull(invgprec1.Block_Qty,0);
								balqty = 0;
							}
							//Balance Qty is More
							else if(balqty >= invgprec1.Available_Qty)
							{
								//	info "balance qty is greater than available qty";
								balqty = ifnull(balqty,0.0) - ifnull(invgprec1.Available_Qty,0.0);
								invgprec1.Available_Qty=0;
								invgprec1.Block_Qty=ifnull(blkgp.Blocked_Qty,0) + ifnull(invgprec1.Block_Qty,0);
							}
						}
						if(balqty == 0)
						{
							//info "before break";
							break;
						}
						i1 = i1 + 1;
					}
				}
			}
			if(blkgp.Blocked_Qty > 0)
			{
				insblock = insert into Block_Quantity
				[
					Part_No=blkgp.Part_No
					Part_Name=blkgp.Part_Name
					Form_Type="MRP"
					Block_Qty=blkgp.Blocked_Qty
					MRP_RECID=input.ID
					WO_No=fet_wo.ID
					Status="Blocked from MRP"
					Added_User=zoho.loginuser
				];
			}
		}
	}
	openUrl("#Form:Alert_Messages?Status=" + "MATRES" + "&Value=" + input.MRP_No + "&zc_LoadIn=dialog","same window");
}
catch (e)
{
	sendmail
	[
		from :"erp@carrierwheels.com"
		to :"parthasarathy.m@synprosoft.com"
		subject :"MRP Created Or Edited Successful Form Submission try & catch" + input.MRP_No
		message :e
	]
}
//Last Corectly Made changes in ->Check the below version
//Version 73.7
//01-Jul-2024 18:25:55
hide Reset1;
hide MRP_No;
fet_pref = Preferences[Module_Name = "MRP"];
input.Auto_Approval = fet_pref.Auto_Approval;
if(input.Work_Order_Subform_ID != null)
{
	fet_wosub = Work_Order_Subform[ID == input.Work_Order_Subform_ID];
	fet_wo = Work_Order[ID == fet_wosub.Work_Order_Exis_ID];
	if(fet_wo.Form_Mode == "Direct WO")
	{
		hide Sales_Order_No;
		hide Customer_Name;
	}
	input.Sales_Order_No = fet_wo.Sales_Order_Nos;
	input.Customer_Name = fet_wo.Customer_Name;
	input.Work_Order_Date = fet_wo.Work_Order_Date;
	input.Part_No = fet_wosub.Part_No;
	input.Part_Name = fet_wosub.Part_Description;
	input.Category = fet_wo.Category;
	input.Sub_Category = fet_wo.Sub_Category;
	input.MRP_Qty = fet_wosub.WO_Qty;
	input.Work_Order_No1 = fet_wo.ID;
	fet_bom = Create_BOM[Part_No == input.Work_Order_Subform_ID.Part_No && Status == "Active"];
	level1 = BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == input.Part_No && BOM_FG_Exis_ID.Status == "Active"];
	inside_gplevel1 = 0;
	inside_gplevel2 = 0;
	inside_gplevel3 = 0;
	inside_gplevel4 = 0;
	inside_gplevel5 = 0;
	for each  levellist1 in level1
	{
		level2 = BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == levellist1.Part_No && BOM_FG_Exis_ID.Status == "Active"];
		if(levellist1.Material_Item_Type.Material_Type == "CWPL Products" || levellist1.Material_Item_Type.Material_Type == "HR Coils and Sheets")
		{
			cwplrow = MRP.BoM_Details_CWPL();
			inven1 = Inventory[Part_No == levellist1.Part_No].sum(Available_Qty);
			cwplrow.Part_No=levellist1.Part_No;
			cwplrow.Part_Name=levellist1.Part_Description;
			cwplrow.UoM=levellist1.UoM;
			cwplrow.Work_Order_No=fet_wo.ID;
			cwplrow.Stock_Qty=inven1.round(0);
			cwplrow.Material_Item_Type=levellist1.Material_Item_Type;
			cwplrow.bom_stk_qty=ifnull(levellist1.Qty,0.0);
			cwplrow.Level="Level-1";
			cwplrow.test_level="Level-1";
			cwplrow.Create_BoM_RECID=fet_bom.ID;
			cwplrow.Tot_BoM_Qty=ifnull(input.MRP_Qty,0) * ifnull(cwplrow.bom_stk_qty,0.0);
			//CALCULATION PART
			if(cwplrow.Stock_Qty >= input.MRP_Qty)
			{
				cwplrow.Actual_Qty=0;
				cwplrow.Plan_Qty=0;
				cwplrow.BoM_Qty=ifnull(input.MRP_Qty,0);
				//cwplrow.BoM_Qty=0;
			}
			else if(cwplrow.Stock_Qty < input.MRP_Qty)
			{
				cwplrow.Actual_Qty=ifnull(input.MRP_Qty,0) * ifnull(cwplrow.bom_stk_qty,0.0) - ifnull(cwplrow.Stock_Qty,0);
				cwplrow.BoM_Qty=ifnull(input.MRP_Qty,0);
				cwplrow.Plan_Qty=ifnull(input.MRP_Qty,0) * ifnull(cwplrow.bom_stk_qty,0.0) - ifnull(cwplrow.Stock_Qty,0);
			}
			else if(cwplrow.Stock_Qty > input.MRP_Qty)
			{
				cwplrow.BoM_Qty=ifnull(input.MRP_Qty,0);
				cwplrow.Actual_Qty=0;
				cwplrow.Plan_Qty=0;
			}
			input.BoM_Details_CWPL.insert(cwplrow);
		}
		for each  abc in BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == input.Part_No && BOM_FG_Exis_ID.Status == "Active" && Material_Item_Type.Material_Type == "General Purchase"]
		{
			if(inside_gplevel1 == 0)
			{
				if(abc.Material_Item_Type.Material_Type == "General Purchase")
				{
					fetind = Indent_Sub_Form[Part_No == abc.Part_No].sum(Required_Qty);
					dprsub = DPR_General_Purchase_Stock_Qty[Part_No == abc.Part_No];
					gprow = MRP.BoM_Details_General_Purchase();
					inven = Inventory[Part_No == abc.Part_No].sum(Available_Qty);
					gprow.Part_No=abc.Part_No;
					gprow.Part_Name=abc.Part_Description;
					gprow.UoM=abc.UoM;
					gprow.Work_Order_No=fet_wo.ID;
					gprow.Material_Item_Type=abc.Material_Item_Type;
					gprow.Org_BoM_Qty=ifnull(abc.Qty,0.0);
					gprow.Stock_Qty=inven.round(0);
					gprow.Indent_Qty=fetind;
					gprow.Level="Level";
					gprow.test_level="Level-1";
					gprow.Create_BoM_RECID=fet_bom.ID;
					gprow.BoM_Qty=ifnull(input.MRP_Qty,0);
					gprow.Material_Center_Qty=ifnull(dprsub.GP_Balance_Qty,0);
					//CALCULATION PART
					//Below ifelse is to check negative value
					if(gprow.Material_Center_Qty == 0)
					{
						if(ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0) - ifnull(gprow.Stock_Qty,0) >= 0)
						{
							gprow.Tot_BoM_Qty=ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0);
							gprow.Plan_Qty=ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0) - ifnull(gprow.Stock_Qty,0);
						}
						else if(ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0) - ifnull(gprow.Stock_Qty,0) < 0)
						{
							gprow.Tot_BoM_Qty=ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0);
							gprow.Plan_Qty=ifnull(gprow.Stock_Qty,0) - ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0);
						}
						gprow.Purchase_Qty=ifnull(gprow.Plan_Qty,0);
						input.BoM_Details_General_Purchase.insert(gprow);
					}
					else if(gprow.Material_Center_Qty > 0)
					{
						if(ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0) - ifnull(gprow.Material_Center_Qty,0) >= 0)
						{
							gprow.Tot_BoM_Qty=ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0);
							gprow.Plan_Qty=ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0) - ifnull(gprow.Material_Center_Qty,0);
						}
						else if(ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0) - ifnull(gprow.Material_Center_Qty,0) < 0)
						{
							gprow.Tot_BoM_Qty=ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0);
							gprow.Plan_Qty=ifnull(gprow.Material_Center_Qty,0) - ifnull(gprow.BoM_Qty,0) * ifnull(gprow.Org_BoM_Qty,0.0);
						}
						gprow.Purchase_Qty=ifnull(gprow.Plan_Qty,0);
						input.BoM_Details_General_Purchase.insert(gprow);
					}
				}
			}
		}
		inside_gplevel1 = 1;
		cnt = 0;
		for each  levellist2 in level2
		{
			crtbom = Create_BOM[BoM_FG_Subform_ID == levellist2.ID && Status == "Active"];
			cnt = cnt + 1;
			level3 = BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == levellist2.Part_No && BOM_FG_Exis_ID.Status == "Active"];
			if(levellist2.Material_Item_Type.Material_Type == "CWPL Products" || levellist2.Material_Item_Type.Material_Type == "HR Coils and Sheets")
			{
				cwplrow2 = MRP.BoM_Details_CWPL();
				inven1 = Inventory[Part_No == levellist2.Part_No].sum(Available_Qty);
				cwplrow2.Part_No=levellist2.Part_No;
				cwplrow2.Part_Name=levellist2.Part_Description;
				cwplrow2.UoM=levellist2.UoM;
				cwplrow2.Work_Order_No=fet_wo.ID;
				cwplrow2.Stock_Qty=inven1.round(0);
				cwplrow2.Material_Item_Type=levellist2.Material_Item_Type;
				cwplrow2.bom_stk_qty=ifnull(levellist2.Qty,0.0);
				cwplrow2.Level="Level-2";
				cwplrow2.test_level="Level1." + cnt;
				cwplrow2.Create_BoM_RECID=crtbom.ID;
				cwplrow2.BoM_Qty=cwplrow.Actual_Qty;
				cwplrow2.Tot_BoM_Qty=ifnull(cwplrow2.BoM_Qty,0.0) * ifnull(cwplrow2.bom_stk_qty,0.0);
				//CALCULATION PART
				planqty = 0.0;
				stkqty = 0.0;
				if(cwplrow2.Stock_Qty >= cwplrow2.Tot_BoM_Qty)
				{
					cwplrow2.Actual_Qty=0;
					//cwplrow2.BoM_Qty=0;
					cwplrow2.Plan_Qty=0;
				}
				if(cwplrow2.Stock_Qty < cwplrow2.Tot_BoM_Qty && cwplrow2.BoM_Qty != null)
				{
					planqty = ifnull(cwplrow2.BoM_Qty,0.0) * ifnull(cwplrow2.bom_stk_qty,0.0);
					stkqty = planqty - ifnull(cwplrow2.Stock_Qty,0.0);
					cwplrow2.Actual_Qty=stkqty;
					cwplrow2.Plan_Qty=stkqty;
				}
				input.BoM_Details_CWPL.insert(cwplrow2);
			}
			for each  abc2 in BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == levellist1.Part_No && Material_Item_Type.Material_Type == "General Purchase" && BOM_FG_Exis_ID.Status == "Active"]
			{
				if(inside_gplevel2 == 0)
				{
					if(abc2.Material_Item_Type.Material_Type == "General Purchase")
					{
						fetind = Indent_Sub_Form[Part_No == abc2.Part_No].sum(Required_Qty);
						dprsub = DPR_General_Purchase_Stock_Qty[Part_No == abc2.Part_No];
						gprow2 = MRP.BoM_Details_General_Purchase();
						inven = Inventory[Part_No == abc2.Part_No].sum(Available_Qty);
						gprow2.Part_No=abc2.Part_No;
						gprow2.Part_Name=abc2.Part_Description;
						gprow2.UoM=abc2.UoM;
						gprow2.Work_Order_No=fet_wo.ID;
						gprow2.Material_Item_Type=abc2.Material_Item_Type;
						gprow2.Org_BoM_Qty=ifnull(abc2.Qty,0.0);
						gprow2.Stock_Qty=inven.round(0);
						gprow2.Indent_Qty=fetind;
						gprow2.Level="Level-1";
						gprow2.test_level="Level1." + cnt;
						gprow2.Create_BoM_RECID=crtbom.ID;
						//CALCULATION PART
						gprow2.BoM_Qty=ifnull(cwplrow.Actual_Qty,0);
						gprow2.Tot_BoM_Qty=ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0);
						gprow2.Material_Center_Qty=ifnull(dprsub.GP_Balance_Qty,0);
						//Below ifelse is to check negative value
						if(gprow2.Material_Center_Qty == 0)
						{
							if(ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0) - ifnull(gprow2.Stock_Qty,0) >= 0)
							{
								gprow2.Plan_Qty=ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0) - ifnull(gprow2.Stock_Qty,0);
							}
							else
							{
								gprow2.Plan_Qty=ifnull(gprow2.Stock_Qty,0) - ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0);
							}
							gprow2.Purchase_Qty=ifnull(gprow2.Plan_Qty,0);
							input.BoM_Details_General_Purchase.insert(gprow2);
						}
						else if(gprow2.Material_Center_Qty > 0)
						{
							if(ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0) - ifnull(gprow2.Material_Center_Qty,0) >= 0)
							{
								gprow2.Tot_BoM_Qty=ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0);
								gprow2.Plan_Qty=ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0) - ifnull(gprow2.Material_Center_Qty,0);
							}
							else if(ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0) - ifnull(gprow2.Material_Center_Qty,0) < 0)
							{
								gprow2.Tot_BoM_Qty=ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0);
								gprow2.Plan_Qty=ifnull(gprow2.Material_Center_Qty,0) - ifnull(gprow2.BoM_Qty,0) * ifnull(gprow2.Org_BoM_Qty,0.0);
							}
							gprow2.Purchase_Qty=ifnull(gprow2.Plan_Qty,0);
							input.BoM_Details_General_Purchase.insert(gprow2);
						}
					}
				}
			}
			inside_gplevel2 = 1;
			cnt1 = 0;
			for each  levellist3 in level3
			{
				crtbom1 = Create_BOM[BoM_FG_Subform_ID == levellist3.ID && Status == "Active"];
				cnt1 = cnt1 + 1;
				level4 = BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == levellist3.Part_No && BOM_FG_Exis_ID.Status == "Active"];
				if(levellist3.Material_Item_Type.Material_Type == "CWPL Products" || levellist3.Material_Item_Type.Material_Type == "HR Coils and Sheets")
				{
					cwplrow3 = MRP.BoM_Details_CWPL();
					inven1 = Inventory[Part_No == levellist3.Part_No].sum(Available_Qty);
					cwplrow3.Part_No=levellist3.Part_No;
					cwplrow3.Part_Name=levellist3.Part_Description;
					cwplrow3.UoM=levellist3.UoM;
					cwplrow3.Work_Order_No=fet_wo.ID;
					cwplrow3.Stock_Qty=inven1.round(0);
					cwplrow3.Material_Item_Type=levellist3.Material_Item_Type;
					cwplrow3.bom_stk_qty=ifnull(levellist3.Qty,0.0);
					cwplrow3.Level="Level-3";
					cwplrow3.test_level="Level-1.1" + "." + cnt1;
					cwplrow3.Create_BoM_RECID=crtbom1.ID;
					cwplrow3.BoM_Qty=cwplrow2.Actual_Qty;
					cwplrow3.Tot_BoM_Qty=ifnull(cwplrow3.BoM_Qty,0.0) * ifnull(cwplrow3.bom_stk_qty,0.0);
					//CALCULATION PART
					planqty = 0.0;
					stkqty = 0.0;
					if(cwplrow3.Stock_Qty >= cwplrow3.Tot_BoM_Qty)
					{
						cwplrow3.Actual_Qty=0;
						//	cwplrow3.BoM_Qty=0;
						cwplrow3.Plan_Qty=0;
					}
					if(cwplrow3.Stock_Qty < cwplrow3.Tot_BoM_Qty && cwplrow3.Tot_BoM_Qty != null)
					{
						planqty = ifnull(cwplrow3.BoM_Qty,0.0) * ifnull(cwplrow3.bom_stk_qty,0.0);
						stkqty = planqty - ifnull(cwplrow3.Stock_Qty,0.0);
						cwplrow3.Actual_Qty=stkqty;
						cwplrow3.Plan_Qty=stkqty;
					}
					input.BoM_Details_CWPL.insert(cwplrow3);
				}
				for each  abc3 in BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == levellist2.Part_No && Material_Item_Type.Material_Type == "General Purchase" && BOM_FG_Exis_ID.Status == "Active"]
				{
					if(inside_gplevel3 == 0)
					{
						if(abc3.Material_Item_Type.Material_Type == "General Purchase")
						{
							fetind = Indent_Sub_Form[Part_No == abc3.Part_No].sum(Required_Qty);
							dprsub = DPR_General_Purchase_Stock_Qty[Part_No == abc3.Part_No];
							gprow3 = MRP.BoM_Details_General_Purchase();
							inven = Inventory[Part_No == abc3.Part_No].sum(Available_Qty);
							gprow3.Part_No=abc3.Part_No;
							gprow3.Part_Name=abc3.Part_Description;
							gprow3.UoM=abc3.UoM;
							gprow3.Work_Order_No=fet_wo.ID;
							gprow3.Material_Item_Type=abc3.Material_Item_Type;
							gprow3.Org_BoM_Qty=ifnull(abc3.Qty,0.0);
							gprow3.Stock_Qty=inven.round(0);
							gprow3.Indent_Qty=fetind;
							gprow3.Level="Level-2";
							gprow3.test_level="Level-1.1" + "." + cnt1;
							gprow3.Create_BoM_RECID=crtbom1.ID;
							gprow3.Material_Center_Qty=ifnull(dprsub.GP_Balance_Qty,0);
							//CALCULATION PART
							gprow3.BoM_Qty=ifnull(cwplrow2.Actual_Qty,0);
							gprow3.Tot_BoM_Qty=ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0);
							gprow3.Material_Center_Qty=ifnull(dprsub.GP_Balance_Qty,0);
							//Below ifelse is to check negative value
							if(gprow3.Material_Center_Qty == 0)
							{
								if(ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0) - ifnull(gprow3.Stock_Qty,0) >= 0)
								{
									gprow3.Plan_Qty=ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0) - ifnull(gprow3.Stock_Qty,0);
								}
								else
								{
									gprow3.Plan_Qty=ifnull(gprow3.Stock_Qty,0) - ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0);
								}
								gprow3.Purchase_Qty=ifnull(gprow3.Plan_Qty,0);
								input.BoM_Details_General_Purchase.insert(gprow3);
							}
							else if(gprow3.Material_Center_Qty > 0)
							{
								if(ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0) - ifnull(gprow3.Material_Center_Qty,0) >= 0)
								{
									gprow3.Tot_BoM_Qty=ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0);
									gprow3.Plan_Qty=ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0) - ifnull(gprow3.Material_Center_Qty,0);
								}
								else if(ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0) - ifnull(gprow3.Material_Center_Qty,0) < 0)
								{
									gprow3.Tot_BoM_Qty=ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0);
									gprow3.Plan_Qty=ifnull(gprow3.Material_Center_Qty,0) - ifnull(gprow3.BoM_Qty,0) * ifnull(gprow3.Org_BoM_Qty,0.0);
								}
								gprow3.Purchase_Qty=ifnull(gprow3.Plan_Qty,0);
								input.BoM_Details_General_Purchase.insert(gprow3);
							}
						}
					}
				}
				inside_gplevel3 = 1;
				cnt2 = 0;
				for each  levellist4 in level4
				{
					crtbom2 = Create_BOM[BoM_FG_Subform_ID == levellist4.ID && Status == "Active"];
					level5 = BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == levellist4.Part_No && BOM_FG_Exis_ID.Status == "Active"];
					cnt2 = cnt2 + 1;
					if(levellist4.Material_Item_Type.Material_Type == "CWPL Products" || levellist4.Material_Item_Type.Material_Type == "HR Coils and Sheets")
					{
						cwplrow4 = MRP.BoM_Details_CWPL();
						inven1 = Inventory[Part_No == levellist4.Part_No].sum(Available_Qty);
						cwplrow4.Part_No=levellist4.Part_No;
						cwplrow4.Part_Name=levellist4.Part_Description;
						cwplrow4.UoM=levellist4.UoM;
						cwplrow4.Work_Order_No=fet_wo.ID;
						cwplrow4.Stock_Qty=inven1.round(0);
						cwplrow4.Material_Item_Type=levellist4.Material_Item_Type;
						cwplrow4.bom_stk_qty=ifnull(levellist4.Qty,0.0);
						cwplrow4.Level="Level-4";
						cwplrow4.test_level="Level-1.1" + "." + cnt1 + "." + cnt2;
						cwplrow4.Create_BoM_RECID=crtbom2.ID;
						cwplrow4.BoM_Qty=cwplrow3.Actual_Qty;
						cwplrow4.Tot_BoM_Qty=ifnull(cwplrow4.bom_stk_qty,0.0) * ifnull(cwplrow4.BoM_Qty,0.0);
						//CALCULATION PART
						planqty = 0.0;
						stkqty = 0.0;
						if(cwplrow4.Stock_Qty >= cwplrow4.Tot_BoM_Qty)
						{
							cwplrow4.Actual_Qty=0;
							//cwplrow4.BoM_Qty=0;
							cwplrow4.Plan_Qty=0;
						}
						if(cwplrow4.Stock_Qty < cwplrow4.Tot_BoM_Qty && cwplrow4.Tot_BoM_Qty != null)
						{
							planqty = ifnull(cwplrow4.BoM_Qty,0.0) * ifnull(cwplrow4.bom_stk_qty,0.0);
							stkqty = planqty - ifnull(cwplrow4.Stock_Qty,0.0);
							cwplrow4.Actual_Qty=stkqty;
							cwplrow4.Plan_Qty=stkqty;
						}
						input.BoM_Details_CWPL.insert(cwplrow4);
					}
					for each  abc4 in BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == levellist3.Part_No && Material_Item_Type.Material_Type == "General Purchase" && BOM_FG_Exis_ID.Status == "Active"]
					{
						if(inside_gplevel4 == 0)
						{
							if(abc4.Material_Item_Type.Material_Type == "General Purchase")
							{
								fetind = Indent_Sub_Form[Part_No == abc4.Part_No].sum(Required_Qty);
								dprsub = DPR_General_Purchase_Stock_Qty[Part_No == abc4.Part_No];
								gprow4 = MRP.BoM_Details_General_Purchase();
								inven = Inventory[Part_No == abc4.Part_No].sum(Available_Qty);
								gprow4.Part_No=abc4.Part_No;
								gprow4.Part_Name=abc4.Part_Description;
								gprow4.UoM=abc4.UoM;
								gprow4.Work_Order_No=fet_wo.ID;
								gprow4.Material_Item_Type=abc4.Material_Item_Type;
								gprow4.Org_BoM_Qty=ifnull(abc4.Qty,0.0);
								gprow4.Stock_Qty=inven.round(0);
								gprow4.Indent_Qty=fetind;
								gprow4.Level="Level-3";
								gprow4.test_level="Level-1.1" + "." + cnt1 + "." + cnt2;
								gprow4.Create_BoM_RECID=crtbom2.ID;
								gprow4.Material_Center_Qty=ifnull(dprsub.GP_Balance_Qty,0);
								//CALCULATION PART
								gprow4.BoM_Qty=ifnull(cwplrow3.Actual_Qty,0);
								gprow4.Tot_BoM_Qty=ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0);
								//Below ifelse is to check negative value
								if(gprow4.Material_Center_Qty == 0)
								{
									if(ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0) - ifnull(gprow4.Stock_Qty,0) >= 0)
									{
										gprow4.Plan_Qty=ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0) - ifnull(gprow4.Stock_Qty,0);
									}
									else
									{
										gprow4.Plan_Qty=ifnull(gprow4.Stock_Qty,0) - ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0);
									}
									gprow4.Purchase_Qty=ifnull(gprow4.Plan_Qty,0);
									input.BoM_Details_General_Purchase.insert(gprow4);
								}
								else if(gprow4.Material_Center_Qty > 0)
								{
									if(ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0) - ifnull(gprow4.Material_Center_Qty,0) >= 0)
									{
										gprow4.Tot_BoM_Qty=ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0);
										gprow4.Plan_Qty=ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0) - ifnull(gprow4.Material_Center_Qty,0);
									}
									else if(ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0) - ifnull(gprow4.Material_Center_Qty,0) < 0)
									{
										gprow4.Tot_BoM_Qty=ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0);
										gprow4.Plan_Qty=ifnull(gprow4.Material_Center_Qty,0) - ifnull(gprow4.BoM_Qty,0) * ifnull(gprow4.Org_BoM_Qty,0.0);
									}
									gprow4.Purchase_Qty=ifnull(gprow4.Plan_Qty,0);
									input.BoM_Details_General_Purchase.insert(gprow4);
								}
							}
						}
					}
					inside_gplevel4 = 1;
					cnt3 = 0;
					for each  levellist5 in level5
					{
						crtbom3 = Create_BOM[BoM_FG_Subform_ID == levellist5.ID && Status == "Active"];
						cnt3 = cnt3 + 1;
						if(levellist5.Material_Item_Type.Material_Type == "CWPL Products" || levellist5.Material_Item_Type.Material_Type == "HR Coils and Sheets")
						{
							cwplrow5 = MRP.BoM_Details_CWPL();
							inven1 = Inventory[Part_No == levellist5.Part_No].sum(Available_Qty);
							cwplrow5.Part_No=levellist5.Part_No;
							cwplrow5.Part_Name=levellist5.Part_Description;
							cwplrow5.UoM=levellist5.UoM;
							cwplrow5.Work_Order_No=fet_wo.ID;
							cwplrow5.Stock_Qty=inven1.round(0);
							cwplrow5.Material_Item_Type=levellist5.Material_Item_Type;
							cwplrow5.bom_stk_qty=ifnull(levellist5.Qty,0.0);
							cwplrow5.Level="Level-5";
							cwplrow5.test_level="Level1.1" + "." + cnt1 + "." + cnt2 + "." + cnt3;
							cwplrow5.Create_BoM_RECID=crtbom3.ID;
							cwplrow5.BoM_Qty=cwplrow4.Actual_Qty;
							cwplrow5.Tot_BoM_Qty=ifnull(cwplrow5.BoM_Qty,0.0) * ifnull(cwplrow5.bom_stk_qty,0.0);
							//CALCULATION PART
							planqty = 0.0;
							stkqty = 0.0;
							if(cwplrow5.Stock_Qty >= cwplrow5.Tot_BoM_Qty)
							{
								cwplrow5.Actual_Qty=0;
								//cwplrow5.BoM_Qty=0;
								cwplrow5.Plan_Qty=0;
							}
							if(cwplrow5.Stock_Qty < cwplrow5.BoM_Qty && cwplrow5.Tot_BoM_Qty != null)
							{
								planqty = ifnull(cwplrow5.BoM_Qty,0.0) * ifnull(cwplrow5.bom_stk_qty,0.0);
								stkqty = planqty - ifnull(cwplrow5.Stock_Qty,0.0);
								cwplrow5.Actual_Qty=stkqty;
								cwplrow5.Plan_Qty=stkqty;
							}
							input.BoM_Details_CWPL.insert(cwplrow5);
						}
						for each  abc5 in BoM_FG_Subform[BOM_FG_Exis_ID.Part_No == levellist4.Part_No && Material_Item_Type.Material_Type == "General Purchase" && BOM_FG_Exis_ID.Status == "Active"]
						{
							if(inside_gplevel5 == 0)
							{
								if(abc5.Material_Item_Type.Material_Type == "General Purchase")
								{
									fetind = Indent_Sub_Form[Part_No == abc5.Part_No].sum(Required_Qty);
									dprsub = DPR_General_Purchase_Stock_Qty[Part_No == abc5.Part_No];
									gprow5 = MRP.BoM_Details_General_Purchase();
									inven = Inventory[Part_No == abc5.Part_No].sum(Available_Qty);
									gprow5.Part_No=abc5.Part_No;
									gprow5.Part_Name=abc5.Part_Description;
									gprow5.UoM=abc5.UoM;
									gprow5.Work_Order_No=fet_wo.ID;
									gprow5.Material_Item_Type=abc5.Material_Item_Type;
									gprow5.Org_BoM_Qty=ifnull(abc5.Qty,0.0);
									gprow5.Stock_Qty=inven.round(0);
									gprow5.Indent_Qty=fetind;
									gprow5.Level="Level-4";
									gprow5.test_level="Level1.1" + "." + cnt1 + "." + cnt2 + "." + cnt3;
									gprow5.Create_BoM_RECID=crtbom3.ID;
									//CALCULATION PART
									gprow5.BoM_Qty=ifnull(cwplrow4.Actual_Qty,0);
									gprow5.Tot_BoM_Qty=ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0);
									gprow5.Material_Center_Qty=ifnull(dprsub.GP_Balance_Qty,0);
									//Below ifelse is to check negative value
									if(gprow5.Material_Center_Qty == 0)
									{
										if(ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0) - ifnull(gprow5.Stock_Qty,0) >= 0)
										{
											gprow5.Plan_Qty=ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0) - ifnull(gprow5.Stock_Qty,0);
										}
										else
										{
											gprow5.Plan_Qty=ifnull(gprow5.Stock_Qty,0) - ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0);
										}
										gprow5.Purchase_Qty=ifnull(gprow5.Plan_Qty,0);
										input.BoM_Details_General_Purchase.insert(gprow5);
									}
									else if(gprow5.Material_Center_Qty > 0)
									{
										if(ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0) - ifnull(gprow5.Material_Center_Qty,0) >= 0)
										{
											gprow5.Tot_BoM_Qty=ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0);
											gprow5.Plan_Qty=ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0) - ifnull(gprow5.Material_Center_Qty,0);
										}
										else if(ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0) - ifnull(gprow5.Material_Center_Qty,0) < 0)
										{
											gprow5.Tot_BoM_Qty=ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0);
											gprow5.Plan_Qty=ifnull(gprow5.Material_Center_Qty,0) - ifnull(gprow5.BoM_Qty,0) * ifnull(gprow5.Org_BoM_Qty,0.0);
										}
										gprow5.Purchase_Qty=ifnull(gprow5.Plan_Qty,0);
										input.BoM_Details_General_Purchase.insert(gprow5);
									}
								}
							}
						}
						inside_gplevel5 = 1;
					}
				}
			}
		}
	}
	//Test
	for each  testrec in input.BoM_Details_General_Purchase
	{
		// 				if(testrec.S_No == 1)
		// 				{
		// 					testrec.Stock_Qty=1;
		// 				}
		// 		if(testrec.S_No == 2)
		// 		{
		// 			testrec.Stock_Qty=8;
		// 		}
		// 				if(testrec.S_No == 3)
		// 				{
		// 					testrec.bom_stk_qty=5;
		// 				}
		// 		if(testrec.S_No == 4)
		// 		{
		// 			testrec.Stock_Qty=50;
		// 		}
		// 		if(testrec.S_No == 5)
		// 		{
		// 			testrec.Stock_Qty=1;
		// 		}
		// 		if(testrec.S_No == 6)
		// 		{
		// 			testrec.Stock_Qty=4;
		// 		}
		//      if(testrec.S_No == 7)
		//      {
		//          testrec.Stock_Qty=200;
		//      }
		//      if(testrec.S_No == 8)
		//      {
		//          testrec.Stock_Qty=50;
		//      }
	}
	for each  cwplrec in input.BoM_Details_CWPL
	{
		if(cwplrec.Stock_Qty < cwplrec.Tot_BoM_Qty)
		{
			cwplrec.Blocked_Qty=cwplrec.Stock_Qty;
		}
		if(cwplrec.Tot_BoM_Qty < cwplrec.Stock_Qty)
		{
			cwplrec.Blocked_Qty=cwplrec.Tot_BoM_Qty;
		}
		if(cwplrec.Tot_BoM_Qty == cwplrec.Stock_Qty)
		{
			cwplrec.Blocked_Qty=cwplrec.Stock_Qty;
		}
		if(cwplrec.Stock_Qty <= 0)
		{
			cwplrec.Blocked_Qty=0;
		}
		if(cwplrec.Blocked_Qty > 0)
		{
			cwplrec.Block_Qty=true;
		}
	}
	for each  gprec in input.BoM_Details_General_Purchase
	{
		if(gprec.Stock_Qty < gprec.Tot_BoM_Qty)
		{
			gprec.Blocked_Qty=gprec.Stock_Qty;
		}
		else if(gprec.Tot_BoM_Qty <= gprec.Stock_Qty)
		{
			gprec.Plan_Qty=0;
			gprec.Purchase_Qty=0;
			gprec.Blocked_Qty=gprec.Tot_BoM_Qty;
			//info "if2";
		}
		// 		else if(gprec.Tot_BoM_Qty > gprec.Stock_Qty)
		// 		{
		// 			gprec.Purchase_Qty=gprec.Plan_Qty;
		// 		}
		else if(gprec.Stock_Qty <= 0)
		{
			gprec.Blocked_Qty=0;
			//info "if3";
		}
		else if(gprec.Tot_BoM_Qty == gprec.Stock_Qty)
		{
			gprec.Blocked_Qty=gprec.Stock_Qty;
		}
		if(gprec.Blocked_Qty > 0)
		{
			gprec.Block_Qty=true;
		}
		if(gprec.Purchase_Qty > 0)
		{
			gprec.Draft_Indent=true;
		}
	}
	//SNo for MRP-Subforms
	slno = 0;
	for each  snrec in input.BoM_Details_CWPL
	{
		slno = slno + 1;
		if(snrec.Part_No != null)
		{
			snrec.S_No=slno;
		}
	}
	gslno = 0;
	for each  snrecgp in input.BoM_Details_General_Purchase
	{
		gslno = gslno + 1;
		if(snrecgp.Part_No != null)
		{
			snrecgp.S_No=gslno;
		}
	}
}
//End
check the url below

sudo apt update

sudo apt install -y zsh

it will ask a question for config opt 2

zsh --version

which zsh

whereis zsh

sudo chsh -s /usr/bin/zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

plugins=(git zsh-autosuggestions zsh-syntax-highlighting jsontools dirhistory)
    SELECT
         columnname as 'Original_Value',
         LEN(LTRIM(columnname)) as 'Orig_Val_Char_Count',
         N'['+columnname+']' as 'UnicodeStr_Value',
         LEN(N'['+columnname+']')-2 as 'True_Char_Count'
    FROM mytable 
  bool _showLoading = true;
  @override
  void initState() {
    super.initState();

    Timer(const Duration(seconds: 90), () {
      if (mounted) {
        setState(() {
          _showLoading = false;
        });
      }
    });
  }




 if (pipes.isEmpty) {
              if (_showLoading) {
                return const Padding(
                  padding: EdgeInsets.all(16.0),
                  child: Center(
                    child: Loader(),
                  ),
                );
              } else {
                return const Padding(
                  padding: EdgeInsets.all(16.0),
                  child: Center(
                    child: Text("No pipes found in enquiry"),
                  ),
                );
              }
            } else {



  error: (error, st) {
              return Center(
                child: Text(error.toString()),
              );
            },
            loading: () {
              return const Loader();
            },




 child: (salesStock.isEmpty)
            ? (_showLoading
                ? const Padding(
                    padding: EdgeInsets.all(16.0),
                    child: Center(
                      child: CircularProgressIndicator(),
                    ),
                  )
                : const Padding(
                    padding: EdgeInsets.all(16.0),
                    child: Center(
                      child: Text("No Enquiry Found"),
                    ),
                  ))
{
	"blocks": [
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": " :mirror_ball::star: Boost Days - What's on this week! :star::mirror_ball:"
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "Happy Monday! See below for what's in store for our Boost Days this week:"
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-21: Tuesday, 21st January",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "\n:coffee: *Xero Café*: Café-style beverages and sweet treats \n\n:meow-coffee-intensifies-and-shakes: *Barista Special*: _Caramel Macchiato_ \n\n:pancakes: *Breakfast*: Provided by *Catroux* from *8:30am - 10:30am* \n "
			}
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-22: Wednesday, 22nd January",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": ":hands: *January Global All Hands:* 10am - 11am in the All Hands Space"
			}
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-23: Thursday, 23rd January",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": ":coffee: *Xero Café*: Café-style beverages and sweet treats \n\n :meow-coffee-intensifies-and-shakes: *Barista Special*: _Caramel Macchiato_ \n\n :sandwich: *Light Lunch*: Provided by *Catroux* from *12pm - 1pm* \n\n :massage: *Wellness* Massage therapy in the gym, treat yourself <https://corporate-massage.co.nz/bookable/make/appt/booking.php?c=lytgoz|*here.*> \n\n :cupcake: * New Brand Activation Platform Video:* Join us from 2pm in the All Hands Space to celebrate our new Brand Platform Activation _Your Business Supercharged_ we'll have some delicious cupcakes to enjoy while we watch the video!  \n\n :clinking_glasses: *Social Happy Hour* from 4pm - 5:30pm in our All Hands Space"
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "Stay tuned to this channel for more details, check out the <https://calendar.google.com/calendar/u/0?cid=eGVyby5jb21fMXM4M3NiZzc1dnY0aThpY2FiZDZvZ2xncW9AZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ|*Auckland Social Calendar*>, and get ready to Boost your workdays!\n\nLove,\nWX :wx:"
			}
		}
	]
}
{
	"blocks": [
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": " :mirror_ball::star: Boost Days - What's on this week! :star::mirror_ball:"
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "Happy Monday! See below for what's in store for our Boost Days this week:"
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-14: Tuesday, 14th January",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "\n:coffee: *Xero Café*: Café-style beverages and sweet treats\n:meow-coffee-intensifies-and-shakes: *Barista Special*: Iced Vanilla Long Black \n:pancakes: *Breakfast*: Provided by *Catroux* from *8:30am - 10:30am* \n "
			}
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-16: Thursday, 16th January",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": ":coffee: *Xero Café*: Café-style beverages and sweet treats \n :meow-coffee-intensifies-and-shakes: *Barista Special*: White Chocolate Matcha  \n :sandwich: *Light Lunch*: Provided by *Catroux* from *12pm - 1pm*"
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "Stay tuned to this channel for more details, check out the <https://calendar.google.com/calendar/u/0?cid=eGVyby5jb21fMXM4M3NiZzc1dnY0aThpY2FiZDZvZ2xncW9AZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ|*Auckland Social Calendar*>, and get ready to Boost your workdays!\n\nLove,\nWX :wx:"
			}
		}
	]
}
public class ValidationBehavior<TRequest, TResponse>(IValidator<TRequest>? validator = null)
    : IPipelineBehavior<TRequest, TResponse>
        where TRequest : IRequest<TResponse>
        where TResponse : IErrorOr
{
    private readonly IValidator<TRequest>? _validator = validator;

    public async Task<TResponse> Handle(
        TRequest request,
        RequestHandlerDelegate<TResponse> next,
        CancellationToken cancellationToken)
    {
        if (_validator is null)
        {
            return await next();
        }

        var validationResult = await _validator.ValidateAsync(request, cancellationToken);

        if (validationResult.IsValid)
        {
            return await next();
        }

        var errors = validationResult.Errors
            .ConvertAll(error => Error.Validation(
                code: error.PropertyName,
                description: error.ErrorMessage));

        return (dynamic)errors;
    }
}
const deliveryMode = {
    online: true,
    inperson: false,
    hybrid: true
};

    const result = Object.keys(deliveryMode).filter(key => {
        return typeof deliveryMode[key] === "boolean" && deliveryMode[key] === true;


    console.log(result); // Output: ["online", "hybrid"]
});
import random
name = input("What is your name? ")
print("Good Luck ! ", name)
words = ['rainbow', 'computer', 'science', 'programming',
'python', 'mathematics', 'player', 'condition',
'reverse', 'water', 'board', 'geeks']
word = random.choice(words)
print("Guess the characters")
guesses = ''
turns = 12
while turns > 0:
failed = 0
for char in word:
if char in guesses:
print(char, end=" ")
else:
print("_")
failed += 1
if failed == 0:
print("You Win")
print("The word is: ", word)
break
print()
guess = input("guess a character:")
guesses += guess
if guess not in word:
turns -= 1
print("Wrong")
print("You have", + turns, 'more guesses')
if turns == 0:
print("You Loose")
graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F', 'G'],
    'D': [],
    'E': [],
    'F': [],
    'G': []
}

def bfs(graph, start, goal):
    visited = []  # List to keep track of visited nodes
    queue = []    # Queue for BFS

    visited.append(start)
    queue.append(start)

    while queue:
        s = queue.pop(0)  # Dequeue a node

        if s == goal:  # Stop as soon as the goal is found
            print(s)
            return

        print(s)  # Print the current node

        for neighbor in graph[s]:
            if neighbor not in visited:
                visited.append(neighbor)
                queue.append(neighbor)

# Call the function
bfs(graph, 'A', 'F')
Rows =int(input(Enter number of rows:))
K=o
For I in range (1,rows+1):
     For space in in range (,(rows-i)+1
"use client";

import {useState} from "react";

const usePostData = () => {
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);

  const postData = async (url, payload) => {
    setLoading(true);
    setError(null);

    return fetch(url, {
      method: "POST",
      body: payload,
    })
      .then((response) => {
        if (!response.ok) {
          return response.json().then((errorData) => {
            throw new Error(errorData.message || "Failed to post data");
          });
        }
        return response.json();
      })
      .catch((err) => {
        setError(err.message);
        throw err; // Re-throw the error to allow the component to handle it
      })
      .finally(() => {
        setLoading(false);
      });

  };

  return { postData, loading, error };
};

export default usePostData;
use Illuminate\Http\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->render(function (NotFoundHttpException $e, Request $request) {
        if ($request->is('api/*')) {
            return response()->json([
                'message' => 'Record not found.'
            ], 404);
        }
    });
})
from io import BytesIO
from PIL import Image
from ultralytics import YOLO


def load_model(model_path: str) -> YOLO:
    """Load the YOLO model."""
    return YOLO(model_path)


def process_image(image_bytes: bytes) -> Image:
    """Convert byte stream to PIL image."""
    image = Image.open(BytesIO(image_bytes))
    return image


def save_image(image: Image, output_image_name: str) -> BytesIO:
    """Save the output image to a byte stream and also save it locally."""
    img_byte_arr = BytesIO()
    image.save(img_byte_arr, format="PNG")
    image.save(output_image_name)  # Save the image locally with the given name
    img_byte_arr.seek(0)
    return img_byte_arr


def get_inference_results(model: YOLO, image: Image) -> Image:
    """Run the YOLO model on the image and return the result as a PIL image."""
    results = model(image)
    output_array = results[0].plot()  # This gives a NumPy array
    output_image = Image.fromarray(output_array)
    return output_image
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

iris = datasets.load_iris()
X = iris.data
y = iris.target

Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.3, random_state=42)

model = GaussianNB()

model.fit(Xtrain, ytrain)

predictions = model.predict(Xtest)

accuracy = accuracy_score(y_test, predictions)
confusion = confusion_matrix(y_test, predictions)
report = classification_report(y_test, predictions)

print("Naive Bayes Performance Metrics:")
print("Accuracy:", accuracy)
print("Confusion Matrix:\n", confusion)
print("Classification Report:\n", report)
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

iris = datasets.load_iris()
X = iris.data
y = iris.target

Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.3, random_state=42)

model = DecisionTreeClassifier()
model.fit(Xtrain, ytrain)

predictions = model.predict(Xtest)

accuracy = accuracy_score(y_test, predictions)
confusion = confusion_matrix(y_test, predictions)
report = classification_report(y_test, predictions)

print("Decision Tree Performance Metrics:")
print("Accuracy:", accuracy)
print("Confusion Matrix:\n", confusion)
print("Classification Report:\n", report)
class Graph:
    def __init__(self):
        self.graph = {}

    def add_edge(self, u, v):
        if u not in self.graph:
            self.graph[u] = []
        self.graph[u].append(v)

    def get_neighbors(self, u):
        return self.graph.get(u, [])

def dfs(graph, start, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)
    print(start, end=' ')

    for neighbor in graph.get_neighbors(start):
        if neighbor not in visited:
            dfs(graph, neighbor, visited)

from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])
    visited.add(start)

    while queue:
        node = queue.popleft()
        print(node, end=' ')

        for neighbor in graph.get_neighbors(node):
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)

# Example usage
g = Graph()
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(2, 4)
g.add_edge(2, 5)
g.add_edge(3, 6)
g.add_edge(3, 7)

print("DFS Traversal:")
dfs(g, 1)  # Start from node 1
print("\nBFS Traversal:")
bfs(g, 1)  # Start from node 1
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report, mean_squared_error, r2_score

iris = datasets.load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

model = KNeighborsClassifier()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

accuracy = accuracy_score(y_test, predictions)
confusion = confusion_matrix(y_test, predictions)
report = classification_report(y_test, predictions)

print("KNN Classification Performance Metrics:")
print("Accuracy:", accuracy)
print("Confusion Matrix:\n", confusion)
print("Classification Report:\n", report)

housing = datasets.fetch_california_housing()
X = housing.data
y = housing.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

model = KNeighborsRegressor()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

mse = mean_squared_error(y_test, predictions)
r2 = r2_score(y_test, predictions)

print("\nKNN Regression Performance Metrics:")
print("Mean Squared Error:", mse)
print("R^2 Score:", r2)
{
	"blocks": [
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":mirror_ball: Boost Days - What's On This Week :mirror_ball:"
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "\n\n Happy New Year Melbourne! We've missed you. \n\n Let's kick off the first week back with our awesome Boost Day activations!"
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": "Xero Café :coffee:",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "\n :new-thing: *This week we are offering:* \n\n Cafe Sweet Treats:cupcake: \n\n *Weekly Café Special:* _Iced Hazelnut Latte_"
			}
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": " Wednesday, 8th January :calendar-date-8:",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "\n\n :souvlaki: *Light Lunch*: From *12pm* - this weeks lunch will be Souvlaki's!"
			}
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": "Thursday, 9th January :calendar-date-9:",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": ":breakfast: *Breakfast*: Provided by *Kartel Catering* from *8:30am - 10:30am* in the Wominjeka Breakout Space."
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "Stay tuned for more fun throughout the year. Happy 2025! :party-wx:"
			}
		}
	]
}
{
	"blocks": [
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": " :mirror_ball::star: Boost Days - What's on this week! :star::mirror_ball:"
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "Happy New Year Auckland! We have missed you. \n\n Let's make this a great week back with our Boost Days in full action! See below for what's in store:"
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-7: Tuesday, 7th January",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "\n:coffee: *Xero Café*: Café-style beverages and sweet treats\n:white-chocolate-matcha: *Barista Special*: White Chocolate Matcha \n:pancakes: *Breakfast*: Provided by *Sticky Fingers* from *8:30am - 10:30am* \n "
			}
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-9: Thursday, 9th January",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": ":coffee: *Xero Café*: Café-style beverages and sweet treats \n:white-chocolate-matcha: *Barista Special*: White Chocolate Matcha  \n :sandwich: *Light Lunch*: Provided by *Sticky Fingers* from *12pm - 1pm*"
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "Stay tuned to this channel for more details, check out the <https://calendar.google.com/calendar/u/0?cid=eGVyby5jb21fMXM4M3NiZzc1dnY0aThpY2FiZDZvZ2xncW9AZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ|*Auckland Social Calendar*>, and get ready to Boost your workdays!\n\nLove,\nWX :wx:"
			}
		}
	]
}
class Jeu:
    def __init__(self, N):
        self.damier = [[0 for _ in range(N)] for _ in range(N)]  
        self.N = N  
        
        self.damier[N // 2 - 1][N // 2 - 1] = 1
        self.damier[N // 2 - 1][N // 2] = 2
        self.damier[N // 2][N // 2 - 1] = 2
        self.damier[N // 2][N // 2] = 1

    def afficher(self):
        """Affiche le damier avec des bordures."""
        N = self.N
        t = self.damier
        
        print("*" * (N + 4))  
        print("*" * (N + 4))
        
        for i in range(N):
            print("**", end="")  
            for j in range(N):
                if t[i][j] == 0:
                    print(".", end="")  
                elif t[i][j] == 1:
                    print("X", end="")  
                elif t[i][j] == 2:
                    print("O", end="")  
            print("**")  
        
        print("*" * (N + 4))  
        print("*" * (N + 4))

    def jouer(self):
        """Permet aux joueurs de jouer à tour de rôle."""
        while True:
            
            while True:
                try:
                    joueur = int(input("Qui joue ? (1 ou 2) : "))
                    if joueur in [1, 2]:
                        break
                    else:
                        print("Veuillez choisir 1 ou 2 uniquement.")
                except ValueError:
                    print("Entrée invalide. Entrez un nombre (1 ou 2).")

           
            while True:
                try:
                    ligne = int(input(f"Donnez le numéro de ligne (1 à {self.N}) : "))
                    colonne = int(input(f"Donnez le numéro de colonne (1 à {self.N}) : "))
                    
                    if 1 <= ligne <= self.N and 1 <= colonne <= self.N:
                        if self.damier[ligne - 1][colonne - 1] == 0:  
                            break
                        else:
                            print("La case est déjà occupée. Choisissez une autre.")
                    else:
                        print(f"Les coordonnées doivent être entre 1 et {self.N}.")
                except ValueError:
                    print("Entrée invalide. Entrez un nombre.")

            
            self.damier[ligne - 1][colonne - 1] = joueur

            
            self.afficher()

            
            quitter = input("Voulez-vous continuer ? (o/n) : ").lower()
            if quitter == "n":
                print("Fin de la partie. Merci d'avoir joué !")
                break



j = Jeu(6)
j.afficher()  
j.jouer()  
class jeu:
    def __init__(self):
        self.plateau=[[0 for i in range(7)]for i in range(6)]

    def afficher(self):
        for i in range(6):
            for j in range(7):
                if self.plateau[i][j]==0:
                    print("| ",end="")
                if self.plateau[i][j]==1:
                    print("|X",end="")
                if self.plateau[i][j]==2:
                    print("|O",end="")
            print()
        print(" - - - - - - -")
        print(" 1 2 3 4 5 6")
    
    def combiendanscolonne(self,k):
        s=0
        for i in range (6):
           if self.plateau[5-i][k-1]!=0:
               s=s+1
        return (s)
    
    def empiler(self,k,c):
        n=self.combiendanscolonne(k)
        if n<6:
            self.plateau[5-n][k-1]=c
            
    def test_ligne(self):
        L=self.plateau
        for i in range (6):
            for j in range (4):
                if L[i][j]==L[i][j+1]==L[i][j+2]==L[i][j+3]!=0:
                    return L[i][j]
        
    def test_colone(self):
        L = self.plateau
        for i in range(3):
            for j in range(7):
                if L[i][j] == L[i + 1][j] == L[i + 2][j] == L[i + 3][j] != 0:
                    return L[i][j]   
    
    def test_diagonale(self):
        L = self.plateau
        
        for i in range(3):  
            for j in range(4):  
                if L[i][j] == L[i + 1][j + 1] == L[i + 2][j + 2] == L[i + 3][j + 3] != 0:
                    return L[i][j]  
        
        for i in range(3, 6):  
            for j in range(4):  
                if L[i][j] == L[i - 1][j + 1] == L[i - 2][j + 2] == L[i - 3][j + 3] != 0:
                    return L[i][j]  


def rejouer():
    while True:
        reponse = input("Voulez-vous rejouer ? (O/N) : ").strip().lower()
        if reponse == 'o':
            return True
        elif reponse == 'n':
            return False
        else:
            print("Réponse invalide. Veuillez répondre par O ou N.")

def game():
    Monjeu = jeu()
    current_player = 1  
    while True:
        while True:
            k1 = int(input("joueur 1 donner la colone :"))
            if (1 <= k1 <= 7) and Monjeu.combiendanscolonne(k1) < 6:  
                Monjeu.empiler(k1, c=1)
                break
            else:
                print("non")
        
        Monjeu.afficher()
        if Monjeu.test_ligne() == 1 or Monjeu.test_colone() == 1 or Monjeu.test_diagonale() == 1:
            print("joueur 1 a gagné")
            break
            
        while True:
            k2 = int(input("joueur 2 donner la colone :"))
            if (1 <= k2 <= 7) and Monjeu.combiendanscolonne(k2) < 6:  
                Monjeu.empiler(k2, c=2)
                break
            else:
                print("non")
        
        Monjeu.afficher()
        if Monjeu.test_ligne() == 2 or Monjeu.test_colone() == 2 or Monjeu.test_diagonale() == 2:
            print("joueur 2 a gagné")
            break

    
    if rejouer():
        game()  
    else:
        print("Merci d'avoir joué !")  


game()
Let me explain the permission hierarchy in Salesforce when it comes to field-level security (FLS):

When both Profile and Permission Set have different levels of field access:
1. The most permissive setting wins
2. Permissions are additive, not restrictive

So in your scenario:
- If you give READ access in the Profile
- But NO access in the Permission Set
- The user will still have READ access to the field

This is because:
- Permission Sets are designed to grant additional access, not restrict it
- They can't be used to revoke permissions that are already granted at the Profile level
- The user will retain the READ access from their base Profile, regardless of the Permission Set settings

To completely restrict access to the field:
- You would need to remove access at both Profile AND Permission Set levels
- Or remove access at the Profile level, since that's the base level of access

Best Practice:
- Keep minimal permissions in the base Profile
- Use Permission Sets to grant additional access when needed
- Don't rely on Permission Sets to restrict access that's already granted in the Profile
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) { Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"$url = (Invoke-WebRequest -Uri 'https://www.python.org/downloads/windows/').Content | Select-String -Pattern 'https://www.python.org/ftp/python/\d+\.\d+\.\d+/python-\d+\.\d+\.\d+-amd64\.exe' -AllMatches | % { `$_.Matches[0].Value }; $path = `$env:USERPROFILE\Downloads\ + (`$url -split '/')[-1]; Invoke-WebRequest -Uri `$url -OutFile $path; if ((Read-Host 'Install? (Y/N)') -ieq 'y') { Start-Process -FilePath $path -Wait }`"" -Verb RunAs } else { $url = (Invoke-WebRequest -Uri 'https://www.python.org/downloads/windows/').Content | Select-String -Pattern 'https://www.python.org/ftp/python/\d+\.\d+\.\d+/python-\d+\.\d+\.\d+-amd64\.exe' -AllMatches | % { $_.Matches[0].Value }; $path = "$env:USERPROFILE\Downloads\" + ($url -split '/')[-1]; Invoke-WebRequest -Uri $url -OutFile $path; if ((Read-Host "Install? (Y/N)") -ieq 'y') { Start-Process -FilePath $path -Wait }}
ERROR: Please disable the open_basedir setting to continue.
star

Tue Jan 07 2025 14:26:53 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:26:02 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:22:06 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:22:05 GMT+0000 (Coordinated Universal Time)

@E23CSEU1151

star

Tue Jan 07 2025 14:19:15 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:18:33 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:17:44 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:15:34 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:08:16 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:04:19 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:02:22 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 14:00:23 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 13:58:55 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 13:55:16 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 13:48:41 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 13:45:42 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 13:43:02 GMT+0000 (Coordinated Universal Time)

@Pooja

star

Tue Jan 07 2025 10:48:23 GMT+0000 (Coordinated Universal Time) https://bluevps.com/blog/how-to-install-oh-my-zsh-on-ubuntu-2204

@StephenThevar #python #djan

star

Tue Jan 07 2025 10:46:25 GMT+0000 (Coordinated Universal Time) https://stackoverflow.com/questions/14255236/count-number-of-characters-in-nvarchar-column

@paulbarry #sql

star

Tue Jan 07 2025 09:14:52 GMT+0000 (Coordinated Universal Time) https://maticz.com/rarible-clone-script

@Abiraminounq

star

Tue Jan 07 2025 06:10:59 GMT+0000 (Coordinated Universal Time)

@Rishi1808

star

Mon Jan 06 2025 23:14:11 GMT+0000 (Coordinated Universal Time)

@FOHWellington

star

Mon Jan 06 2025 23:07:42 GMT+0000 (Coordinated Universal Time)

@FOHWellington

star

Mon Jan 06 2025 21:42:52 GMT+0000 (Coordinated Universal Time) https://github.com/amantinband/error-or?form

@darkoeller

star

Mon Jan 06 2025 21:29:58 GMT+0000 (Coordinated Universal Time)

@davidmchale #filter #boolean #object

star

Mon Jan 06 2025 18:08:49 GMT+0000 (Coordinated Universal Time)

@viinod07

star

Mon Jan 06 2025 18:07:15 GMT+0000 (Coordinated Universal Time)

@viinod07

star

Mon Jan 06 2025 13:50:18 GMT+0000 (Coordinated Universal Time)

@User_used18

star

Mon Jan 06 2025 12:52:40 GMT+0000 (Coordinated Universal Time) https://appticz.com/gojek-clone

@davidscott

star

Mon Jan 06 2025 12:18:45 GMT+0000 (Coordinated Universal Time)

@jakaria

star

Mon Jan 06 2025 06:23:59 GMT+0000 (Coordinated Universal Time) https://laravel.com/docs/11.x/errors

@Sifat_H

star

Sun Jan 05 2025 23:43:43 GMT+0000 (Coordinated Universal Time) https://www.construct.net/en

@DJHENRY #drupal

star

Sun Jan 05 2025 23:43:20 GMT+0000 (Coordinated Universal Time) https://www.construct.net/en

@DJHENRY

star

Sun Jan 05 2025 23:43:08 GMT+0000 (Coordinated Universal Time) https://www.thiscodeworks.com/extension/initializing?newuser

@DJHENRY #webassembly

star

Sun Jan 05 2025 20:03:24 GMT+0000 (Coordinated Universal Time)

@Gautam

star

Sun Jan 05 2025 12:44:45 GMT+0000 (Coordinated Universal Time)

@wayneinvein

star

Sun Jan 05 2025 12:34:26 GMT+0000 (Coordinated Universal Time)

@wayneinvein

star

Sun Jan 05 2025 12:22:17 GMT+0000 (Coordinated Universal Time)

@wayneinvein

star

Sun Jan 05 2025 12:16:37 GMT+0000 (Coordinated Universal Time)

@wayneinvein

star

Sun Jan 05 2025 11:38:44 GMT+0000 (Coordinated Universal Time)

@FOHWellington

star

Sun Jan 05 2025 11:25:40 GMT+0000 (Coordinated Universal Time)

@FOHWellington

star

Sat Jan 04 2025 23:27:41 GMT+0000 (Coordinated Universal Time)

@Radhwen_hajri

star

Sat Jan 04 2025 23:27:18 GMT+0000 (Coordinated Universal Time)

@Radhwen_hajri

star

Sat Jan 04 2025 19:39:49 GMT+0000 (Coordinated Universal Time) https://store.lunarclient.com/

@MasteriX1337

star

Sat Jan 04 2025 14:25:04 GMT+0000 (Coordinated Universal Time) https://stackoverflow.com/questions/52578270/install-python-with-cmd-or-powershell

@baamn #powershell #python

star

Sat Jan 04 2025 14:19:45 GMT+0000 (Coordinated Universal Time) https://ai.google.dev/gemini-api/docs/quickstart?lang=python

@baamn #python #google #api

star

Sat Jan 04 2025 07:22:02 GMT+0000 (Coordinated Universal Time) https://globehire.hypertechglobaltechnologies.com/

@Nikhil4081

Save snippets that work with our extensions

Available in the Chrome Web Store Get Firefox Add-on Get VS Code extension