MRP-ONLOAD

PHOTO EMBED

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

Saved by @Pooja

//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
content_copyCOPY