public void FillElsMaterial(int materialId, int subgroupId, int sourceMaterialId, IMaterialsContextUow context, MaterialDetailsModel model, int type)
        {
            int setId = (int)context.RecordLinks.All.Where(m => m.MaterialID == materialId && m.SubgroupID == subgroupId).FirstOrDefault().SetID;

            IList <RecordLink> conditions = context.RecordLinks.All.Where(n => n.MaterialID == materialId && n.SubgroupID == subgroupId).ToList();

            IDictionary <ProductGroup.ProductGroupType, ProductGroup> listOfGroups = new Dictionary <ProductGroup.ProductGroupType, ProductGroup>();

            IList <ConditionModel> conditionWithProperties = new List <ConditionModel>();

            foreach (var conditionObj in conditions)
            {
                IList <MaterialProperty> propertiesPerCond = context.MaterialProperties.All.Where(m => m.MaterialId == materialId && m.SubgroupId == subgroupId && m.RowId == conditionObj.RowID).ToList();
                foreach (var prop in propertiesPerCond)
                {
                    ProductGroup.ProductGroupType groupId = (ProductGroup.ProductGroupType)context.Trees.Find(n => n.PN_ID == prop.PropertyId).BT_ID;

                    if (!listOfGroups.ContainsKey(groupId))
                    {
                        conditionWithProperties = new List <ConditionModel>();

                        ConditionModel condition = new ConditionElsBinder().FillElsCondition(materialId, subgroupId, context, conditionObj, prop, type);
                        conditionWithProperties.Add(condition);

                        ProductGroup productGroup = FillElsProductGroup(conditionWithProperties, groupId, context);

                        productGroup.MaterialConditions = productGroup.MaterialConditions.OrderBy(c => c.ConditionName).ToList();
                        listOfGroups.Add(groupId, productGroup);
                    }
                    else
                    {
                        ProductGroup selectedGroup = listOfGroups[groupId];

                        if (!selectedGroup.MaterialConditions.Any(v => v.ConditionId == conditionObj.RowID))
                        {
                            ConditionModel condition = new ConditionElsBinder().FillElsCondition(materialId, subgroupId, context, conditionObj, prop, type);
                            selectedGroup.MaterialConditions.Add(condition);
                        }
                        else
                        {
                            ConditionModel condition = selectedGroup.MaterialConditions.Where(v => v.ConditionId == conditionObj.RowID).FirstOrDefault();

                            string unitName = prop.OrigUnit == null ? "" : context.Units.Find(n => n.UnitId == prop.OrigUnit).UnitText;
                            ElsevierMaterials.Models.Property property = context.PropertiesWithConvertedValues.GetPropertyInfoForMaterialForSelectedMetric(context.PreferredNames.Find(o => o.PN_ID == prop.PropertyId).PN, materialId, subgroupId, conditionObj.RowID, prop.PropertyId, prop.ValueId, type, unitName);
                            condition.Properties.Add(property);
                        }
                    }

                    listOfGroups[groupId].PropertyCount++;
                }
            }


            model.Properties = new PropertiesModel();
            OrderPropertiesGroups(model, listOfGroups);
        }
        public ConditionModel FillConditionModel(IList <Condition> conditions, ProductGroup.ProductGroupType productGroup)
        {
            ConditionModel cond = new ConditionModel();

            cond.ConditionId    = conditions[0].ConditionId;
            cond.ConditionName  = conditions[0].ConditionName;
            cond.Properties     = conditions[0].Properties;
            cond.ProductGroupId = productGroup;
            return(cond);
        }
        public ProductGroup FillPropertyGroup(IList <ConditionModel> conditions, ProductGroup.ProductGroupType propertyGroupType, IMaterialsContextUow context)
        {
            string propertyGroupName = context.PreferredNames.Find(p => p.PN_ID == (int)propertyGroupType).PN;

            ProductGroup propertyGroup = new ProductGroup();

            if (System.Configuration.ConfigurationManager.AppSettings["DeveloperSite"].ToLower() == "true")
            {
                if (conditions.Count() > 0)
                {
                    propertyGroup.ProductGroupId   = propertyGroupType;
                    propertyGroup.ProductGroupName = propertyGroupName;
                    propertyGroup.Conditions       = conditions;
                    propertyGroup.ConditionId      = conditions[0].ConditionId;
                    int propertyCount = 0;
                    foreach (var item in conditions)
                    {
                        propertyCount = propertyCount + item.Properties.Count();
                    }
                    propertyGroup.PropertyCount = propertyCount;
                }
            }
            else
            {
                propertyGroup.ProductGroupId   = propertyGroupType;
                propertyGroup.ProductGroupName = propertyGroupName;
                propertyGroup.Conditions       = conditions;
                propertyGroup.ConditionId      = conditions[0].ConditionId;
                int propertyCount = 0;
                foreach (var item in conditions)
                {
                    propertyCount = propertyCount + item.Properties.Count();
                }
                propertyGroup.PropertyCount = propertyCount;
            }
            return(propertyGroup);
        }
        public ProductGroup FillElsProductGroup(IList <ConditionModel> conditionWithProperties, ProductGroup.ProductGroupType groupId, IMaterialsContextUow context)
        {
            string nameP = context.PreferredNames.Find(p => p.PN_ID == (int)groupId).PN;

            ProductGroup productGroup = new ProductGroup();

            productGroup.ProductGroupId   = groupId;
            productGroup.ProductGroupName = nameP;
            productGroup.Conditions       = conditionWithProperties.OrderBy(c => c.ConditionName).ToList();
            productGroup.ConditionId      = conditionWithProperties[0].ConditionId;
            return(productGroup);
        }