Example #1
0
        public void ExportDataAsCsv_TwoYears_DifferentCountOfOwners()
        {
            CompanyOutputData companyOutputData = new CompanyOutputData
            {
                ICO           = "123",
                Name          = "Test company",
                OwnersByYears = new Dictionary <int, List <OwnerInfo> >()
                {
                    { 2011, new List <OwnerInfo>
                      {
                          new OwnerInfo
                          {
                              LegalFormOfOwner = "s.r.o",
                              CountryOfOwner   = "Czech republic",
                              OwnerCountrySign = "DOM",
                              OwnerType        = "FO",
                              OwnerShare       = "51",
                              FromTime         = DateTime.ParseExact("01.01.2011", "dd.MM.yyyy", CultureInfo.CurrentCulture),
                              ToTime           = DateTime.ParseExact("31.12.2011", "dd.MM.yyyy", CultureInfo.CurrentCulture),
                              IsValid          = "1",
                          },
                          new OwnerInfo
                          {
                              LegalFormOfOwner = "s.r.o",
                              CountryOfOwner   = "USA",
                              OwnerCountrySign = "FOR",
                              OwnerType        = "FO",
                              OwnerShare       = "49",
                              FromTime         = DateTime.ParseExact("01.01.2011", "dd.MM.yyyy", CultureInfo.CurrentCulture),
                              ToTime           = DateTime.ParseExact("31.12.2011", "dd.MM.yyyy", CultureInfo.CurrentCulture),
                              IsValid          = "1",
                          }
                      } },
                    { 2012, new List <OwnerInfo>
                      {
                          new OwnerInfo
                          {
                              LegalFormOfOwner = "s.r.o",
                              CountryOfOwner   = "Czech republic",
                              OwnerCountrySign = "DOM",
                              OwnerType        = "FO",
                              OwnerShare       = "100",
                              FromTime         = DateTime.ParseExact("01.01.2012", "dd.MM.yyyy", CultureInfo.CurrentCulture),
                              ToTime           = DateTime.ParseExact("31.12.2012", "dd.MM.yyyy", CultureInfo.CurrentCulture),
                              IsValid          = "1",
                          },
                      } }
                }
            };

            var dataExporter = new CsvDataExporter();

            var result = dataExporter.TransformCompanyDataToCsvString(companyOutputData);

            var expectedResult = "123;Test company;s.r.o;Czech republic;DOM;51;FO;s.r.o;USA;FOR;49;FO;;;;;;s.r.o;Czech republic;DOM;100;FO;;;;;;;;;;;";

            Console.WriteLine(expectedResult);
            Console.WriteLine(result);
            Assert.AreEqual(expectedResult, result);
        }
Example #2
0
        public string TransformCompanyDataToCsvString(CompanyOutputData companyData)
        {
            var basicCompanyInfo = $"{companyData.ICO};{companyData.Name}";

            var companyDataByYears = "";

            for (int currentYear = START_YEAR; currentYear <= END_YEAR; currentYear++)
            {
                if (companyData.OwnersByYears.ContainsKey(currentYear))
                {
                    companyData.OwnersByYears[currentYear].Sort(delegate(OwnerInfo x, OwnerInfo y)
                    {
                        if (x.OwnerShare == null && y.OwnerShare == null)
                        {
                            return(0);
                        }
                        else if (x.OwnerShare == null)
                        {
                            return(-1);
                        }
                        else if (y.OwnerShare == null)
                        {
                            return(1);
                        }
                        else
                        {
                            return(y.OwnerShare.CompareTo(x.OwnerShare));
                        }
                    });

                    var ownersCount = companyData.OwnersByYears[currentYear].Count;
                    var ownerData   = ownersCount > COUNT_OF_TOP_OWNERS
                        ? companyData.OwnersByYears[currentYear].GetRange(0, COUNT_OF_TOP_OWNERS - 1)
                        : companyData.OwnersByYears[currentYear];

                    foreach (var owner in ownerData)
                    {
                        // Remove companies (from result csv) with not numeric owner share
                        if (!double.TryParse(owner.OwnerShare, out _))
                        {
                            return(null);
                        }

                        companyDataByYears += $"{owner.LegalFormOfOwner};{owner.CountryOfOwner};{owner.OwnerCountrySign};{owner.OwnerShare};{owner.OwnerType};";
                    }

                    if (ownersCount < COUNT_OF_TOP_OWNERS)
                    {
                        var missingOwnersCount = COUNT_OF_TOP_OWNERS - ownersCount;

                        for (var i = 0; i < missingOwnersCount; i++)
                        {
                            companyDataByYears += ";;;;;";
                        }
                    }
                }
            }

            if (companyDataByYears == "")
            {
                return(null);
            }

            return($"{basicCompanyInfo};{companyDataByYears}");
        }