public void Write_WithOneInvoiceAndTwoLineItems_GeneratesCorrectOutput() { // Arrange List <InvoiceLineItem> lineItems = new List <InvoiceLineItem>(); lineItems.Add(new InvoiceLineItem(100.00m, "Test item 1")); lineItems.Add(new InvoiceLineItem(123.45m, "Test item 2")); Invoice invoice = new Invoice( "WEE0001", new DateTime(2015, 1, 1), TransactionType.Invoice, "WEE741804H", lineItems); TransactionFile file = new TransactionFile("WEE", 0); file.AddInvoice(invoice); // Act string result = file.Write(); // Assert string expectedDate = DateTime.UtcNow.Date.ToString("dd-MMM-yyyy").ToUpperInvariant(); string expectedOutput = "\"H\",\"0000000\",\"WEE\",\"H\",\"I\",\"00000\",\"\",\"" + expectedDate + "\"" + Environment.NewLine + "\"D\",\"0000001\",\"WEE0001\",\"01-JAN-2015\",\"I\",\"WEE741804H\",\"\",\"GBP\",\"\",\"01-JAN-2015\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"," + "\"10000\",\"\",\"H\",\"Test item 1\",\"W\",\"H\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"1\",\"Each\",\"10000\"" + Environment.NewLine + "\"D\",\"0000002\",\"WEE0001\",\"01-JAN-2015\",\"I\",\"WEE741804H\",\"\",\"GBP\",\"\",\"01-JAN-2015\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"," + "\"12345\",\"\",\"H\",\"Test item 2\",\"W\",\"H\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"1\",\"Each\",\"12345\"" + Environment.NewLine + "\"T\",\"0000003\",\"0000004\",\"22345\",\"0\"" + Environment.NewLine; Assert.Equal(expectedOutput, result); }
public void Write_WithOneInvoiceAndTwoLineItems_GeneratesCorrectOutput() { // Arrange List<InvoiceLineItem> lineItems = new List<InvoiceLineItem>(); lineItems.Add(new InvoiceLineItem(100.00m, "Test item 1")); lineItems.Add(new InvoiceLineItem(123.45m, "Test item 2")); Invoice invoice = new Invoice( "WEE0001", new DateTime(2015, 1, 1), TransactionType.Invoice, "WEE741804H", lineItems); TransactionFile file = new TransactionFile("WEE", 0); file.AddInvoice(invoice); // Act string result = file.Write(); // Assert string expectedDate = DateTime.UtcNow.Date.ToString("dd-MMM-yyyy").ToUpperInvariant(); string expectedOutput = "\"H\",\"0000000\",\"WEE\",\"H\",\"I\",\"00000\",\"\",\"" + expectedDate + "\"" + Environment.NewLine + "\"D\",\"0000001\",\"WEE0001\",\"01-JAN-2015\",\"I\",\"WEE741804H\",\"\",\"GBP\",\"\",\"01-JAN-2015\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"," + "\"10000\",\"\",\"H\",\"Test item 1\",\"W\",\"H\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"1\",\"Each\",\"10000\"" + Environment.NewLine + "\"D\",\"0000002\",\"WEE0001\",\"01-JAN-2015\",\"I\",\"WEE741804H\",\"\",\"GBP\",\"\",\"01-JAN-2015\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"," + "\"12345\",\"\",\"H\",\"Test item 2\",\"W\",\"H\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"1\",\"Each\",\"12345\"" + Environment.NewLine + "\"T\",\"0000003\",\"0000004\",\"22345\",\"0\"" + Environment.NewLine; Assert.Equal(expectedOutput, result); }
public async Task <IbisFileGeneratorResult <TransactionFile> > CreateAsync(ulong fileID, InvoiceRun invoiceRun) { TransactionFile transactionFile = new TransactionFile("WEE", fileID); var errors = new List <Exception>(); foreach (MemberUpload memberUpload in invoiceRun.MemberUploads) { DateTime submittedDate = memberUpload.SubmittedDate.Value; string description = string.Format("Charge for producer registration submission made on {0:dd MMM yyyy}.", submittedDate); try { InvoiceLineItem lineItem = new InvoiceLineItem( memberUpload.TotalCharges, description); string transactionReference = await transactionReferenceGenerator.GetNextTransactionReferenceAsync(); Invoice invoice = new Invoice( memberUpload.Scheme.IbisCustomerReference, invoiceRun.IssuedDate, TransactionType.Invoice, transactionReference, new List <InvoiceLineItem>() { lineItem }); transactionFile.AddInvoice(invoice); } catch (Exception ex) { errors.Add(ex); } } return(new IbisFileGeneratorResult <TransactionFile>(errors.Count == 0 ? transactionFile : null, errors)); }
public async Task <IbisFileGeneratorResult <TransactionFile> > CreateAsync(ulong fileID, InvoiceRun invoiceRun) { TransactionFile transactionFile = new TransactionFile("WEE", fileID); var errors = new List <Exception>(); var groups = invoiceRun.MemberUploads.GroupBy(mu => mu.Scheme); foreach (var group in groups) { List <InvoiceLineItem> lineItems = new List <InvoiceLineItem>(); var lineItemErrors = new List <Exception>(); foreach (MemberUpload memberUpload in group) { var submittedDate = memberUpload.SubmittedDate.Value; var competantAuthorityAnnualChargeAmount = memberUpload.Scheme.CompetentAuthority.AnnualChargeAmount; var description = string.Format("{0}.", CommonMessage(submittedDate)); if (memberUpload.HasAnnualCharge && competantAuthorityAnnualChargeAmount > 0) { description = string.Format("{0} and the {1} annual charge.", CommonMessage(submittedDate), competantAuthorityAnnualChargeAmount.Value.ToString("#,##0.00")); } try { InvoiceLineItem lineItem = new InvoiceLineItem( memberUpload.TotalCharges, description); lineItems.Add(lineItem); } catch (Exception ex) { lineItemErrors.Add(new SchemeFieldException(group.Key, ex)); } } errors.AddRange(lineItemErrors); string transactionReference = await transactionReferenceGenerator.GetNextTransactionReferenceAsync(); if (lineItemErrors.Count == 0) { try { Invoice invoice = new Invoice( group.Key.IbisCustomerReference, invoiceRun.IssuedDate, TransactionType.Invoice, transactionReference, lineItems); transactionFile.AddInvoice(invoice); } catch (Exception ex) { errors.Add(new SchemeFieldException(group.Key, ex)); } } } return(new IbisFileGeneratorResult <TransactionFile>(errors.Count == 0 ? transactionFile : null, errors)); }
public async Task <IbisFileGeneratorResult <TransactionFile> > CreateAsync(ulong fileID, InvoiceRun invoiceRun) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); var errors = new List <Exception>(); TransactionFile transactionFile = new TransactionFile("WEE", fileID); foreach (MemberUpload memberUpload in invoiceRun.MemberUploads) { List <InvoiceLineItem> lineItems = new List <InvoiceLineItem>(); var lineItemGroups = memberUpload.ProducerSubmissions .Where(ps => ps.ChargeThisUpdate != 0) .Where(ps => ps.Invoiced) .GroupBy(ps => ps.ChargeThisUpdate) .OrderBy(g => g.Key) .Select(g => new { Charge = g.Key, Quantity = g.Count() }) .ToList(); if (lineItemGroups.Count > 0) { var lineItemErrors = new List <Exception>(); foreach (var lineItemGroup in lineItemGroups) { decimal amount = lineItemGroup.Charge * lineItemGroup.Quantity; string description = string.Format("{0} producer registration charge{1} at {2:C}.", lineItemGroup.Quantity, lineItemGroup.Quantity != 1 ? "s" : string.Empty, lineItemGroup.Charge); InvoiceLineItem lineItem; try { lineItem = new InvoiceLineItem( amount, description); lineItems.Add(lineItem); } catch (Exception ex) { lineItemErrors.Add(ex); } } errors.AddRange(lineItemErrors); if (lineItemErrors.Count == 0) { string transactionReference = await transactionReferenceGenerator.GetNextTransactionReferenceAsync(); try { Invoice invoice = new Invoice( memberUpload.Scheme.IbisCustomerReference, invoiceRun.IssuedDate, TransactionType.Invoice, transactionReference, lineItems); transactionFile.AddInvoice(invoice); } catch (Exception ex) { errors.Add(ex); } } } } return(new IbisFileGeneratorResult <TransactionFile>(errors.Count == 0 ? transactionFile : null, errors)); }