if(input.Dispatch_Type == "Actual") { disp = 0; disp1 = 0; bal = 0; so = Sales_Order[ID == input.Sales_Order_ID]; wo = Work_Order[Sales_Order_Nos.Sale_Order_No == so.Sale_Order_No]; invmain = Invoice[ID == input.Invoice_ID]; invsub = Invoice_Subform[Invoice_Exist_ID == invmain.ID]; if(input.Sales_Type == "Direct Order" || input.Sales_Type == "Tooling") { if(so.CWPL_SO_Status == "Dispatch Note Partial") { so.CWPL_SO_Status="Invoice Created"; } } for each rec in input.Product_Details { invsub.Dispatch_Actual_Date_Time=rec.Disp_Actual_Date_Time; disp = ifNull(rec.Actual_Qty,0) + disp; rec.Ac_so_far=ifNull(rec.Actual_Qty_so_far,0) + ifNull(rec.Actual_Qty,0); rec.Balance_Qty=ifNull(rec.Balance_Qty,0) - ifNull(rec.Actual_Qty,0); rec.Edit_stk_qty=ifNull(rec.Actual_Qty,0); so = Sales_Order[ID == input.Sales_Order_ID]; bal = ifNull(rec.Balance_Qty,0) + bal; if(rec.Balance_Qty < 0 || rec.Balance_Qty == rec.Actual_Qty) { rec.Balance_Qty=0; } if(rec.Actual_Qty == rec.Planned_Qty) { rec.Sales_Lost_Qty=0.0; } getsosub = Sale_Order_Subform[Sales_Order_Exis_ID == so.ID && Part_No == rec.Product_Code]; if(so.count() > 0) { get_inven = Inventory[Part_No == rec.Product_Code && Location_Name.Location__Name == "FG Warehouse"]; getstk = Inventory[Part_No == rec.Product_Code && Location_Name.Location__Name == "FG Warehouse"]; fetwo = Work_Order[Sales_Order_Nos == input.Sales_Order_No]; blksosub = Sale_Order_Subform[Part_No == rec.Product_Code && Sales_Order_Exis_ID.Sale_Order_No == input.Sales_Order_No.Sale_Order_No]; wosub = Work_Order_Subform[Part_No == blksosub.Part_No]; getsoblk = Sales_Order[ID == input.Sales_Order_ID]; if(getsosub.Balance_Qty < 0 || getsosub.Balance_Qty == getsosub.Actual_Qty_So_far) { getsosub.Balance_Qty=0; } if(get_inven.count() > 0 && get_inven.Available_Qty > 0 && rec.Block_Qty == 0 && getsosub.DQR_Blk_Qty == null || getsosub.DQR_Blk_Qty <= 0 && getsosub.Logistics_Status != "Logistics Confirmed" || getsosub.Logistics_Status == "" || getsosub.Logistics_Status == null) { get_inven.Available_Qty=ifNull(get_inven.Available_Qty,0) - rec.Actual_Qty; get_inven.Total_Qty=ifNull(get_inven.Total_Qty,0) - rec.Actual_Qty; if(get_inven.Available_Qty < 0) { get_inven.Available_Qty=0; get_inven.Total_Qty=0; } } //Below code is to use the block qty for dispatch, only for the logistics confirmed Sale Order. ---Commented on 06/12/2024 if(getsoblk.count() > 0 && getsosub.DQR_Blk_Qty > 0 && getstk.Block_Qty > 0 && input.Sales_Order_No == fetwo.Sales_Order_Nos && getsosub.Logistics_Status == "Logistics Confirmed") { if(getstk.count() > 0 && rec.Product_Code == wosub.Part_No && rec.Actual_Qty <= rec.Block_Qty) { getstk.Block_Qty=ifNull(getstk.Block_Qty,0) - ifnull(rec.Actual_Qty,0); getstk.Total_Qty=ifNull(getstk.Total_Qty,0) - ifnull(rec.Actual_Qty,0); fetwo.WO_Status="Dispatched"; getsosub.WO_Status_in_sosub="Dispatched"; } else if(getstk.count() > 0 && rec.Product_Code == wosub.Part_No && rec.Actual_Qty > rec.Block_Qty) { balc = rec.Actual_Qty - getstk.Block_Qty; getstk.Block_Qty=0; getstk.Available_Qty=ifNull(getstk.Available_Qty,0) - ifnull(balc,0); getstk.Total_Qty=ifNull(getstk.Total_Qty,0) - ifnull(rec.Actual_Qty,0); fetwo.WO_Status="Dispatched"; getsosub.WO_Status_in_sosub="Dispatched"; } sendmail [ from :zoho.loginuserid to :"pooja.s@synprosoft.com" subject :"Dispatch Successful form submission - using Block" + input.Sales_Order_No.Sale_Order_No message :"Part No " + rec.Product_Code.Part_No + "TOT QTY-" + get_inven.Total_Qty + "AVL QTY-" + get_inven.Available_Qty + "BLK QTY-" + get_inven.Block_Qty + "ID-" + rec.ID + "Actual Qty=" + rec.Actual_Qty ] } getsosub.Actual_Qty_So_far=ifNull(getsosub.Actual_Qty_So_far,0) + ifNull(rec.Ac_so_far,0); if(getsosub.count() > 0) { getsosub.Create_Dispatch_Note_Plan_ID=input.ID; so.Create_Dispatch_Note_REC_ID=input.ID; getsosub.Balance_Qty=ifnull(getsosub.Balance_Qty,0) - ifnull(rec.Ac_so_far,0); if(getsosub.Balance_Qty > 0) { so.DP_Status=False; } getsosub.Planned_Qty_So_far=0; } input.Disptach_Status = "Approved"; } } //Below For-Each is for utilizing the Block Qty for dispatch if(rec.Actual_Weight != rec.Product_Weight || rec.Actual_Weight == rec.Product_Weight) { thisapp.Books.DispatchEmailTemplate(input.ID); } sasub = Sale_Order_Subform[Sales_Order_Exis_ID == so.ID]; solist = List(); solist.addAll(so.Dispatch_Note_No); solist.add(input.ID); so.Dispatch_Note_No=solist; so.Dispatch_Qty=sasub.sum(Actual_Qty_So_far); so.Balance_Qty=sasub.sum(Balance_Qty); //so.Dispatch_Qty=ifNull(so.Dispatch_Qty,0) + disp; so.Shipped_Qty=so.Dispatch_Qty; //so.Balance_Qty=bal; openUrl("#Report:Dispatch_Note_Actual","same window"); thisapp.Update_Salesorder_Books(input.Sales_Order_ID,input.Dispatch_Type); thisapp.DC.DCtoBooks(input.ID); for each var in input.Returnable_Packing_Material { insdc = insert into Create_DC_Subform [ Qty=var.Qty Part_Description=var.Part_Name Part_No=var.Part_No S_No=var.S_No Added_User=zoho.loginuser ]; } //thisapp.Books.Dispatch_Note_Actual_In_Books(input.ID); // thisapp.Books.Create_invoice_individual(input.ID); thisapp.Books.Create_Packages(input.ID); thisapp.Books.Create_Shipment(input.ID); con = true; for each sal in Sale_Order_Subform[Sales_Order_Exis_ID == so.ID] { if(sal.Balance_Qty > 0 && sal.Planned_Qty_So_far == null || sal.Planned_Qty_So_far == 0) { con = false; } } so.DP_Status=con; } else if(input.Dispatch_Type == "Actual Edit") { dispt = 0; balan = 0; for each rec1 in input.Product_Details { getso = Sales_Order[ID == input.Sales_Order_ID]; getsosub = Sale_Order_Subform[Sales_Order_Exis_ID == input.Sales_Order_ID && Part_No == rec1.Product_Code]; getsosub.Actual_Qty_So_far=ifNull(getsosub.Actual_Qty_So_far,0) + ifNull(rec1.Actual_Qty,0); getsosub.Balance_Qty=ifnull(getsosub.Balance_Qty,0) - ifnull(rec1.Actual_Qty,0); getso = Sales_Order[ID == input.Sales_Order_ID]; balan = ifNull(getsosub.Balance_Qty,0) + balan; dispt = ifNull(rec1.Actual_Qty,0) + dispt; if(getsosub.Balance_Qty > 0) { so = Sales_Order[ID == input.Sales_Order_ID]; so.DP_Status=False; } // get_invent = Inventory[Part_No == rec1.Product_Code]; // if(get_invent.count() > 0) // { // if(get_invent.Total_Qty < get_invent.Available_Qty) // { // //get_invent.Total_Qty=get_invent.Available_Qty; // } // // get_invent.Available_Qty=ifNull(get_invent.Available_Qty,0) - rec1.Actual_Qty; // // get_invent.Total_Qty=ifNull(get_invent.Total_Qty,0) - rec1.Actual_Qty; // sendmail // [ // from :zoho.loginuserid // to :"parthasarathy.m@synprosoft.com" // subject :"Edited>Successful form submission>OnSuccess_edited input.Dispatch_Type == Actual Edit" // message :"PartNo " + get_inven.Part_No.Part_No + "Total Qty is " + get_inven.Total_Qty + "Available Qty.. " + get_inven.Available_Qty // ] // } } if(rec1.Actual_Weight != rec1.Product_Weight || rec1.Actual_Weight == rec1.Product_Weight) { thisapp.Books.DispatchEmailTemplate(input.ID); } subsa = Sale_Order_Subform[Sales_Order_Exis_ID == getso.ID]; getso.Dispatch_Qty=subsa.sum(Actual_Qty_So_far); getso.Balance_Qty=subsa.sum(Balance_Qty); //getso.Dispatch_Qty=dispt; getso.Shipped_Qty=getso.Dispatch_Qty; // getso.Balance_Qty=balan; openUrl("#Report:Edit_Dispatch_Note_Actual","same window"); thisapp.Books.Edit_discpatch_note_actual_invoice(input.ID); } else { openUrl("#Report:Order_Gate_Process","same window"); } fet_dis = Create_Dispatch_Note_Format[ID == input.ID]; insrec = insert into Dispatch_Note_Actual_History [ Dispatch_Type=fet_dis.Dispatch_Type Added_User=zoho.loginuser CDNF_ID=fet_dis.CDNF_ID Currency_Code=fet_dis.Currency_Code Dispatch_Note_Date=fet_dis.Dispatch_Note_Date Customer_Address=fet_dis.Customer_Address Sales_Type=fet_dis.Sales_Type Sales_Order_No=fet_dis.Sales_Order_No Customer_Name=fet_dis.Customer_Name Incoterms=fet_dis.Incoterms Incoterms_Location=fet_dis.Incoterms_Location Product_List=fet_dis.Product_List Load_Products=fet_dis.Load_Products Transport_Type=fet_dis.Transport_Type Transporter_Name=fet_dis.Transporter_Name Vehicle_No_dup=fet_dis.Vehicle_No_dup GR_No=fet_dis.GR_No Driver_Name=fet_dis.Driver_Name Driver_Mobile_Number=fet_dis.Driver_Mobile_Number Vehicle_Type=fet_dis.Vehicle_Type Total_Qty=fet_dis.Total_Qty Total_Weight=fet_dis.Total_Weight ]; for each recsub in input.Product_Details { subins = insert into Dispatch_Note_Actual_History_Subform [ Added_User=zoho.loginuser Dispatch_Note_Actual_History_Exis_ID=insrec S_NO=recsub.S_NO Product_Code=recsub.Product_Code Product_Description=recsub.Product_Description Customer_Product_Code=recsub.Customer_Product_Code Packing_Details1=recsub.Packing_Details1 UoM=recsub.UoM Planned_Qty=recsub.Planned_Qty Plan_Qty_so_far=recsub.Plan_Qty_so_far Product_Weight=recsub.Product_Weight Actual_Qty=recsub.Actual_Qty Ac_so_far=recsub.Ac_so_far Actual_Qty_so_far=recsub.Actual_Qty_so_far Actual_Weight=recsub.Actual_Weight Remarks=recsub.Remarks Reason=recsub.Reason Individual=recsub.Individual Stock_Qty=recsub.Stock_Qty Ordered_Qty=recsub.Ordered_Qty Balance_Qty=recsub.Balance_Qty ]; } for each retmat in input.Returnable_Packing_Material { retins = insert into Returnable_Packing_Material_History [ Qty=retmat.Qty Part_No=retmat.Part_No Part_Name=retmat.Part_Name Added_User=zoho.loginuser ]; } if(input.Dispatch_Type == "Gate") { invmain = Invoice[ID == input.Invoice_ID]; invsub = Invoice_Subform[Invoice_Exist_ID == invmain.ID]; invsub.Vehicle_Gate_in_Time=input.In_Time; invsub.Vehicle_Gate_out_time=input.Out_Time; }