public void Test_CreateGAFRecordsForDocumentGroup_When_Document_Is_In_Base_Cury()
        {
            //Arrange
            var taxAgencyID = VendorDataContext.TaxAgency.BAccountID;
            var taxPeriodID = TaxPeriodDataContext.TaxPeriod.TaxPeriodID;

            var taxDataItems = TaxDataBuilder.CreateTaxDataItems(new[]
            {
                TaxDataContext.VatTax.TaxID,
            });

            var invoiceAggr = new ARInvoiceAggregateBuilder()
                              .CreateDocument(APDocType.Invoice,
                                              DocumentDataContext.RefNbr,
                                              DocumentDataContext.DocDate,
                                              CompanyDataContext.Company.BaseCuryID)
                              .DocumentWith(customerID: CustomerDataContext.Customer.BAccountID,
                                            customerLocationID: LocationDataContext.CustomerLocation.LocationID,
                                            billingAddressID: ArAddressDataContext.CustomerAddress.AddressID)
                              .AddTran(InvoiceTranDataContext.TranAmt, InvoiceTranDataContext.CuryTranAmt, taxDataItems: taxDataItems)
                              .Build();

            var invoiceAggregs = invoiceAggr.SingleToArray();

            SetupRepositoryMethods(invoiceAggregs, invoiceAggr.Document.OrigModule, invoiceAggr.Document.DocType, taxAgencyID, taxPeriodID);

            var documentGroup = new DocumentGroup <AR.ARInvoice>()
            {
                Module            = invoiceAggr.Document.OrigModule,
                DocumentType      = invoiceAggr.Document.DocType,
                DocumentsByRefNbr = invoiceAggregs.ToDictionary(aggr => aggr.Document.RefNbr, aggr => aggr.Document)
            };

            //Action
            var supplyRecord = InvoiceGafRecordsCreator.CreateGAFRecordsForDocumentGroup(documentGroup, taxAgencyID, taxPeriodID)
                               .Single();

            //Assert
            Assert.Equal(InvoiceTranDataContext.TranAmt, supplyRecord.Amount);
            Assert.Equal(InvoiceTranDataContext.VatTaxTaxAmt, supplyRecord.GSTAmount);
            Assert.Equal(ForeignCurrencyCodeForDocumentInBaseCury, supplyRecord.ForeignCurrencyCode);
            Assert.Equal(0, supplyRecord.ForeignCurrencyAmount);
            Assert.Equal(0, supplyRecord.ForeignCurrencyAmountGST);
        }
        public void Test_CreateGAFRecordsForDocumentGroup_For_Documents_With_Two_Tax_And_Custom_LineNumbers(string module, Action additionalSetup = null)
        {
            //Arrange
            var taxDataItems = TaxDataBuilder.CreateTaxDataItems(new[]
            {
                TaxDataContext.VatTax.TaxID,
                TaxDataContext.VatTax2.TaxID
            });

            var taxAgencyID = VendorDataContext.TaxAgency.BAccountID;
            var taxPeriodID = TaxPeriodDataContext.TaxPeriod.TaxPeriodID;

            var invoiceAggr1 = new ARInvoiceAggregateBuilder()
                               .CreateDocument(ARDocType.Invoice,
                                               refNbr: DocumentDataContext.RefNbr,
                                               docDate: DocumentDataContext.DocDate,
                                               curyID: DocumentDataContext.CuryIDEUR,
                                               module: module)
                               .DocumentWith(customerID: CustomerDataContext.Customer.BAccountID,
                                             customerLocationID: LocationDataContext.CustomerLocation.LocationID,
                                             billingAddressID: ArAddressDataContext.CustomerAddress.AddressID)
                               .AddTran(100, 200, "tyre sale 1", lineNbr: 3, taxDataItems: taxDataItems)
                               .AddTran(300, 600, "oil sale 1", lineNbr: 7, taxDataItems: taxDataItems)
                               .Build();

            var invoiceAggr2 = new ARInvoiceAggregateBuilder()
                               .CreateDocument(ARDocType.Invoice,
                                               refNbr: DocumentDataContext.RefNbr2,
                                               docDate: DocumentDataContext.DocDate2,
                                               curyID: DocumentDataContext.CuryIDGBP,
                                               module: module)
                               .DocumentWith(customerID: CustomerDataContext.Customer2.BAccountID,
                                             customerLocationID: LocationDataContext.Customer2Location.LocationID,
                                             billingAddressID: ArAddressDataContext.Customer2Address.AddressID)
                               .AddTran(200, 400, "tyre sale 2", lineNbr: 4, taxDataItems: taxDataItems)
                               .AddTran(500, 700, "oil sale 2", lineNbr: 9, taxDataItems: taxDataItems)
                               .Build();

            var invoiceAggregs = new[] { invoiceAggr1, invoiceAggr2 };

            SetupRepositoryMethods(invoiceAggregs, invoiceAggr1.Document.OrigModule, invoiceAggr1.Document.DocType, taxAgencyID, taxPeriodID);

            if (additionalSetup != null)
            {
                additionalSetup();
            }

            var documentGroup = new DocumentGroup <AR.ARInvoice>()
            {
                Module            = invoiceAggr1.Document.OrigModule,
                DocumentType      = invoiceAggr1.Document.DocType,
                DocumentsByRefNbr = invoiceAggregs.ToDictionary(aggr => aggr.Document.RefNbr, aggr => aggr.Document)
            };

            //Action
            var supplyRecords = InvoiceGafRecordsCreator.CreateGAFRecordsForDocumentGroup(documentGroup, taxAgencyID,
                                                                                          taxPeriodID);

            //Assert
            Approvals.VerifyAll(supplyRecords, "supplyRecords", record => record.Dump());
        }