public static CouncilTaxDetailsModel MapTransactions(
            this List <Transaction> transactionResponse,
            CouncilTaxDetailsModel model)
        {
            model.TransactionHistory = transactionResponse
                                       .Where(t => t.TranType != "Charge" && t.TranType != "REFUNDS" && t.TranType != "PAYMENTS")
                                       .Select(transaction => new TransactionModelExtension
            {
                Date        = DateTime.Parse(transaction.Date.Text),
                Amount      = Math.Abs(transaction.DAmount),
                Method      = Convert(transaction.SubCode),
                Type        = IsCredit(transaction.DAmount, transaction.TranType) ? ETransactionType.Credit : ETransactionType.Debit,
                Description = GetDescription(transaction.TranType, Convert(transaction.SubCode), transaction.PlaceDetail?.PostCode)
            }).Distinct().ToList <TransactionModel>();

            model.PreviousPayments = transactionResponse
                                     .Where(t => t.TranType == "PAYMENTS" || t.TranType == "REFUNDS")
                                     .Select(transaction => new TransactionModelExtension
            {
                Date        = DateTime.Parse(transaction.Date.Text),
                Amount      = Math.Abs(transaction.DAmount),
                Method      = Convert(transaction.SubCode),
                Type        = IsCredit(transaction.DAmount, transaction.TranType) ? ETransactionType.Credit : ETransactionType.Debit,
                Description = GetDescription(transaction.TranType, Convert(transaction.SubCode), transaction.PlaceDetail?.PostCode)
            }).Distinct().ToList <TransactionModel>();

            return(model);
        }
Пример #2
0
        //TODO: LiabilityPeriodStart && LiabilityPeriodEnd never set from civica service -- needs looking into
        public static CouncilTaxDetailsModel MapCurrentProperty(
            this Place propertyResponse,
            CouncilTaxDetailsModel model)
        {
            //model.LiabilityPeriodStart = propertyResponse.ChargeDetails?.Dates?.Start;
            //model.LiabilityPeriodEnd = propertyResponse.ChargeDetails?.Dates?.End;
            model.TaxBand  = propertyResponse.Band.Text;
            model.Property = $"{propertyResponse.Address1}, {propertyResponse.Address2}";

            return(model);
        }
Пример #3
0
        public void MapTransactions_ShouldReturnTransactionHistory_WithDate()
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            // Act
            result = model.MapTransactions(result);

            // Assert
            Assert.Equal(DateTime.Parse(model[0].Date.Text), result.TransactionHistory[0].Date);
        }
        public static CouncilTaxDetailsModel MapPayments(
            this List <Installment> paymentResponse,
            CouncilTaxDetailsModel model)
        {
            model.UpcomingPayments = paymentResponse.Select(_ => new InstallmentModel
            {
                Amount        = Math.Abs(_.AmountDue),
                Date          = DateTime.Parse(_.DateDue),
                IsDirectDebit = _.IsDirectDebit.Equals("Y")
            }).ToList();

            return(model);
        }
Пример #5
0
        public void MapTransactions_ShouldReturnTransactionHistory_WithMethod(string subCode, string expectedResult)
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            model[0].SubCode = subCode;

            // Act
            result = model.MapTransactions(result);

            // Assert
            Assert.Equal(expectedResult, result.TransactionHistory[0].Method);
        }
Пример #6
0
        public void MapTransactions_ShouldReturnTransactionHistory_WithEmptyTransactionList(string type)
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            model[0].TranType = type;

            // Act
            result = model.MapTransactions(result);

            // Assert
            Assert.Empty(result.TransactionHistory);
        }
Пример #7
0
        public void MapTransactions_ShouldReturnTransactionHistory_WithAmount(string amount, string expectedResult)
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            model[0].Amount = amount;

            // Act
            result = model.MapTransactions(result);

            // Assert
            Assert.Equal(decimal.Parse(expectedResult), result.TransactionHistory[0].Amount);
        }
Пример #8
0
        public void MapTransactions_ShouldReturnTransactionHistory_WithDescription(string type, string expectedResult)
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            model[0].TranType = type;

            // Act
            result = model.MapTransactions(result);

            // Assert
            Assert.Equal(expectedResult, result.TransactionHistory[0].Description);
        }
Пример #9
0
        public void MapCurrentProperty_ShouldReturnModel()
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            // Act
            result = model.MapCurrentProperty(result);

            // Assert
            Assert.Null(result.LiabilityPeriodStart);
            Assert.Null(result.LiabilityPeriodEnd);
            Assert.Equal("test", result.TaxBand);
            Assert.Equal("address1, address2", result.Property);
        }
        public async Task <CouncilTaxDetailsModel> GetCouncilTaxDetails(
            string personReference,
            string accountReference,
            int year)
        {
            var key           = $"{personReference}-{accountReference}-{year}-{CacheKeys.CouncilTaxDetails}";
            var cacheResponse = await _cacheProvider.GetStringAsync(key);

            if (!string.IsNullOrEmpty(cacheResponse))
            {
                var cachedResponse = JsonConvert.DeserializeObject <CouncilTaxDetailsModel>(cacheResponse);
                return(cachedResponse);
            }

            var model = new CouncilTaxDetailsModel();

            var accountResponse = await _gateway.GetAccount(personReference, accountReference);

            model = accountResponse.Parse <CouncilTaxAccountResponse>().ResponseContent.MapAccount(model, year);

            var accountsResponse = await _gateway.GetAccounts(personReference);

            model = accountsResponse.Parse <List <CtaxActDetails> >().ResponseContent.MapAccounts(model);

            var transactionsResponse = await _gateway.GetAllTransactionsForYear(personReference, accountReference, year);

            model = transactionsResponse.Parse <List <Transaction> >().ResponseContent.MapTransactions(model);

            var paymentResponse = await _gateway.GetPaymentSchedule(personReference, year);

            model = paymentResponse.Parse <List <Installment> >().ResponseContent.MapPayments(model);

            var currentPropertyResponse = await _gateway.GetCurrentProperty(personReference, accountReference);

            model = currentPropertyResponse.Parse <Place>().ResponseContent.MapCurrentProperty(model);

            var documentsResponse = await _gateway.GetDocuments(personReference);

            model = documentsResponse.Parse <List <CouncilTaxDocumentReference> >().ResponseContent.DocumentsMapper(model, year);

            var isBenefitsResponse = await _gateway.IsBenefitsClaimant(personReference);

            model.HasBenefits = isBenefitsResponse.Parse <bool>().ResponseContent;

            _ = _cacheProvider.SetStringAsync(key, JsonConvert.SerializeObject(model));

            return(model);
        }
        public void MapPayments_ShouldReturnModel()
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            // Act
            result = _model.InstallmentList.MapPayments(result);

            // Assert
            Assert.Equal(DateTime.Parse("12-01-2019"), result.UpcomingPayments[0].Date);
            Assert.Equal(60.00M, result.UpcomingPayments[0].Amount);
            Assert.False(result.UpcomingPayments[0].IsDirectDebit);
            Assert.Equal(DateTime.Parse("12-12-2018"), result.UpcomingPayments[1].Date);
            Assert.Equal(100.00M, result.UpcomingPayments[1].Amount);
            Assert.True(result.UpcomingPayments[1].IsDirectDebit);
        }
Пример #12
0
        public void MapAccount_ShouldReturnMappedAccountFinalNoticeAndClosedWithPaymentSummary()
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            model.FinancialDetails.YearTotals[0].YearSummaries = new List <YearSummaryResponse>
            {
                new YearSummaryResponse
                {
                    Stage = new StageResponse
                    {
                        StageCode = "test",
                        StageDate = "12-12-2018"
                    },
                    NextPayment = new PaymentSummaryResponse
                    {
                        NextPaymentDate   = "12-12-2018",
                        NextPaymentAmount = 80.00M
                    }
                }
            };
            model.CtxActClosed = "TRUE";

            // Act
            result = model.MapAccount(result, 2018);
            var actualYearTotals = result.YearTotals.ToList();

            // Assert
            Assert.Equal("Direct Debit", result.PaymentMethod);
            Assert.True(result.IsDirectDebitCustomer);
            Assert.Equal(120M, result.AmountOwing);
            Assert.Equal(2018, actualYearTotals[0].TaxYear);
            Assert.Equal("123", result.Reference);
            Assert.Equal(80.00M, result.PaymentSummary.NextPaymentAmount);
            Assert.Equal("12-12-2018", result.PaymentSummary.NextPaymentDate);
            Assert.Equal("5678", result.AccountNumber);
            Assert.Equal("testName", result.AccountName);
            Assert.True(result.IsFinalNotice);
            Assert.True(result.IsClosed);
        }
Пример #13
0
        public void MapAccount_ShouldReturnMappedAccount()
        {
            // Arrange
            var result = new CouncilTaxDetailsModel();

            // Act
            result = model.MapAccount(result, 2018);
            var actualYearTotals = result.YearTotals.ToList();

            // Assert
            Assert.Equal("Direct Debit", result.PaymentMethod);
            Assert.True(result.IsDirectDebitCustomer);
            Assert.Equal(120M, result.AmountOwing);
            Assert.Equal(2018, actualYearTotals[0].TaxYear);
            Assert.Equal("123", result.Reference);
            Assert.Equal(0.00M, result.PaymentSummary.NextPaymentAmount);
            Assert.Null(result.PaymentSummary.NextPaymentDate);
            Assert.Equal("5678", result.AccountNumber);
            Assert.Equal("testName", result.AccountName);
            Assert.False(result.IsFinalNotice);
            Assert.False(result.IsClosed);
        }
        public async Task <CouncilTaxDetailsModel> GetBaseCouncilTaxAccount(string personReference)
        {
            var key           = $"{personReference}-{DateTime.Now.Year}-{CacheKeys.CouncilTaxDetails}";
            var cacheResponse = await _cacheProvider.GetStringAsync(key);

            if (!string.IsNullOrEmpty(cacheResponse))
            {
                var cachedResponse = JsonConvert.DeserializeObject <CouncilTaxDetailsModel>(cacheResponse);
                return(cachedResponse);
            }

            var accountsResponse = await _gateway.GetAccounts(personReference);

            var model = new CouncilTaxDetailsModel();

            model = accountsResponse.Parse <List <CtaxActDetails> >().ResponseContent.MapAccounts(model);
            var account = await _gateway.GetAccount(personReference, model.Accounts.FirstOrDefault(_ => _.Status == "CURRENT").Reference);

            model = account.Parse <CouncilTaxAccountResponse>().ResponseContent.MapAccount(model, DateTime.Now.Year);

            _ = _cacheProvider.SetStringAsync(key, JsonConvert.SerializeObject(model));

            return(model);
        }