/// <summary>
        /// Generate InventoryItemDetailModel
        /// </summary>
        /// <param name="inventoryModel"></param>
        /// <returns></returns>
        public InventoryItemDetailModel MakeInventoryItemDetailModel(InventoryModel inventoryModel)
        {
            var inventoryItems           = inventoryModel.InventoryItems;
            var inventoryNbiLoadRatings  = inventoryModel.InventoryNbiLoadRatings;
            var inventoryItemDetailModel = new InventoryItemDetailModel();

            try
            {
                AddLocation(inventoryItemDetailModel, inventoryItems);
                AddAgeService(inventoryItemDetailModel, inventoryItems);
                AddManagement(inventoryItemDetailModel, inventoryItems);
                AddDeckInformation(inventoryItemDetailModel, inventoryItems);
                AddSpanInformation(inventoryItemDetailModel, inventoryItems);
                AddNbiLoadRating(inventoryItemDetailModel, inventoryNbiLoadRatings);
                AddPosting(inventoryItemDetailModel, inventoryItems);
                AddRoadwayInfo(inventoryItemDetailModel, inventoryItems);
                AddCurrentConditionDuration(inventoryItemDetailModel, inventoryItems);
                AddRiskScores(inventoryItemDetailModel, inventoryItems);
                AddOperatingInventoryRating(inventoryItemDetailModel, inventoryItems);
            }
            catch (Exception ex)
            {
                var log = log4net.LogManager.GetLogger(typeof(InventoryItemDetailModelGenerator));
                log.Error(ex.Message);
            }

            return(inventoryItemDetailModel);
        }
        /// <summary>
        /// Generate InventoryItemDetailModel
        /// </summary>
        /// <param name="inventoryModel"></param>
        /// <returns></returns>
        public InventoryItemDetailModel MakeInventoryItemDetailModel(InventoryModel inventoryModel)
        {
            var inventoryItems           = inventoryModel.InventoryItems;
            var inventoryNbiLoadRatings  = inventoryModel.InventoryNbiLoadRatings;
            var inventoryItemDetailModel = new InventoryItemDetailModel();

            try
            {
                AddLocation(inventoryItemDetailModel, inventoryItems);
                AddAgeService(inventoryItemDetailModel, inventoryItems);
                AddManagement(inventoryItemDetailModel, inventoryItems);
                AddDeckInformation(inventoryItemDetailModel, inventoryItems);
                AddSpanInformation(inventoryItemDetailModel, inventoryItems);
                AddNbiLoadRating(inventoryItemDetailModel, inventoryNbiLoadRatings);
                AddPosting(inventoryItemDetailModel, inventoryItems);
                AddRoadwayInfo(inventoryItemDetailModel, inventoryItems);
                AddCurrentConditionDuration(inventoryItemDetailModel, inventoryItems);
                AddRiskScores(inventoryItemDetailModel);
                AddOperatingInventoryRating(inventoryItemDetailModel, inventoryItems);
            }
            catch (Exception ex)
            {
                HandleException.GeneralError(ex);
            }

            return(inventoryItemDetailModel);
        }
 private void AddRiskScores(InventoryItemDetailModel inventoryItemDetailModel)
 {
     //TODO Risk scores: currently const 0 assigned as per UI
     inventoryItemDetailModel.RiskScores = new RiskScores {
         Old = 0, New = 0
     };
 }
        private void AddOperatingInventoryRating(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var operatingRatingInventoryRatingGrouping = new OperatingRatingInventoryRatingGrouping();

            AddRatingRows(operatingRatingInventoryRatingGrouping, inventoryItems);
            AddMinRatioLegalLoad(operatingRatingInventoryRatingGrouping, inventoryItems);
            inventoryItemDetailModel.OperatingRatingInventoryRatingGrouping = operatingRatingInventoryRatingGrouping;
        }
        private void AddAgeService(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var ageAndServiceColumns = new List <string> {
                "YEAR_BUILT", "YEAR_RECON", "SERVTYPON", "SERVTYPUND"
            };

            inventoryItemDetailModel.AgeAndService = CreateLabelValues(inventoryItems, ageAndServiceColumns);
        }
        private void AddManagement(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var managementColumns = new List <string> {
                "CUSTODIAN", "OWNER_CODE", "MPO", "SUBM_AGENCY", "NBISLEN", "HISTSIGN", "CRGIS_SHPOKEY_NUM", "BUS_PLAN_NETWORK"
            };

            inventoryItemDetailModel.Management = CreateLabelValues(inventoryItems, managementColumns);
        }
        private void AddDeckInformation(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var deckInformationColumns = new List <string> {
                "DKSTRUCTYP", "DEPT_DKSTRUCTYP", "DKSURFTYPE", "DKMEMBTYPE", "DKPROTECT", "DECK_WIDTH", "SKEW"
            };

            inventoryItemDetailModel.DeckInformation = CreateLabelValues(inventoryItems, deckInformationColumns);
        }
        private void AddSpanInformation(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var spanInformationColumns = new List <string> {
                "NUMBER_SPANS", "MATERIALMAIN", "DESIGNMAIN", "MATERIALAPPR", "DESIGNAPPR", "LENGTH", "DECK_AREA", "TOT_LENGTH", "MAIN_FC_GROUP_NUM", "APPR_FC_GROUP_NUM"
            };

            inventoryItemDetailModel.SpanInformation = CreateLabelValues(inventoryItems, spanInformationColumns);
        }
        private void AddSpanInformation(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var spanInformationColumns = new List <string> {
                "NUMBER_SPANS", "MAIN_SPAN_MATERIAL", "MAIN_SPAN_DESIGN", "APPROACH_SPAN_MATERIAL", "APPROACH_SPAN_DESIGN", "MAXIMUM_SPAN_LENGTH", "LENGTH", "DECK_AREA", "TOTAL_LENGTH", "FC_GROUP_NUMBER_MAIN", "FC_GROUP_NUMBER_APPROACH"
            };

            inventoryItemDetailModel.SpanInformation = CreateLabelValues(inventoryItems, spanInformationColumns);
        }
        private void AddPosting(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var postingColumns = new List <string> {
                "POST_STATUS_DATE", "POST_STATUS2", "SPEC_RESTRICT_POST", "SINGLE"
            };

            inventoryItemDetailModel.Posting = CreateLabelValues(inventoryItems, postingColumns);
        }
        private void AddRoadwayInfo(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var roadwayInfoColumns = new List <string> {
                "ADTTOTAL", "FUNC_CLASS", "VCLROVER", "VCLROVER", "NHS_IND"
            };

            inventoryItemDetailModel.RoadwayInfo = CreateLabelValues(inventoryItems, roadwayInfoColumns);
        }
        private void AddManagement(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var managementColumns = new List <string> {
                "MAINT_RESP", "OWNER_CODE", "MPO", "REPORT_GROUP", "SUBM_AGENCY", "NBISLEN", "HISTSIGN", "SHP_KEY_NUMBER", "BUS_PLAN_NETWORK"
            };

            inventoryItemDetailModel.Management = CreateLabelValues(inventoryItems, managementColumns);
        }
        private void AddDeckInformation(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var deckInformationColumns = new List <string> {
                "DECK_STRUCTURE_TYPE", "DECK_SHEET_TYPE_PENNDOT", "DECK_SURFACE_TYPE", "DECK_MEMBRANE_TYPE", "DECK_PROTECTION", "DECK_WIDTH", "SKEW"
            };

            inventoryItemDetailModel.DeckInformation = CreateLabelValues(inventoryItems, deckInformationColumns);
        }
        private void AddLocation(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var locationColumns = new List <string> {
                "DISTRICT", "COUNTY", "MUNI_CODE", "FEATURE_INTERSECTED", "FEATURE_CARRIED", "LOCATION"
            };
            const string locationId = "5A02";

            inventoryItemDetailModel.Location = CreateLabelValues(inventoryItems, locationColumns);
            inventoryItemDetailModel.Name     = inventoryItemDetailModel.Location.FirstOrDefault(l => l.Label.StartsWith(locationId)).Value;
            inventoryItemDetailModel.Label    = locationId;
        }
        private void AddRiskScores(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            //TODO Risk scores: currently const 0 assigned as per UI
            var inventoryItem        = inventoryItems.FirstOrDefault(i => i.ColumnName == "Old_Risk_Score");
            var newRiskInventoryItem = inventoryItems.FirstOrDefault(i => i.ColumnName == "Risk_Score");

            inventoryItemDetailModel.RiskScores = new RiskScores {
                Old     = Convert.ToDouble(inventoryItem.DisplayValue),
                New     = Convert.ToDouble(newRiskInventoryItem.DisplayValue),
                OldName = inventoryItem.ViewName,
                NewName = newRiskInventoryItem.ViewName,
            };
        }
        private void AddNbiLoadRating(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryNbiLoadRatingModel> inventoryNbiLoadRatings)
        {
            var nbiLoadRatings       = new List <NbiLoadRating>();
            var nbiLoadRatingColumns = new List <string> {
                "LOAD_TYPE", "NBI", "INV_RATING_TON", "OPR_RATING_TON", "SLC_RATING_FACTOR", "IR_RATING_FACTOR", "OR_RATING_FACTOR", "RATING_DATASET"
            };

            foreach (var inventoryNbiLoadRating in inventoryNbiLoadRatings)
            {
                var nbiLoadRating = new NbiLoadRating {
                    NbiLoadRatingRow = CreateLabelValues(inventoryNbiLoadRating.NbiLoadRatingItems, nbiLoadRatingColumns)
                };

                nbiLoadRatings.Add(nbiLoadRating);
            }
            inventoryItemDetailModel.NbiLoadRatings = nbiLoadRatings;
        }
        private void AddCurrentConditionDuration(InventoryItemDetailModel inventoryItemDetailModel, List <InventoryItemModel> inventoryItems)
        {
            var currentConditionColumns = new List <string> {
                "DECK", "SUP", "SUB", "CULV"
            };
            var currentDurationColumns = new List <string> {
                "DECK_DUR", "SUP_DUR", "SUB_DUR", "CULV_DUR"
            };

            inventoryItemDetailModel.CurrentConditionDuration = CreateConditionDurationRows(inventoryItems, currentConditionColumns, currentDurationColumns);
            var priorConditionColumns = new List <string> {
                "PREV_DECK", "PREV_SUP", "PREV_SUB", "PREV_CULV"
            };
            var priorDurationColumns = new List <string> {
                "PREV_DECK_DUR", "PREV_SUP_DUR", "PREV_SUB_DUR", "PREV_CULV_DUR"
            };

            inventoryItemDetailModel.PreviousConditionDuration = CreateConditionDurationRows(inventoryItems, priorConditionColumns, priorDurationColumns);
        }