예제 #1
0
        public async Task <WorkpaperResponseOfRentalPropertyWorkpaper> CreateAsync(
            Guid taxpayerId,
            int taxYear,
            string taxpayerName = "",
            RentalPropertyInformation rentalPropertyInformation             = null,
            RentalTransactionCollectionOfNumericCellAndDecimal rentalIncome = null,
            RentalTransactionCollectionOfNumericCellAndDecimal otherIncome  = null,
            RentalTransactionOfDecimalAndDecimal grossIncome = null,
            RentalTransactionCollectionOfNumericCellAndDecimal advertising            = null,
            RentalTransactionCollectionOfNumericCellAndDecimal bodyCorporate          = null,
            RentalTransactionCollectionOfNumericCellAndDecimal borrowingExpenses      = null,
            RentalTransactionCollectionOfNumericCellAndDecimal cleaning               = null,
            RentalTransactionCollectionOfNumericCellAndDecimal councilRates           = null,
            RentalTransactionCollectionOfNumericCellAndDecimal capitalAllowances      = null,
            RentalTransactionCollectionOfNumericCellAndDecimal capitalWorks           = null,
            RentalTransactionCollectionOfNumericCellAndDecimal gardening              = null,
            RentalTransactionCollectionOfNumericCellAndDecimal insurance              = null,
            RentalTransactionCollectionOfNumericCellAndNumericCell interestOnLoans    = null,
            RentalTransactionCollectionOfNumericCellAndDecimal landTax                = null,
            RentalTransactionCollectionOfNumericCellAndDecimal legalFees              = null,
            RentalTransactionCollectionOfNumericCellAndDecimal pestControl            = null,
            RentalTransactionCollectionOfNumericCellAndDecimal agentFees              = null,
            RentalTransactionCollectionOfNumericCellAndDecimal repairsAndMaintenance  = null,
            RentalTransactionCollectionOfNumericCellAndDecimal stationeryPhonePostage = null,
            RentalTransactionCollectionOfNumericCellAndDecimal travelExpenses         = null,
            RentalTransactionCollectionOfNumericCellAndDecimal waterCharges           = null,
            RentalTransactionCollectionOfNumericCellAndDecimal sundryExpenses         = null,
            int weeksRented                  = 0,
            int weeksAvailableForRent        = 0,
            decimal ownershipPercentageMine  = 0m,
            decimal ownershipPercentageTotal = 0m)
        {
            var createRentalPropertyCommand = new CreateRentalPropertyWorkpaperCommand()
            {
                TaxpayerId = taxpayerId,
                TaxYear    = taxYear,
            };

            var createRentalPropertyResponse = await Client.Workpapers_CreateRentalPropertyWorkpaperAsync(createRentalPropertyCommand)
                                               .ConfigureAwait(false);

            var getWorkpaperResponse = await GetRentalPropertyWorkpaperAsync(taxpayerId, taxYear, createRentalPropertyResponse);

            var workpaper = getWorkpaperResponse.Workpaper;

            workpaper.RentalPropertyInformation    = rentalPropertyInformation;
            workpaper.RentalPropertyIncomeExpenses = new RentalPropertyIncomeExpenses
            {
                TaxpayerId               = taxpayerId,
                TaxpayerName             = taxpayerName,
                WeeksRented              = weeksRented,
                WeeksAvailableForRent    = weeksAvailableForRent,
                OwnershipPercentageMine  = ownershipPercentageMine,
                OwnershipPercentageTotal = ownershipPercentageTotal,
                RentalIncome             = rentalIncome ?? workpaper.RentalPropertyIncomeExpenses.RentalIncome,
                OtherIncome              = otherIncome ?? workpaper.RentalPropertyIncomeExpenses.OtherIncome,
                GrossIncome              = grossIncome ?? workpaper.RentalPropertyIncomeExpenses.GrossIncome,
                Advertising              = advertising ?? workpaper.RentalPropertyIncomeExpenses.Advertising,
                BodyCorporate            = bodyCorporate ?? workpaper.RentalPropertyIncomeExpenses.BodyCorporate,
                BorrowingExpenses        = borrowingExpenses ?? workpaper.RentalPropertyIncomeExpenses.BorrowingExpenses,
                Cleaning               = cleaning ?? workpaper.RentalPropertyIncomeExpenses.Cleaning,
                CouncilRates           = councilRates ?? workpaper.RentalPropertyIncomeExpenses.CouncilRates,
                CapitalAllowances      = capitalAllowances ?? workpaper.RentalPropertyIncomeExpenses.CapitalAllowances,
                CapitalWorks           = capitalWorks ?? workpaper.RentalPropertyIncomeExpenses.CapitalWorks,
                Gardening              = gardening ?? workpaper.RentalPropertyIncomeExpenses.Gardening,
                Insurance              = insurance ?? workpaper.RentalPropertyIncomeExpenses.Insurance,
                InterestOnLoans        = interestOnLoans ?? workpaper.RentalPropertyIncomeExpenses.InterestOnLoans,
                LandTax                = landTax ?? workpaper.RentalPropertyIncomeExpenses.LandTax,
                LegalFees              = legalFees ?? workpaper.RentalPropertyIncomeExpenses.LegalFees,
                PestControl            = pestControl ?? workpaper.RentalPropertyIncomeExpenses.PestControl,
                AgentFees              = agentFees ?? workpaper.RentalPropertyIncomeExpenses.AgentFees,
                RepairsAndMaintenance  = repairsAndMaintenance ?? workpaper.RentalPropertyIncomeExpenses.RepairsAndMaintenance,
                StationeryPhonePostage = stationeryPhonePostage ?? workpaper.RentalPropertyIncomeExpenses.StationeryPhonePostage,
                TravelExpenses         = travelExpenses ?? workpaper.RentalPropertyIncomeExpenses.TravelExpenses,
                WaterCharges           = waterCharges ?? workpaper.RentalPropertyIncomeExpenses.WaterCharges,
                SundryExpenses         = sundryExpenses ?? workpaper.RentalPropertyIncomeExpenses.SundryExpenses,
                NetRent                = workpaper.RentalPropertyIncomeExpenses.NetRent,
                OtherDeductions        = workpaper.RentalPropertyIncomeExpenses.OtherDeductions,
                TotalDeductions        = workpaper.RentalPropertyIncomeExpenses.TotalDeductions
            };

            // Update command for our new workpaper
            var upsertCommand = new UpsertRentalPropertyWorkpaperCommand()
            {
                TaxpayerId       = taxpayerId,
                TaxYear          = taxYear,
                DocumentIndexId  = getWorkpaperResponse.DocumentIndexId,
                CompositeRequest = true,
                WorkpaperType    = WorkpaperType.RentalPropertyWorkpaper,
                Workpaper        = getWorkpaperResponse.Workpaper
            };

            var upsertResponse = await Client.Workpapers_PostRentalPropertyWorkpaperAsync(upsertCommand)
                                 .ConfigureAwait(false);

            return(upsertResponse);
        }
        public async Task <TaxpayerDto> CreateAsync(TaxlabApiClient client)
        {
            Console.WriteLine("== Step: Getting Country Lookups ==========================================================");
            var lookups      = new LookupsRepository(client);
            var lookupsArray = await lookups.GetAllLookups();

            ICollection <BaseLookupMapperItem> countryLookup = new List <BaseLookupMapperItem>();

            var countryListFetched = lookupsArray.Lookups.TryGetValue("Common/RegionLookups/CountryCodes", out countryLookup);

            if (countryListFetched)
            {
                Console.WriteLine($"== Country Lookup count: {countryLookup.Count} fetched==========================================================");
            }
            else
            {
                Console.WriteLine($"== Check Lookup call ==========================================================");
            }

            const int    taxYear          = 2021;
            var          balanceDate      = new LocalDate(2021, 6, 30);
            var          startDate        = balanceDate.PlusYears(-1).PlusDays(-1);
            const string firstName        = "Johnny";
            const string lastName         = "Citizen";
            const string taxFileNumber    = "32989432";
            var          taxpayerResponse = await CreateTaxpayer(client, firstName, lastName, taxFileNumber);

            var taxpayer = taxpayerResponse.Content;

            Console.WriteLine("== Step: Creating employment income workpaper ==========================================================");

            var employmentIncomeWorkpaperFactory = new EmploymentIncomeRepository(client);
            await employmentIncomeWorkpaperFactory.CreateAsync(taxpayer.Id,
                                                               taxYear,
                                                               employerName : "ABC Company Limited",
                                                               governmentIdentifier : "",
                                                               salaryAndWagesIncome : 343434m,
                                                               salaryAndWagesTaxWithheld : -213400m,
                                                               allowanceIncome : 310m
                                                               );

            Console.WriteLine("== Step: Creating dividend income workpaper ==========================================================");

            var dividendWorkpaperFactory = new DividendIncomeRepository(client);
            await dividendWorkpaperFactory.CreateAsync(taxpayer.Id,
                                                       taxYear,
                                                       "ABC Company Limited",
                                                       "123456789",
                                                       1,
                                                       1000m,
                                                       200m,
                                                       300m,
                                                       -10m);

            Console.WriteLine("== Step: Creating interest income workpaper ==========================================================");
            var interestWorkpaperFactory = new InterestIncomeRepository(client);
            await interestWorkpaperFactory.CreateAsync(taxpayer.Id,
                                                       taxYear,
                                                       "Our financial institution name",
                                                       "123456789",
                                                       1,
                                                       1000m,
                                                       -200m);

            Console.WriteLine("== Step: Creating supercontribution workpaper ==========================================================");
            var personalSuperannuationContributionFactory = new PersonalSuperannuationContributionRepository(client);
            await personalSuperannuationContributionFactory.CreateAsync(taxpayer.Id,
                                                                        taxYear,
                                                                        "XYZ Company Limited",
                                                                        "123456789",
                                                                        "9867565423",
                                                                        "5235423423423",
                                                                        balanceDate,
                                                                        10000m,
                                                                        true
                                                                        );

            Console.WriteLine("== Step: Creating Government Allowance workpaper ==========================================================");
            var governmentAllowanceFactory = new GovernmentAllowanceRepository(client);
            await governmentAllowanceFactory.CreateAsync(taxpayer.Id,
                                                         taxYear,
                                                         "Allowance",
                                                         "testDescription",
                                                         1000m,
                                                         1000m
                                                         );

            Console.WriteLine("== Step: Creating Government Pension workpaper ==========================================================");
            var governmentPensionFactory = new GovernmentPensionRepository(client);
            await governmentPensionFactory.CreateAsync(taxpayer.Id,
                                                       taxYear,
                                                       "testDescription",
                                                       1000m,
                                                       1000m
                                                       );

            Console.WriteLine("== Step: Creating donation deduction workpaper ==========================================================");
            var chartiableDonation = new OtherDeductionRepository(client);
            await chartiableDonation.CreateAsync(taxpayer.Id,
                                                 taxYear,
                                                 -10000m,
                                                 ReturnDisclosureTypes.AUIndividualGiftsOrDonations
                                                 );

            Console.WriteLine("== Step: Creating other deduction workpaper ==========================================================");
            var expense = new OtherDeductionRepository(client);
            await expense.CreateAsync(taxpayer.Id,
                                      taxYear,
                                      -10000m,
                                      ReturnDisclosureTypes.AUDividend
                                      );

            Console.WriteLine("== Step: Creating declarations workpaper ==========================================================");

            var declarationsWorkpaperFactory = new DeclarationsRepository(client);
            await declarationsWorkpaperFactory.CreateAsync(taxpayer.Id,
                                                           taxYear,
                                                           taxAgentNumber : "",
                                                           taxAgentAbn : "",
                                                           taxAgentDeclarationStatementAccepted : true,
                                                           taxAgentContactFirstName : "Jason",
                                                           taxAgentContactLastName : "Campbell",
                                                           taxAgentContactPhoneAreaCode : "03",
                                                           taxAgentContactPhoneNumber : "88435751",
                                                           taxAgentClientReference : "CR010011JC",
                                                           taxPayerDeclarationStatementAccepted : true,
                                                           taxAgentSignatureFirstName : "John",
                                                           taxAgentSignatureLastName : "Citizen"
                                                           );

            Console.WriteLine("== Step: Creating rental property workpaper ==========================================================");

            var rentalPropertyWorkpaperFactory = new RentalPropertyRepository(client);

            var rentalPropertyInformation = new RentalPropertyInformation
            {
                Description           = "Rental property 1",
                OfficialName          = null,
                AddressLine1          = "3 Savannah Ct",
                AddressLine2          = null,
                AddressSuburb         = "Hillside",
                AddressState          = "VIC",
                AddressPostcode       = "3037",
                DateFirstEarnedIncome = "2017-03-15",
                PurchaseDate          = "2017-01-10",
                PurchasePrice         = new NumericCell
                {
                    Value   = 4900000,
                    Formula = "4900000"
                },
                SaleDate  = null,
                SalePrice = new NumericCell(),
                CapitalGainOrLossOnSale         = new NumericCell(),
                CapitalAllowancesRecoupedOnSale = new NumericCell(),
                CapitalWorksRecoupedOnSale      = new NumericCell(),
                Status = RentalPropertyStatus.Active,
                LoanRenegotiatedIndicator = false
            };

            var rentalIncome = new RentalTransactionCollectionOfNumericCellAndDecimal
            {
                Description        = "Rental Income",
                Total              = 216000,
                Mine               = 151200,
                RentalTransactions = new List <RentalTransactionOfNumericCellAndDecimal>
                {
                    new RentalTransactionOfNumericCellAndDecimal {
                        Description = "example rent",
                        Total       = new NumericCell
                        {
                            Value   = 216000,
                            Formula = "216000"
                        },
                        Mine = 151200
                    }
                }
            };

            var otherIncome = new RentalTransactionCollectionOfNumericCellAndDecimal
            {
                Description        = "Other Income",
                Total              = 700,
                Mine               = 490,
                RentalTransactions = new List <RentalTransactionOfNumericCellAndDecimal>
                {
                    new RentalTransactionOfNumericCellAndDecimal {
                        Description = "example other income",
                        Total       = new NumericCell
                        {
                            Value   = 700,
                            Formula = "700"
                        },
                        Mine = 490
                    }
                }
            };

            var insurance = new RentalTransactionCollectionOfNumericCellAndDecimal
            {
                Description = "Insurance",
                //Total = 216000,
                //Mine = 151200,
                RentalTransactions = new List <RentalTransactionOfNumericCellAndDecimal>
                {
                    new RentalTransactionOfNumericCellAndDecimal {
                        Description = "Insurance",
                        Total       = new NumericCell
                        {
                            //Value = 216000,
                            Formula = "700"
                        },
                        //Mine = 151200
                    }
                }
            };

            var grossIncome = new RentalTransactionOfDecimalAndDecimal
            {
                Description = "Gross Income",
                Total       = 216700,
                Mine        = 151690
            };

            var interestOnLoans = new RentalTransactionCollectionOfNumericCellAndNumericCell
            {
                Description        = "Interest On Loans",
                Total              = -78479,
                Mine               = -2480,
                RentalTransactions = new List <RentalTransactionOfNumericCellAndNumericCell>
                {
                    new RentalTransactionOfNumericCellAndNumericCell {
                        Description = "example loan 1",
                        Total       = new NumericCell
                        {
                            Value   = -48024,
                            Formula = "-48024"
                        },
                        Mine = new NumericCell
                        {
                            Value   = 0,
                            Formula = "0"
                        },
                    },
                    new RentalTransactionOfNumericCellAndNumericCell {
                        Description = "example loan 2",
                        Total       = new NumericCell
                        {
                            Value   = -30455,
                            Formula = "-30455"
                        },
                        Mine = new NumericCell
                        {
                            Value   = -2480,
                            Formula = "-2480"
                        },
                    }
                }
            };

            await rentalPropertyWorkpaperFactory.CreateAsync(taxpayer.Id,
                                                             taxYear,
                                                             $"{firstName} {lastName}",
                                                             rentalPropertyInformation,
                                                             rentalIncome,
                                                             otherIncome,
                                                             grossIncome,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             insurance,
                                                             interestOnLoans,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             null,
                                                             0,
                                                             0,
                                                             0.7m,
                                                             1m
                                                             ).ConfigureAwait(false);

            Console.WriteLine("== Step: Get rental summary property workpaper ==========================================================");
            var rentalSummaryWorkpaper = await new RentalPropertiesSummaryRepository(client).GetRentalSummaryWorkpaperAsync(taxpayer.Id, taxYear).ConfigureAwait(false);

            return(taxpayer);
        }