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
	]
}