Ejemplo n.º 1
0
        }         // SelfSave

        protected virtual void LoadOneChildFromXml(XmlNode oRoot, Type oTableType, ASrcAttribute oGroupSrcAttr)
        {
            oGroupSrcAttr = oGroupSrcAttr ?? oTableType.GetCustomAttribute <ASrcAttribute>();

            Log.Debug("Parsing Experian company data into {0}...", oTableType.Name);

            ConstructorInfo ci = oTableType.GetConstructors().FirstOrDefault();

            if (ci == null)
            {
                Log.Alert("Parsing Experian company data into {0} failed: no constructor found.", oTableType.Name);
                return;
            }             // if

            XmlNodeList oGroupNodes = oRoot.SelectNodes(oGroupSrcAttr.GroupPath);

            if (oGroupNodes == null)
            {
                Log.Debug("Parsing Experian company data into {0}: no XML nodes found.", oTableType.Name);
                return;
            }             // if

            Log.Debug(
                "Parsing Experian company data into {0}: {1} XML node{2} found.",
                oTableType.Name,
                oGroupNodes.Count,
                oGroupNodes.Count == 1 ? "" : "s"
                );

            foreach (XmlNode oGroup in oGroupNodes)
            {
                AExperianLtdDataRow oRow = (AExperianLtdDataRow)ci.Invoke(new object[] { Log });

                oRow.LoadFromXml(oGroup);

                if (oRow.ShouldBeSaved())
                {
                    Children.Add(oRow);
                }
            }             // for each matching XML node

            Log.Debug("Parsing Experian company data into {0} complete.", oTableType.Name);
        }         // LoadOneChildFromXml
Ejemplo n.º 2
0
        }         // SelfSave

        protected override void LoadChildrenFromXml(XmlNode oRoot)
        {
            foreach (Type oTableType in Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(AExperianLtdDataRow))))
            {
                ASrcAttribute oGroupSrcAttr = oTableType.GetCustomAttribute <ASrcAttribute>();

                if (oGroupSrcAttr == null)
                {
                    continue;
                }

                if (!oGroupSrcAttr.IsTopLevel)
                {
                    continue;
                }

                LoadOneChildFromXml(oRoot, oTableType, oGroupSrcAttr);
            }     // for each row type (DL 65, DL 72, etc)
        }         // LoadChildrenFromXml
Ejemplo n.º 3
0
        static CompanyScoreModelBuilder()
        {
            var oAttrTypes = typeof(ASrcAttribute).Assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(ASrcAttribute)) && t != typeof(ASrcAttribute));

            SortedDictionary <int, string> oOrder = new SortedDictionary <int, string>();

            foreach (Type oType in oAttrTypes)
            {
                ConstructorInfo ci = oType.GetConstructors().FirstOrDefault();

                if (ci == null)
                {
                    continue;
                }

                ASrcAttribute oAttr = (ASrcAttribute)ci.Invoke(new object[ci.GetParameters().Length]);

                if (!oAttr.IsCompanyScoreModel)
                {
                    continue;
                }

                if (!oAttr.IsTopLevel)
                {
                    continue;
                }

                if (oOrder.ContainsKey(oAttr.TargetDisplayPosition))
                {
                    throw new Exception("Company score display order of " + oAttr.TargetDisplayPosition + " is specified more than once.");
                }

                oOrder[oAttr.TargetDisplayPosition] = oAttr.TargetDisplayGroup;
            }             // for each

            ms_DisplayOrder = oOrder.Values.ToList();
        }         // static constructor
Ejemplo n.º 4
0
        }         // GetChildren

        public virtual CompanyScoreModelDataset ToCompanyScoreModel(CompanyScoreModelDataset oModel = null)
        {
            if (oModel == null)
            {
                oModel = new CompanyScoreModelDataset();
            }

            ASrcAttribute oGroupSrcAttr = this.GetType().GetCustomAttribute <ASrcAttribute>();

            var oMyValues   = new SortedDictionary <string, CompanyScoreModelItemValues>();
            var oMyMetaData = new SortedDictionary <string, DisplayMetaData>();

            this.Traverse((oInstance, oPropertyInfo) => {
                ASrcAttribute oValueSrcAttr = oPropertyInfo.GetCustomAttribute <ASrcAttribute>();

                if (oValueSrcAttr == null)
                {
                    return;
                }

                if (!oValueSrcAttr.IsCompanyScoreModel)
                {
                    return;
                }

                string sTargetGroupName = (oGroupSrcAttr ?? oValueSrcAttr).TargetDisplayGroup;

                CompanyScoreModelItemValues oValues;

                if (oMyValues.ContainsKey(sTargetGroupName))
                {
                    oValues = oMyValues[sTargetGroupName];
                }
                else
                {
                    oValues = new CompanyScoreModelItemValues();
                    oMyValues[sTargetGroupName]   = oValues;
                    oMyMetaData[sTargetGroupName] = (oGroupSrcAttr ?? oValueSrcAttr).MetaData;
                }                 // if

                object oValue = oPropertyInfo.GetValue(oInstance);

                string sDisplayName = oValueSrcAttr.TargetDisplayName;
                if (string.IsNullOrWhiteSpace(sDisplayName))
                {
                    sDisplayName = oPropertyInfo.Name;
                }

                string sValue = string.Empty;

                if (oValue != null)
                {
                    if (oPropertyInfo.PropertyType == typeof(DateTime?))
                    {
                        sValue = ((DateTime?)oValue).Value.ToString("MMMM d yyyy", ms_oCulture);
                    }
                    else if (oPropertyInfo.PropertyType == typeof(int?))
                    {
                        if (oValueSrcAttr.Transformation == TransformationType.MonthsAndYears)
                        {
                            decimal nValue = (decimal)((int?)oValue).Value;

                            decimal nYears  = Math.Floor(nValue / 12);
                            decimal nMonths = nValue - nYears * 12;

                            var os = new StringBuilder();
                            if (nYears > 0)
                            {
                                os.AppendFormat("{0} year{1}", nYears, nYears == 1 ? "" : "s");
                            }

                            if (nMonths > 0)
                            {
                                os.AppendFormat(" {0} month{1}", nMonths, nMonths == 1 ? "" : "s");
                            }

                            sValue = os.ToString().Trim();
                        }
                        else
                        {
                            sValue = oValue.ToString();
                        }
                    }
                    else if (oPropertyInfo.PropertyType == typeof(decimal?))
                    {
                        decimal x = ((decimal?)oValue).Value;

                        string sPrecision = Math.Abs(Math.Truncate(x) - x) < 0.00000001m ? "0" : "2";
                        string sFormat    = oValueSrcAttr.Transformation == TransformationType.Money ? "C" : "G";

                        sValue = x.ToString(sFormat + sPrecision, ms_oCulture);
                    }
                    else                       // string
                    {
                        sValue = oValue.ToString();

                        if (oValueSrcAttr.Transformation == TransformationType.Shares)
                        {
                            decimal nValue = 0;
                            bool bFound    = false;

                            foreach (char c in sValue)
                            {
                                bool bGood = false;

                                switch (c)
                                {
                                case '0':
                                case '1':
                                case '2':
                                case '3':
                                case '4':
                                case '5':
                                case '6':
                                case '7':
                                case '8':
                                case '9':
                                    bFound = true;
                                    nValue = nValue * 10m + (c - '0');
                                    goto case ' ';                                     // !!! fall through !!!

                                case ' ':
                                case ',':
                                case '\t':
                                    bGood = true;
                                    break;
                                }                                 // switch

                                if (!bGood)
                                {
                                    break;
                                }
                            }                             // for each char

                            if (bFound)
                            {
                                sValue = nValue.ToString("G0", ms_oCulture);
                            }
                        }                 // if
                    }                     // if

                    sValue = oValueSrcAttr.Map(sValue);
                }                 // if

                if (oValues.Values.ContainsKey(sDisplayName))
                {
                    oValues.Values[sDisplayName] = Str(oValues.Values[sDisplayName] + oValueSrcAttr.DisplayPrefix + sValue);
                }
                else
                {
                    oValues.Values[sDisplayName] = Str(sValue);
                }
            });

            CompanyScoreModelItemValues oGroupValues = null;

            foreach (KeyValuePair <string, CompanyScoreModelItemValues> pair in oMyValues)
            {
                string sTargetGroupName = pair.Key;

                CompanyScoreModelItem oItem;

                if (oModel.ContainsKey(sTargetGroupName))
                {
                    oItem = oModel[sTargetGroupName];
                }
                else
                {
                    oItem = new CompanyScoreModelItem(sTargetGroupName, oMyMetaData[sTargetGroupName].ToDictionary());
                    oModel[sTargetGroupName] = oItem;
                }                 // if

                oItem.Data.Add(pair.Value);

                if (oGroupSrcAttr != null)
                {
                    oGroupValues = pair.Value;
                }
            }             // for each

            foreach (AExperianLtdDataRow oKid in Children)
            {
                ASrcAttribute oKidSrcAttr = oKid.GetType().GetCustomAttribute <ASrcAttribute>();

                if (oKidSrcAttr == null)
                {
                    continue;
                }

                if (!oKidSrcAttr.IsCompanyScoreModel)
                {
                    continue;
                }

                if (oKidSrcAttr.IsTopLevel)
                {
                    oKid.ToCompanyScoreModel(oModel);
                }
                else
                {
                    if (oGroupValues == null)
                    {
                        Log.Alert("No group values were defined for children of {0}.", this.GetType());
                    }
                    else
                    {
                        oKid.ToCompanyScoreModel(oGroupValues.Children);
                    }
                }
            }             // for each kid

            return(oModel);
        }         // ToCompanyScoreModel