private static bool IsReservableItem(DocumentItem docItem, IRulesRepository rulesRepository) { var processText = docItem.ItemProcessStatusText; var itemStatusCode = docItem.ItemStatus; var rules = rulesRepository.GetItemRules(); // No rules, no reservations if (rules == null) return false; // Nothing to get rules from, no reservation if (itemStatusCode == null && processText == null) return false; // Check rule for matching item status var itemStatusCodeRule = rules.Where(x => x.ItemStatus.Equals(itemStatusCode)).Select(x => x).ToList().FirstOrDefault(); if (itemStatusCode != null && itemStatusCodeRule != null && !itemStatusCodeRule.CanReserve) return false; // Check rule for matching processText ItemRule ruleFromProcessText = null; if (processText != null) ruleFromProcessText = rules.Where(x => x.ProcessStatusText.Equals(processText)).Select(x => x).ToList().FirstOrDefault(); if (processText != null && ruleFromProcessText != null && !ruleFromProcessText.CanReserve) return false; // Check if processTextCode is legal if any if (ruleFromProcessText != null) { var processTextCode = ruleFromProcessText.ProcessStatusCode; string[] legalCodes = { "##", "EN", "NA", "NB", "UL", "IU" }; if (!legalCodes.Contains(processTextCode)) return false; } // Legal! return true; }