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"); }
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"); }
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(); }
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"); }
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(); } }