Esempio n. 1
0
        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));
        }
Esempio n. 5
0
        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));
        }