/*----------------------------------------------------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; } }