Example #1
0
        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;
        }