private static void RemoveInventoryIdsDocuments(ClientContext context, ListItem oDocListItem, int documentID, List olistDocs, string invID, SubscriptionItem subscriptionItem)
        {
            try
            {
                List      olistReq  = context.Web.Lists.GetByTitle(CommonVariables.RequirementListTitle);
                CamlQuery camlQuery = new CamlQuery();
                camlQuery.ViewXml = "<View><Query><Where><And><Eq><FieldRef Name='ParentId' LookupId='TRUE'/><Value Type='Lookup'>" + documentID + "</Value></Eq><Contains><FieldRef Name='inventory' /><Value Type='Text'>" + invID + "</Value></Contains></And></Where></Query><RowLimit>10000</RowLimit></View>";

                ListItemCollection oReqlistItems = olistReq.GetItems(camlQuery);
                context.Load(oReqlistItems, items => items.Include(
                                 item => item["ID"]));

                context.ExecuteQuery();
                if (oReqlistItems.Count == 0)
                {
                    oDocListItem["inventory"]         = oDocListItem["inventory"]?.ToString().Replace(invID, "");
                    oDocListItem["_ModerationStatus"] = 0;
                    oDocListItem.Update();
                    context.Load(oDocListItem);
                    context.ExecuteQuery();
                }
            }
            catch (Exception ex)
            {
                Errorlogs.Log(context, new ErrorLogItem
                {
                    ErrorMessage   = ex.Message,
                    MethodName     = "DocumentItem.RemoveInventoryIdsDocuments",
                    StackTrace     = ex.StackTrace,
                    SubscriptionID = subscriptionItem.ID
                });
            }
        }
        public static void RequirementInventoryUpdate(ClientContext context, ReqItemcollection reqItemcollection, SubscriptionItem subscriptionItem, NetworkCredential networkCredential)
        {
            try
            {
                context.Credentials = networkCredential;
                List olistReq     = context.Web.Lists.GetByTitle(CommonVariables.RequirementListTitle);
                var  count        = reqItemcollection.reqitems.Count;
                var  maxChunkSize = 100;
                var  shouldRun    = true;
                var  start        = 0;
                var  chunkSize    = count < maxChunkSize ? count : maxChunkSize;
                var  end          = start + chunkSize < count ? start + chunkSize : count;
                context.RequestTimeout = -1;
                while (shouldRun)
                {
                    shouldRun = end == count ? false : true;
                    for (int i = start; i < end; i++)
                    {
                        ListItem oListItem = olistReq.GetItemById(reqItemcollection.reqitems[i].reqID);
                        oListItem["inventory"]         = reqItemcollection.reqitems[i].invID;
                        oListItem["_ModerationStatus"] = 0; // Approved:0,Denied:1,Pending:2,Draft:3,Shceduled:4
                        oListItem.Update();
                        context.Load(oListItem);
                    }

                    context.ExecuteQuery();
                    start = end;
                    end   = start + chunkSize < count ? start + chunkSize : count;
                }
                subscriptionItem.IsSuccess = 1;
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("Version conflict"))
                {
                    for (int i = 0; i < noOfAttempts; i++)
                    {
                        Thread.Sleep(1000);
                        Requirement.RequirementInventoryUpdate(context, reqItemcollection, subscriptionItem, networkCredential);
                        if (subscriptionItem.IsSuccess == 1)
                        {
                            break;
                        }
                    }
                }
                Errorlogs.Log(context, new ErrorLogItem
                {
                    ErrorMessage   = ex.Message,
                    MethodName     = "Requirement.RequirementInventoryUpdate",
                    StackTrace     = ex.StackTrace,
                    SubscriptionID = subscriptionItem.ID
                });
            }
        }
        public static void DocumentInventoryUpdate(ClientContext context, int documentID, SubscriptionItem subscriptionItem, NetworkCredential networkCredential, bool isRemoveCall)
        {
            try
            {
                List     olistDocs     = context.Web.Lists.GetByTitle(CommonVariables.DocumentListTitle);
                ListItem oListItem     = olistDocs.GetItemById(documentID);
                string   inventorycoll = GetDocumentInventory(context, oListItem);
                subscriptionItem.DocumentTitle = Convert.ToString(oListItem["Title"]);

                if (!string.IsNullOrWhiteSpace(inventorycoll))
                {
                    if (!inventorycoll.Contains("-" + subscriptionItem.InvID + "-"))
                    {
                        inventorycoll += "-" + subscriptionItem.InvID + "-";
                    }

                    oListItem["inventory"] = inventorycoll;
                }
                else
                {
                    oListItem["inventory"] = "-" + subscriptionItem.InvID + "-";
                }
                oListItem["_ModerationStatus"] = 0;
                oListItem.Update();
                context.Load(oListItem);
                context.ExecuteQuery();
                if (isRemoveCall)
                {
                    RemoveInventoryIdsDocuments(context, oListItem, documentID, olistDocs, "-" + subscriptionItem.InvID + "-", subscriptionItem);
                }

                subscriptionItem.IsSuccess = 1;
            }
            catch (Exception ex)
            {
                Errorlogs.Log(context, new ErrorLogItem
                {
                    ErrorMessage   = ex.Message,
                    MethodName     = "DocumentItem.DocumentInventoryUpdate",
                    StackTrace     = ex.StackTrace,
                    SubscriptionID = subscriptionItem.ID
                });
            }
        }
        public static async Task UpdateClientLogItems(ClientContext parentContext, ClientContext rootcontext, ReqItemcollection reqItemcollection, NetworkCredential networkCredential, SubscriptionItem subscriptionItem)
        {
            try
            {
                string folder_RelativeUrl = "/Lists/ClientLogs/" + subscriptionItem.InvID;

                List olistClientLog = rootcontext.Web.Lists.GetByTitle(CommonVariables.ClientLogListTitle);
                var  count          = reqItemcollection.reqitems.Count;
                var  maxChunkSize   = 100;
                var  shouldRun      = true;
                var  start          = 0;
                var  chunkSize      = count < maxChunkSize ? count : maxChunkSize;
                var  end            = start + chunkSize < count ? start + chunkSize : count;
                rootcontext.RequestTimeout = -1;
                while (shouldRun)
                {
                    shouldRun = end == count ? false : true;
                    for (int i = start; i < end; i++)
                    {
                        string        reqID         = reqItemcollection.reqitems[i].reqID;
                        ClientLogItem clientLogItem = await ReadDataCollection(networkCredential, subscriptionItem.WebApplicationURL, Convert.ToInt32(reqID), subscriptionItem.DocumentID);

                        ListItemCreationInformation listItemCreationInformation = new ListItemCreationInformation();
                        listItemCreationInformation.FolderUrl = folder_RelativeUrl;

                        var listItem = olistClientLog.AddItem(listItemCreationInformation);
                        listItem["Title"]              = "Log entry";
                        listItem["Action"]             = reqItemcollection.reqitems[i].Isselected ? "Add" : "Remove";
                        listItem["Heading1"]           = clientLogItem.heading1;
                        listItem["Heading2"]           = clientLogItem.heading2;
                        listItem["Heading3"]           = clientLogItem.heading3;
                        listItem["Header4"]            = clientLogItem.heading4;
                        listItem["Header5"]            = clientLogItem.heading5;
                        listItem["RequirementType"]    = clientLogItem.requirementType;
                        listItem["ListURL"]            = clientLogItem.listURL;
                        listItem["ItemID"]             = reqID;
                        listItem["ItemURL"]            = clientLogItem.itemURL;
                        listItem["RESTItemProperties"] = clientLogItem.itemRESTURL;
                        listItem["Client"]             = subscriptionItem.InvID;
                        listItem["Note"]         = reqItemcollection.reqitems[i].Isselected ? "" : subscriptionItem.Notes;
                        listItem["Jurisdiction"] = subscriptionItem.Jurisdiction;
                        listItem["Author0"]      = subscriptionItem.DocumentAuthor;
                        listItem["Author"]       = subscriptionItem.CreatedBy;
                        listItem["Editor"]       = subscriptionItem.CreatedBy;
                        listItem["Documentname"] = subscriptionItem.DocumentTitle;

                        listItem.Update();
                        rootcontext.Load(listItem);
                    }

                    rootcontext.ExecuteQuery();
                    start = end;
                    end   = start + chunkSize < count ? start + chunkSize : count;
                }
                subscriptionItem.IsSuccess = 1;
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("Version conflict"))
                {
                    for (int i = 0; i < noOfAttempts; i++)
                    {
                        Thread.Sleep(1000);
                        await UpdateClientLogItems(parentContext, rootcontext, reqItemcollection, networkCredential, subscriptionItem);

                        if (subscriptionItem.IsSuccess == 1)
                        {
                            break;
                        }
                    }
                }

                Errorlogs.Log(parentContext, new ErrorLogItem
                {
                    ErrorMessage   = ex.Message,
                    MethodName     = "ClientLogFolder.UpdateClientLogItems",
                    StackTrace     = ex.StackTrace,
                    SubscriptionID = subscriptionItem.ID
                });
            }
        }