using BuddyFinance.Integration.Models.Enums; using BuddyFinance.Integration.Models.Statements; using BuddyFinance.Integration.Models.Transactions; using System; using System.Collections.Generic; using System.Linq; namespace BuddyFinance.Integration { public class TransactionsIntegrator : BaseIntegrator { public GetTransactionsResult GetTransactions(int profileId) { try { using (var db = new BuddyFinance.Model.BuddyFinanceDBEntities()) { var transactions = db.Transactions.Where(i => i.ProfileId == profileId) .OrderByDescending(i => i.TransactionDate) .ToList(); var result = !transactions.Any() ? new List() : transactions.ConvertAll(t => new Transaction { TransactionId = t.Id, ProfileId = t.ProfileId, ProfileTypeId = t.ProfileTypeId, Amount = t.Amount, Description = t.Description, Reference = t.Reference, TransactionDate = t.TransactionDate, TransactionTypeId = t.TransactionTypeId, TransactionType = new BuddyFinance.Integration.Models.Transactions.TransactionType { Id = t.TransactionType.Id, Description = t.TransactionType.Description }, TransactionStatusId = t.TransactionStatusId, //Status = new Models.Status //{ // Id = t.TransactionStatus.Id, // Description = t.TransactionStatus.Description //}, TransactionFees = t.TransactionFees.Select(f => new TransactionFee { FeeAmount = f.FeeAmount, FeeTypeName = f.FeeType.Description, FeeTypeId = f.FeeTypeId, TransactionFeeId = f.Id, TransactionId = f.TransactionId }).ToList() }); //if (transactions.Any()) //{ // .ToList(); return new GetTransactionsResult { Result = result.ToList(), ErrorCode = (int)ResponseCodes.Success, ErrorMessage = "Successful" }; //} //else //{ // return new GetTransactionsResult // { // ErrorCode = (int)ResponseCodes.NotFound, // ErrorMessage = "Not Found" // }; //} } } catch (Exception ex) { return new GetTransactionsResult { ErrorCode = (int)ResponseCodes.Exception, ErrorMessage = "An error has occurred. Exception => " + ex.Message }; } } public GetTransactionsResult GetTransactionsByLoanId(int loanId) { try { using (var db = new Model.BuddyFinanceDBEntities()) { var transactions = db.Transactions.Where(m => m.LoanId == loanId) .OrderByDescending(i => i.TransactionDate) .ToList(); var result = !transactions.Any() ? new List() : transactions.ConvertAll(t => new Transaction { TransactionId = t.Id, ProfileId = t.ProfileId, ProfileTypeId = t.ProfileTypeId, Amount = t.Amount, Description = t.Description, Reference = t.Reference, TransactionDate = t.TransactionDate, TransactionTypeId = t.TransactionTypeId, TransactionType = new TransactionType { Id = t.TransactionType.Id, Description = t.TransactionType.Description }, TransactionStatusId = t.TransactionStatusId, TransactionFees = t.TransactionFees.Select(f => new TransactionFee { FeeAmount = f.FeeAmount, FeeTypeName = f.FeeType.Description, FeeTypeId = f.FeeTypeId, TransactionFeeId = f.Id, TransactionId = f.TransactionId }).ToList() }); return new GetTransactionsResult { Result = result.OrderByDescending(m => m.TransactionDate).ToList(), ErrorCode = (int)ResponseCodes.Success, ErrorMessage = "Successful" }; } } catch (Exception ex) { return new GetTransactionsResult { ErrorCode = (int)ResponseCodes.Exception, ErrorMessage = "An error has occurred. Exception => " + ex.Message }; } } public GetTransactionResult GetTransaction(int transactionId) { var getTransactionResult = new GetTransactionResult(); try { using (var db = new BuddyFinance.Model.BuddyFinanceDBEntities()) { var results = db.Transactions.FirstOrDefault(k => k.Id == transactionId); if (results != null) { getTransactionResult.ErrorCode = (int)ResponseCodes.Success; getTransactionResult.ErrorMessage = "Success"; getTransactionResult.Result = new Transaction { TransactionId = results.Id, ProfileId = results.ProfileId, ProfileTypeId = results.ProfileTypeId, Amount = results.Amount, Description = results.Description, Reference = results.Reference, TransactionDate = results.TransactionDate, TransactionTypeId = results.TransactionTypeId, TransactionType = new TransactionType { Id = results.TransactionType.Id, Description = results.TransactionType.Description }, TransactionStatusId = results.TransactionStatusId, TransactionFees = results.TransactionFees.Select(f => new TransactionFee { FeeAmount = f.FeeAmount, FeeTypeName = f.FeeType.Description, FeeTypeId = f.FeeTypeId, TransactionFeeId = f.Id, TransactionId = f.TransactionId }).ToList() }; } else { getTransactionResult.ErrorCode = (int)ResponseCodes.NotFound; getTransactionResult.ErrorMessage = "Not found"; } } } catch (Exception ex) { getTransactionResult.ErrorCode = (int)ResponseCodes.Exception; getTransactionResult.ErrorMessage = "An error has occurred. Exception => " + ex.Message; } return getTransactionResult; } public SaveTransactionResult SaveTransaction(Transaction transaction) { var saveTransactionResult = new SaveTransactionResult(); try { using (var db = new BuddyFinance.Model.BuddyFinanceDBEntities()) { var transaction_ = new BuddyFinance.Model.Transaction { //Id = transaction.TransactionId, ProfileId = transaction.ProfileId, ProfileTypeId = transaction.ProfileTypeId, TransactionDate = transaction.TransactionDate, Description = transaction.Description, Reference = transaction.Reference, TransactionTypeId = transaction.TransactionTypeId, //TransactionTypeId = (int)TransactionTypeEnum.Debit, Amount = transaction.Amount, TransactionStatusId = (int)TransactionStatusEnum.Success, }; // db.SaveChanges(); if (transaction.TransactionFees != null && transaction.TransactionFees.Any()) { transaction_.TransactionFees = transaction.TransactionFees.ConvertAll(m => new BuddyFinance.Model.TransactionFee { Id = m.TransactionFeeId, TransactionId = m.TransactionId, FeeAmount = m.FeeAmount, FeeTypeId = m.FeeTypeId, //FeeTypeName = m.FeeTypeName, }); } db.Transactions.Add(transaction_); db.SaveChanges(); saveTransactionResult.Result = transaction_.Id; saveTransactionResult.ErrorCode = (int)ResponseCodes.Success; saveTransactionResult.ErrorMessage = "Success"; } } catch (Exception ex) { saveTransactionResult.ErrorCode = (int)ResponseCodes.Exception; saveTransactionResult.ErrorMessage = ex.Message; } return saveTransactionResult; } public GetTransactionsbyDate GetStatement(GetStatement statement) { try { using (var db = new BuddyFinance.Model.BuddyFinanceDBEntities()) { var transactions = db.Transactions.Where(i => i.ProfileId == statement.ProfileId).ToList(); transactions = transactions.Where(i => i.TransactionDate >= statement.StartDate && i.TransactionDate <= statement.EndDate) .OrderByDescending(i => i.TransactionDate) .ToList(); if (transactions.Any()) { var result = transactions.Select(t => new Transaction { TransactionId = t.Id, ProfileId = t.ProfileId, ProfileTypeId = t.ProfileTypeId, Amount = t.Amount, Description = t.Description, Reference = t.Reference, TransactionDate = t.TransactionDate, TransactionTypeId = t.TransactionTypeId, TransactionType = new TransactionType { Id = t.TransactionType.Id, Description = t.TransactionType.Description }, TransactionFees = t.TransactionFees.Select(f => new TransactionFee { FeeAmount = f.FeeAmount, FeeTypeName = f.FeeType.Description, FeeTypeId = f.FeeTypeId, TransactionFeeId = f.Id, TransactionId = f.TransactionId }).ToList() }).ToList(); return new GetTransactionsbyDate { Result = result, ErrorCode = (int)ResponseCodes.Success, ErrorMessage = "Successful" }; } else { return new GetTransactionsbyDate { Result = null, ErrorMessage = "No Transaction" }; } } } catch (Exception ex) { return new GetTransactionsbyDate { ErrorCode = (int)ResponseCodes.Exception, ErrorMessage = "An error has occurred. Exception => " + ex.Message }; } } } }