public async Task <ActionResult <TaxResponse> > GetBenefitTaxAsync([FromBody] BenefitTaxRequest request) { await RequestUtilites.ValidatebenfitTaxRequestAsync(_taxOfficeClient, request); var benefitTaxSummary = await _beneFitTaxService.CalculateNetCost(request); return(Ok(new TaxResponse(benefitTaxSummary.NetCost))); }
private async Task <int> GetTaxTable(BenefitTaxRequest benefitTaxRequest) { if (benefitTaxRequest.ChurchMember == true && !string.IsNullOrEmpty(benefitTaxRequest.Congregation)) { return(await _taxOfficeClient.GetChurchMemberTaxTable(benefitTaxRequest.Municipality, benefitTaxRequest.ChurchMember, benefitTaxRequest.Congregation)); } return(await _taxOfficeClient.GetTaxTable(benefitTaxRequest.Municipality)); }
public async Task <TaxResponse> CalculateNetCost(BenefitTaxRequest benefitTaxRequest) { // Get Tax table var taxtable = await GetTaxTable(benefitTaxRequest); // Get income from and to var incomePairNoBenefit = _taxCalculationService.GetIncomeInterval(benefitTaxRequest.Income); var incomePairWithBenefit = _taxCalculationService.GetIncomeInterval(benefitTaxRequest.Income + benefitTaxRequest.BenefitTax); // Calculate tax to deduct var taxToDeductNoBenefit = await _taxOfficeClient.GetTaxToDeduct(taxtable, "30B", incomePairNoBenefit.IncomeTop, benefitTaxRequest.IncomeYear, incomePairNoBenefit.IncomeBottom); var taxToDeductWithBenefit = await _taxOfficeClient.GetTaxToDeduct(taxtable, "30B", incomePairWithBenefit.IncomeTop, benefitTaxRequest.IncomeYear, incomePairWithBenefit.IncomeBottom); var netIncomeNoBeneFit = benefitTaxRequest.Income - taxToDeductNoBenefit; var netIncomeWithBenefit = benefitTaxRequest.Income - taxToDeductWithBenefit; // Return net cost return(new TaxResponse(netIncomeNoBeneFit - netIncomeWithBenefit)); }
public static async Task <BenefitTaxRequest> ValidatebenfitTaxRequestAsync(ITaxAgencyClient _taxOfficeClient, BenefitTaxRequest request) { if (request == null) { throw new ValidationException("Request cannot be null", nameof(request)); } if (request.ChurchMember != false) { var validatedCongregation = await ValidateCongregation(_taxOfficeClient, request.Congregation, 2020, request.Municipality); } return(request); }