Help me fix this error on the processing screen : Error: An error occurred during processing of the field Estimated Quantity value 0 The specified estimated quantity 0.0000 is less than the sum of the estimated quantities of all lines 1.0000 in the associated appointment(s). . Here is the customization code that I had used : using System;
using System.Collections.Generic;
using PX.Data;
using PX.Data.BQL;
using PX.Data.BQL.Fluent;
using PX.Objects.FS;

namespace ServiceOrders
{
    public class SOForceCompleteProcess : PXGraph<SOForceCompleteProcess>
    {
        public PXCancel<FSServiceOrder> Cancel;

        public SelectFrom<FSServiceOrder>
            .Where<FSServiceOrder.status.IsEqual<AwaitingStatus>>
            .ProcessingView Orders;

        public SOForceCompleteProcess()
        {
            Orders.SetProcessCaption("Reopen & Deallocate");
            Orders.SetProcessAllCaption("Reopen & Deallocate All");
            Orders.SetProcessDelegate(ProcessOrders);
        }

        public static void ProcessOrders(List<FSServiceOrder> list)
        {
            var graph = PXGraph.CreateInstance<ServiceOrderEntry>();

            foreach (var order in list)
            {
                try
                {
                    graph.Clear();
                    graph.ServiceOrderRecords.Current =
                        graph.ServiceOrderRecords.Search<FSServiceOrder.refNbr>(
                            order.RefNbr, order.SrvOrdType);

                    if (graph.ServiceOrderRecords.Current?.Status == "W")
                    {
                        var current = graph.ServiceOrderRecords.Current;

                        // Step 1: Set order status to Open
                        current.Status = "O";
                        current.Completed = false;
                        current.OpenDoc = true;
                        graph.ServiceOrderRecords.Cache.SetValueExt<FSServiceOrder.hold>(current, false);
                        graph.ServiceOrderRecords.Update(current);

                        // Step 2: Reset line status & deallocate inventory
                        foreach (FSSODet line in PXSelect<FSSODet,
                            Where<FSSODet.sOID, Equal<Required<FSServiceOrder.sOID>>,
                                  And<FSSODet.lineType, Equal<FSLineType.Inventory_Item>>>>
                            .Select(graph, current.SOID))
                        {
                            if (line.Status == "Completed")
                            {
                                line.Status = "Open";
                                graph.Caches<FSSODet>().Update(line);
                            }

                            if (line.Qty > 0)
                            {
                                // Find and update associated appointment lines
                                foreach (FSAppointmentDet apptLine in PXSelect<FSAppointmentDet,
                                    Where<FSAppointmentDet.sODetID, Equal<Required<FSSODet.sODetID>>>>
                                    .Select(graph, line.SODetID))
                                {
                                    if (apptLine.EstimatedQty > 0)
                                    {
                                        apptLine.EstimatedQty = 0; // Set appointment quantity to 0
                                        graph.Caches<FSAppointmentDet>().Update(apptLine);
                                    }
                                }

                                // Now set the service order line quantity to 0
                                line.Qty = 0;
                                graph.Caches<FSSODet>().Update(line);
                            }
                        }

                        // Step 3: Mark order as Completed again
                        current.Status = "C";
                        current.Completed = true;
                        current.OpenDoc = false;
                        graph.ServiceOrderRecords.Update(current);

                        graph.Save.Press();

                        PXProcessing<FSServiceOrder>.SetInfo($"Order {current.RefNbr} reopened, inventory deallocated, and marked as completed.");
                    }
                }
                catch (Exception ex)
                {
                    PXProcessing<FSServiceOrder>.SetError(ex);
                }
            }
        }

        public class AwaitingStatus : BqlString.Constant<AwaitingStatus>
        {
            public AwaitingStatus() : base("W") { }
        }
    }
}. I am trying to achieve the deallocation of inventory items from service orders, so that they can be cleared from the inventory allocation details page in Acumatica.