Ejemplo n.º 1
0
        public void WhenAPartyOwnsAQuarterOfTheCertificates_ThenItIsEntitledToAQuarterOfThePowerEarnings()
        {
            // arrange
            // 25 certificates in 2012: Single transaction of 15 certificates in 2012
            List <Transaction> transactions =
                new List <Transaction> {
                new Transaction {
                    Date = new DateTime(2012, 2, 15), Amount = 2500
                }
            };

            // Plant Earning is 100
            PowerEarning powerPlant = new PowerEarning {
                Earning = 1000
            };

            List <DynamicShare>     strombezuege = new List <DynamicShare>();
            List <ConversionFactor> factor       = new List <ConversionFactor>();
            ICertificateDocument    document     = new DocumentMock();
            Address address = new Address();

            // act
            Certificate sut = new Certificate(document, 2018, address, powerPlant, transactions, strombezuege, factor)
            {
                TotalNumberOfCommittedCertificates = 100
            };

            // assert
            sut.PersonalPowerEarning.Should().Be(250, "25 out of 100 is a quarter and a quarter of 1000 kWh gives 250 kWh");
        }
Ejemplo n.º 2
0
        public void WhenDynamicCertificatesExistForTheFuture_ThenTheseAreNotShownOnTheDocument()
        {
            const int            Year     = 2015;
            ICertificateDocument document = new DocumentMock();
            Address      address          = new Address();
            PowerEarning powerPlant       = new PowerEarning();
            // Arrange
            // 1 dynamic certificate annually between 2010 - 2019
            List <DynamicShare>     dynymicShare = new List <DynamicShare>();
            List <ConversionFactor> factor       = new List <ConversionFactor>();

            for (int year = 2010; year <= 2019; year++)
            {
                DateTime date = new DateTime(year, 12, 31);
                dynymicShare.Add(new DynamicShare {
                    AddressId = 1, Date = date, PowerPurchase = 100
                });
                factor.Add(new ConversionFactor {
                    Year = year, Factor = 1
                });
            }
            List <Transaction> fixShare = new List <Transaction>
            {
                // Subscription of 15 certificates in 2012
                new Transaction {
                    Date = new DateTime(2012, 2, 15), Amount = 1500
                },
                // Subscription of 25 certificates in 2016
                new Transaction {
                    Date = new DateTime(2016, 2, 15), Amount = 2500
                }
            };
            Certificate sut = new Certificate(document, Year, address, powerPlant, fixShare, dynymicShare, factor)
            {
                TotalNumberOfCommittedCertificates = 1
            };

            // Act
            // Calculation date 2015
            string html = sut.FillTemplateWithData(Year, null, null, DateTime.Now);

            // Assert
            html.Should().ContainAll(new List <string> {
                "2010", "2011", "2012", "2013", "2014", "2015"
            });
            html.Should().NotContainAny(new List <string> {
                "2016", "2017", "2018", "2019"
            });
            sut.NumberOfCertificatesHeld.Should().Be(21, "dynymicShare: 6 + fixShare: 15 => 21");
        }
Ejemplo n.º 3
0
        public Certificate(ICertificateDocument document, int year, Address address, PowerEarning powerEarning, List <Transaction> transactions, List <DynamicShare> dynamicShares, List <ConversionFactor> factor)
        {
            _document      = document;
            _year          = year;
            Name           = address.Name;
            _street        = address.Street;
            _city          = address.City;
            _powerEarning  = powerEarning.Earning;
            _dynamicShares = dynamicShares;
            _factor        = factor;

            List <Transaction> fixTransactions     = transactions;
            List <Transaction> dynamicTransactions = new List <Transaction>();

            foreach (DynamicShare bezug in _dynamicShares)
            {
                Transaction transaktion = new Transaction {
                    Date = bezug.Date
                };
                int y = transaktion.Date.Year;
                try
                {
                    decimal f = _factor.Single(fa => fa.Year == y).Factor;
                    transaktion.Amount      = (int)(bezug.PowerPurchase * f);
                    transaktion.Description = $"Jährlicher Strombezug {y}: {bezug.PowerPurchase}.- x {f} =";
                    dynamicTransactions.Add(transaktion);
                }
                catch (Exception)
                {
                    throw new Exception($"Kein passender Umwandlungsfaktor für das Jahr {y} gefunden.");
                }
            }

            var fixTransactionsUpToYear = fixTransactions.Where(t => t.Date.Year <= _year).ToList();

            NumberOfCommittedCertificates = (fixTransactionsUpToYear.Sum(t => t.Amount)
                                             + dynamicTransactions.Sum(t => t.Amount)) / 100;

            var dynamicTransUpToYear = dynamicTransactions.Where(t => t.Date.Year <= _year).ToList();
            var amountHeld           = (fixTransactionsUpToYear.Sum(t => t.Amount)
                                        + dynamicTransUpToYear.Sum(t => t.Amount));

            NumberOfCertificatesHeld = amountHeld / 100;
            RemainingBalance         = amountHeld - NumberOfCertificatesHeld * 100;

            _allTransUpToYear = new List <Transaction>();
            _allTransUpToYear.AddRange(fixTransactionsUpToYear);
            _allTransUpToYear.AddRange(dynamicTransUpToYear);
            _allTransUpToYear = _allTransUpToYear.OrderBy(t => t.Date).ToList();
        }
Ejemplo n.º 4
0
        public void WhenACustomerHas10DynamicÂnd15TransactionalShares_ThenTheNumberOfCommittedCertificatesMustBe25()
        {
            // arrange
            // 20 dynamic certificates: 2 dynamic certificate annually between 2010 - 2019
            List <DynamicShare>     strombezuege = new List <DynamicShare>();
            List <ConversionFactor> factor       = new List <ConversionFactor>();

            for (int year = 2010; year <= 2019; year++)
            {
                DateTime date = new DateTime(year, 12, 31);
                strombezuege.Add(new DynamicShare {
                    AddressId = 1, Date = date, PowerPurchase = 200
                });
                factor.Add(new ConversionFactor {
                    Year = year, Factor = 1
                });
            }

            // 15 certificates in 2012: Single transaction of 15 certificates in 2012
            List <Transaction> transactions =
                new List <Transaction> {
                new Transaction {
                    Date = new DateTime(2012, 2, 15), Amount = 1500
                }
            };

            ICertificateDocument document = new DocumentMock();
            Address      address          = new Address();
            PowerEarning powerPlant       = new PowerEarning();

            // act
            Certificate sut = new Certificate(document, 2018, address, powerPlant, transactions, strombezuege, factor);

            // assert
            sut.NumberOfCommittedCertificates.Should().Be(35, "20 dynamic certificates plus 15 certificates from a transaction gives a total of 35 certificates");
        }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            try
            {
                if (!CommandLineArguments.TryParse <MyArgumentsClass>(args, out var cliArguments))
                {
                    // Something wrong, exit or display help?
                    CommandLineArguments.DisplayHelp(cliArguments);
                    Console.Error.WriteLine("Error in the command line arguments");
                    return;
                }

                Thread.CurrentThread.CurrentCulture = new CultureInfo("de-CH");

                int year = cliArguments.Year;

                Context db;

                string dataPath = $"./Customer{cliArguments.CustomerName}/{year}";

                using (StreamReader addressReader = new StreamReader($"{dataPath}/Address.csv"))
                    using (StreamReader powerPlantReader = new StreamReader($"{dataPath}/PowerEarning.csv"))
                        using (StreamReader powerPurchasesReader = new StreamReader($"{dataPath}/DynamicShare.csv"))
                            using (StreamReader transactionsReader = new StreamReader($"{dataPath}/Transaction.csv"))
                                using (StreamReader conversionFactorsReader = new StreamReader($"{dataPath}/ConversionFactor.csv"))
                                {
                                    db = new Context(addressReader, powerPlantReader, powerPurchasesReader, transactionsReader,
                                                     conversionFactorsReader);
                                }

                Console.Out.WriteLine($"Year: {year}");
                Console.Out.WriteLine(
                    "Id, Name, Street, City, NumberOfCertificatesHeld, RemainingBalance, NumberOfCommittedCertificates");

                CertificateCollection certificates = new CertificateCollection();
                foreach (Address address in db.Addresses)
                {
                    int adressId = address.Id;

                    PowerEarning            powerPlant   = db.PowerEarnings.Single(pp => pp.Year == year);
                    List <Transaction>      transactions = db.Transactions.Where(t => t.AddressId == adressId).ToList();
                    List <DynamicShare>     strombezuege = db.DynamicShares.Where(pp => pp.AddressId == adressId).ToList();
                    List <ConversionFactor> factor       = db.ConversionFactors;

                    ICertificateDocument document    = new CertificateDocument($"{dataPath}/Template");
                    Certificate          certificate = new Certificate(document, year, address, powerPlant, transactions,
                                                                       strombezuege, factor);

                    certificates.Add(certificate);
                    Console.Out.WriteLine(
                        $"{address.Id}, {address.Name}, {address.Street}, {address.City}, {certificate.NumberOfCertificatesHeld}, {certificate.RemainingBalance}, {certificate.NumberOfCommittedCertificates}");
                }

                int totalNumberOfCertificates          = certificates.TotalNumberOfCertificates;
                int totalNumberOfCommittedCertificates = certificates.TotalNumberOfCommittedCertificates;
                int remainingBalance = certificates.TotalRemainingBalance;
                Console.Out.WriteLine(
                    $"999, Total, , , {totalNumberOfCertificates}, {remainingBalance}, {totalNumberOfCommittedCertificates}");

                string exportFolder = $"{dataPath}/Generated";
                if (!Directory.Exists(exportFolder))
                {
                    Directory.CreateDirectory(exportFolder);
                }

                foreach (Certificate certificate in certificates)
                {
                    if (cliArguments.NameFilter != null && !certificate.Name.Contains(cliArguments.NameFilter))
                    {
                        continue;
                    }

                    if (!cliArguments.All && certificate.NumberOfCommittedCertificates == 0)
                    {
                        continue;
                    }

                    string htmlData = certificate.FillTemplateWithData(year, cliArguments.Signer1, cliArguments.Signer2,
                                                                       cliArguments.IssueDate);
                    string fileName  = certificate.GetFileName(exportFolder);
                    Stream pdfStream = new FileStream(fileName, FileMode.Create);
                    HtmlConverter.ConvertToPdf(htmlData, pdfStream);
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.Message);
                if (e.InnerException != null)
                {
                    Console.Error.WriteLine(e.InnerException.Message);
                }
            }
            finally
            {
                Console.ReadLine();
            }
        }