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