WO on Success

PHOTO EMBED

Thu Jan 16 2025 04:50:45 GMT+0000 (Coordinated Universal Time)

Saved by @Nisha

if(input.Auto_Approval == "Yes")
{
	input.Approval = "Approved";
	//input.WO_Status = "Open";
	input.WO_Status = "WO Created";
	input.Material_Details.Work_Order_Status = "WO Created";
	if(input.Form_Mode == "Direct WO")
	{
		// 		input.Approval = "Approved";
		// 		input.WO_Status = "WO Created";
		// 		input.Material_Details.Work_Order_Status = "WO Created";
		input.Approval = "Pending";
		input.WO_Status = "Waiting for approval";
		for each  stat in input.Material_Details
		{
			stat.Work_Order_Status="Waiting for approval";
		}
	}
	if(input.Form_Mode == "Draft WO-Regular Wheels")
	{
		input.Approval = "Approved";
		//input.WO_Status = "Open";
		input.WO_Status = "WO Created";
		input.Material_Details.Work_Order_Status = "WO Created";
		//---------After creating WO, status Change in Draft WO-Regular Wheels Form 
		DFWO = Create_WO_for_Regular_Wheels[ID == input.Draft_Work_Order_ID];
		DFWOSUB = DF_Work_Order_Subform[Draft_Work_Order_RecID == DFWO.ID];
		DFWO.WO_Status="WO Created";
		DFWOSUB.Status="Draft WO Created";
		// 		input.Material_Details.Work_Order_Status = "WO Created";
		for each  darftstat in input.Material_Details
		{
			darftstat.Work_Order_Status="WO Created";
		}
	}
	fet_so = Sales_Order[ID == input.Sales_Order_Nos];
	for each  var in input.Material_Details
	{
		sosub = Sale_Order_Subform[ID == var.Sale_Order_Subform_ID];
		wosub = Work_Order_Subform[Sale_Order_Subform_ID == sosub.ID].sum(WO_Qty);
		//----------Block the Qty in Inventory while creating WO-------------
		if(input.Form_Mode == "WO against SO")
		{
			inventory = Inventory[Part_No == sosub.Part_No] sort by Available_Qty desc;
			//------------Changing inventory as Virtual stock ----------------------
			//inventory = Virtual_Stock[Part_No == sosub.Part_No] sort by Available_Qty desc;
			WosubID = Work_Order_Subform[Part_No == var.Part_No];
			// WO_RECID = WosubID.Work_Order_Exis_ID;
			//var.Block_Qty=var.WO_Qty;
			blkqty = if(var.WO_Qty >= var.Stock_Qty,var.Stock_Qty,var.WO_Qty);
			blkqty = if(var.Stock_Qty >= var.SO_Quantity,var.Block_Qty,blkqty);
			var.Block_Qty=blkqty;
			sosub.WO_Blk_Qty=blkqty;
			if(inventory.count() > 0)
			{
				balqty = 0;
				i = 1;
				if(var.Block_Qty != null)
				{
					for each  inven in inventory
					{
						if(blkqty > inven.Available_Qty)
						{
							inven.Block_Qty=ifnull(inven.Available_Qty,0) + ifnull(inven.Block_Qty,0);
							blkqty = blkqty - ifnull(inven.Available_Qty,0);
							inven.Available_Qty=0.00;
							// inventory.Total_Qty = 0.00;
						}
						else if(blkqty <= inven.Available_Qty)
						{
							// inven.Total_Qty = ifnull(inven.Total_Qty,0)  - ifnull(var.Block_Qty ,0);
							inven.Available_Qty=ifnull(inven.Available_Qty,0) - ifnull(blkqty,0);
							inven.Block_Qty=ifnull(blkqty,0) + ifnull(inven.Block_Qty,0);
							blkqty = 0.00;
						}
						//----------New Code checking for block & wo are same eg 50=50 & stock 100 is > 50--------
						// 						else if ( var.WO_Qty == var.Block_Qty && var.Stock_Qty >= var.Block_Qty ) 
						//                         {
						// 						inven.Available_Qty=ifnull(inven.Available_Qty,0) - ifnull(blkqty,0);
						// 							inven.Block_Qty=ifnull(blkqty,0) + ifnull(inven.Block_Qty,0);
						// 							blkqty = 0.00;
						//                         }
						//------------------------------------------------------------------------------
						/* 						if(balqty > 0 && i > 1)
						{
							//info "balance qty is more than zero";
							//Balance Qty is less 
							if(balqty <= inven.Available_Qty)
							{
								//info "balance qty is less than total qty";
								//inven.Total_Qty=ifnull(inven.Total_Qty,0.0) - ifnull(balqty,0.0);
								inven.Available_Qty=ifnull(inven.Available_Qty,0.0) - ifnull(balqty,0.0);
								balqty = 0;
							}
							//----Balance Qty is More------
							else if(balqty >= inven.Available_Qty)
							{
								//info "balance qty is greater than total qty";
								balqty = ifnull(balqty,0.0) - ifnull(inven.Available_Qty,0.0);
								//inven.Total_Qty=0;
								inven.Available_Qty=0;
							}
						} */
						if(blkqty == 0)
						{
							//info "before break";
							break;
						}
						//i = i + 1;
					}
					insblock = insert into Block_Quantity
					[
						Part_No=var.Part_No
						Part_Name=var.Part_Description
						Form_Type=input.Form_Mode
						Block_Qty=var.Block_Qty
						WO_No=input.ID
						WO_RECID=input.ID
						Status="Blocked from WO"
						Added_User=zoho.loginuser
					];
					insblock = insert into FG_Block_Stock1
					[
						Part_No=var.Part_No
						Part_Name=var.Part_Description
						Form_Type=input.Form_Mode
						Block_Qty=var.Block_Qty
						WO_No=input.ID
						WO_RECID=input.ID
						Status="Blocked from WO"
						Added_User=zoho.loginuser
					];
				}
			}
		}
		//______________________________________________________________________________________
		if(sosub.count() > 0 && fet_so.count() > 0)
		{
			/* 			if(sosub.Qty != wosub && input.Form_Mode == "WO against SO")
			{
				sosub.Status="WO Partially Completed";
				input.WO_Status = "WO Partially Completed";
				fet_so.SO_Status="WO Partially Completed";
				fet_so.CWPL_SO_Status="WO Partially Completed";
			} */
			// 			if( input.Form_Mode == "WO against SO")
			// 			{
			// 				sosub.Status="Active";
			// 				//input.WO_Status = "WO Partially Completed";
			// 				fet_so.SO_Status="Open";
			// 				fet_so.CWPL_SO_Status="Active";
			// 			} 
			salsub = Sale_Order_Subform[Sales_Order_Exis_ID == fet_so.ID && ID != var.Sale_Order_Subform_ID && Status == "Active"];
			if(input.Form_Mode == "WO against SO")
			{
				sosub.Status="WO Created";
				input.WO_Status = "WO Created";
				for each  wotstat in input.Material_Details
				{
					wotstat.Work_Order_Status="WO Created";
					//---------If stock > So & Wo is 0 , WO is closed ,then Wo status is WO Closed
					if(wotstat.Stock_Qty >= wotstat.SO_Quantity && wotstat.WO_Qty == 0)
					{
						input.WO_Status = "WO Closed";
						wotstat.Work_Order_Status="WO Closed";
						sosub.Status="WO Closed";
					}
					//------------------------------------------------
				}
				//----------------------------------------------------
				sosub.Work_Order_RECID=input.ID;
				sosub.Work_Order_Subform_ID=WosubID.ID;
				sosub.Wo_Delivery_Date_in_sosub=input.Expected_Delivery_Date;
				sosub.WO_Status_in_sosub=input.WO_Status;
				//------------------------------------------------
				if(salsub.count() == 0)
				{
					fet_so.SO_Status="WO Created";
					fet_so.CWPL_SO_Status="WO Created";
				}
				//fet_so.SO_Status="WO Created";
				//fet_so.CWPL_SO_Status="WO Created";
				/* 				for each  updstatus in Work_Order[Sales_Order_Nos == input.Sales_Order_Nos]
				{
					updstatus.WO_Status="WO Created";
				} */
			}
		}
	}
	//-----------------Direct WO , Block QTY Calculation-----------------
	/* 	for each  var1 in input.Material_Details
	{
		var1.Block_Qty=var1.WO_Qty;
		if(var1.Block_Qty != null)
		{
			wo = Work_Order[ID == input.ID];
			wosub = Work_Order_Subform[Work_Order_Exis_ID = wo.ID];
			if(input.Form_Mode == "Direct WO")
			{
				//info input.Form_Mode;
				//fet_inventory = Inventory[Part_No == var1.Part_No] sort by Available_Qty desc;
				//------------Changing inventory as Virtual stock ----------------------
				fet_inventory = Virtual_Stock[Part_No == var1.Part_No] sort by Available_Qty desc;
				WOSUB = Work_Order_Subform[Part_No == var1.Part_No];
				if(fet_inventory.count() > 0)
				{
					balqty = 0;
					i = 1;
					info fet_inventory.count();
					//info var1.Block_Qty + "block qty";
					for each  inv1 in fet_inventory
					{
						//info "inven for";
						//info var1.WO_Qty ;
						//info inv1.Available_Qty; 
						if(var1.WO_Qty > inv1.Available_Qty)
						{
							//info " WO > INV";
							inv1.Block_Qty=ifnull(inv1.Available_Qty,0);
							inv1.Available_Qty=0.00;
						}
						else if(var1.WO_Qty <= inv1.Available_Qty)
						{
							//info " WO <= INV";
							//avail = ifnull(inv1.Available_Qty,0) - ifnull(var1.Block_Qty,0);
							//info avail;
							inv1.Available_Qty=ifnull(inv1.Available_Qty,0) - ifnull(var1.Block_Qty,0);
							inv1.Block_Qty=ifnull(var1.Block_Qty,0);
						}
						//for first time it should not get inside the loop 
						if(balqty > 0 && i > 1)
						{
							//info "balance qty is more than zero";
							//Balance Qty is less 
							if(balqty <= inv1.Total_Qty)
							{
								//info "balance qty is less than total qty";
								inv1.Total_Qty=ifnull(inv1.Total_Qty,0.0) - ifnull(balqty,0.0);
								inv1.Available_Qty=ifnull(inv1.Available_Qty,0.0) - ifnull(balqty,0.0);
								balqty = 0;
							}
							//----Balance Qty is More------
							else if(balqty >= inv1.Total_Qty)
							{
								//info "balance qty is greater than total qty";
								balqty = ifnull(balqty,0.0) - ifnull(inv1.Total_Qty,0.0);
								inv1.Total_Qty=0;
								inv1.Available_Qty=0;
							}
						}
						if(balqty == 0)
						{
							//info "before break";
							break;
						}
						i = i + 1;
					}
				}
			}
		}
	} */
	//----------Draft WO- Reguakr Wheels Block QTY Calculation------------------
	/* 		for each  var2 in input.Material_Details
		{
			var2.Block_Qty=var2.WO_Qty;
			if(var2.Block_Qty != null)
			{
				DFWO = Create_WO_for_Regular_Wheels[ID == input.Draft_Work_Order_ID];
				DFWOSUB = DF_Work_Order_Subform[Draft_Work_Order_RecID == DFWO.ID];
				if(input.Form_Mode == "Draft WO-Regular Wheels")
				{
					//info input.Form_Mode;
					//get_inventory = Inventory[Part_No == var2.Part_No] sort by Available_Qty desc;
					//------------Changing inventory as Virtual stock ----------------------
					get_inventory = Virtual_Stock[Part_No == var2.Part_No] sort by Available_Qty desc;
					dfsub = DF_Work_Order_Subform[Part_No == var2.Part_No];
					if(get_inventory.count() > 0)
					{
						balqty = 0;
						i = 1;
						//info get_inventory.count();
						//info var2.Block_Qty + "block qty";
						for each  inv in get_inventory
						{
							//info "inven for";
							if(var2.WO_Qty > inv.Available_Qty)
							{
								inv.Block_Qty=ifnull(inv.Available_Qty,0);
								inv.Available_Qty=0.00;
							}
							else if(var2.WO_Qty < inv.Available_Qty)
							{
								inv.Available_Qty=ifnull(inv.Available_Qty,0) - ifnull(var2.Block_Qty,0);
								inv.Block_Qty=ifnull(var2.Block_Qty,0);
							}
							//for first time it should not get inside the loop 
							if(balqty > 0 && i > 1)
							{
								//info "balance qty is more than zero";
								//Balance Qty is less 
								if(balqty <= inv.Total_Qty)
								{
									//info "balance qty is less than total qty";
									inv.Total_Qty=ifnull(inv.Total_Qty,0.0) - ifnull(balqty,0.0);
									inv.Available_Qty=ifnull(inv.Available_Qty,0.0) - ifnull(balqty,0.0);
									balqty = 0;
								}
								//Balance Qty is More
								else if(balqty >= inv.Total_Qty)
								{
									//info "balance qty is greater than total qty";
									balqty = ifnull(balqty,0.0) - ifnull(inv.Total_Qty,0.0);
									inv.Total_Qty=0;
									inv.Available_Qty=0;
								}
							}
							if(balqty == 0)
							{
								//info "before break";
								break;
							}
							i = i + 1;
						}
					}
				}
			}
		} */
	//------------end of If statement-------------
}
else if(input.Auto_Approval == "No")
{
	input.Approval = "Pending";
	input.WO_Status = "Waiting for approval";
	// 	if(input.Form_Mode == "Direct WO")
	// 	{
	// 		input.Approval = "Pending";
	// 		//input.WO_Status = "Waiting for approval";
	// 	}
	fet_so = Sales_Order[ID == input.Sales_Order_Nos];
	for each  var in input.Material_Details
	{
		sosub = Sale_Order_Subform[ID == var.Sale_Order_Subform_ID];
		wosub = Work_Order_Subform[Sale_Order_Subform_ID == sosub.ID].sum(WO_Qty);
		//wo = Work_Order[Sales_Order_Nos == input.Sales_Order_Nos];
		//info "sosub" + sosub.Qty;
		//info "wosub" + wosub;
		if(sosub.count() > 0 && fet_so.count() > 0)
		{
			/* 			if(sosub.Qty != wosub && input.Form_Mode == "WO against SO")
			{
				sosub.Status="WO Partially Completed";
				input.WO_Status = "Waiting for approval";
				fet_so.SO_Status="WO Partially Completed";
				fet_so.CWPL_SO_Status="WO Partially Completed";
			} */
			salsub = Sale_Order_Subform[Sales_Order_Exis_ID == fet_so.ID && ID != var.Sale_Order_Subform_ID && Status == "	Active"];
			if(input.Form_Mode == "WO against SO")
			{
				sosub.Status="WO Created";
				//input.WO_Status = "Waiting for approval";
				if(salsub.count() == 0)
				{
					fet_so.SO_Status="WO Created";
					fet_so.CWPL_SO_Status="WO Created";
				}
				for each  updstatus in Work_Order[Sales_Order_Nos == input.Sales_Order_Nos]
				{
					updstatus.WO_Status="Waiting for approval";
				}
			}
		}
	}
}
var = 0;
if(isBlank(input.Work_Order_No.trim()))
{
	var = 1;
	input.Work_Order_No = thisapp.Common.Number_Function_New("Work Order");
}
if(var == 1 && input.Form_Mode == "WO against SO")
{
	openUrl("#Form:Alert_Messages?Status=" + "WO" + "&Value=" + input.Work_Order_No + "&zc_LoadIn=dialog","same window");
}
else if(input.Form_Mode == "Direct WO")
{
	openUrl("#Form:Alert_Messages?Status=" + "WOAlert" + "&Value=" + input.Work_Order_No + "&zc_LoadIn=dialog","same window");
}
else if(input.Form_Mode == "Draft WO-Regular Wheels")
{
	openUrl("#Form:Alert_Messages?Status=" + "DWO" + "&Value=" + input.Work_Order_No + "&zc_LoadIn=dialog","same window");
}
content_copyCOPY