protected void PrepareTransactionForCreate(BaseValueSegmentTransaction baseValueSegmentTransaction, bool keepBaseValueSegmentReference) { baseValueSegmentTransaction.Id = 0; if (!keepBaseValueSegmentReference) { baseValueSegmentTransaction.BaseValueSegmentId = 0; } foreach (var baseValueSegmentOwner in baseValueSegmentTransaction.BaseValueSegmentOwners) { baseValueSegmentOwner.Id = 0; baseValueSegmentOwner.BaseValueSegmentTransactionId = 0; } foreach (var baseValueSegmentValueHeader in baseValueSegmentTransaction.BaseValueSegmentValueHeaders) { baseValueSegmentValueHeader.Id = 0; baseValueSegmentValueHeader.BaseValueSegmentTransactionId = 0; foreach (var baseValueSegmentValue in baseValueSegmentValueHeader.BaseValueSegmentValues) { baseValueSegmentValue.Id = 0; baseValueSegmentValue.BaseValueSegmentValueHeaderId = 0; } } }
public void GetBaseValueSegmentEventsByRevenueObjectId_MatchId_ValidateSortOrder() { //BVS Events shoulld be returned in Descending order based on AsOf Date // //Add another BVS with today's date. This BVS should be the first in returned listed // var testBvs = new Models.V1.BaseValueSegment { Id = BvsId - 1, AsOf = DateTime.Now, TransactionId = 0, RevenueObjectId = RevObjId, DynCalcInstanceId = 0, BaseValueSegmentTransactions = new List <BaseValueSegmentTransaction>() }; var testBvsTrans = new BaseValueSegmentTransaction { Id = BvsTranId + 1, BaseValueSegmentId = BvsId - 1, TransactionId = 0, EffectiveStatus = "A", BaseValueSegmentTransactionTypeId = 2, DynCalcStepTrackingId = -100, BaseValueSegmentOwners = new List <BaseValueSegmentOwner>(), BaseValueSegmentValueHeaders = new List <BaseValueSegmentValueHeader>() }; var testBvsOwner = new BaseValueSegmentOwner { Id = BvsOwnerId + 1, BaseValueSegmentTransactionId = BvsTranId - 1, LegalPartyRoleId = 0, BeneficialInterestPercent = 50, DynCalcStepTrackingId = 0, GRMEventId = EventId + 1, BaseValueSegmentOwnerValueValues = new List <BaseValueSegmentOwnerValue>() }; testBvsTrans.BaseValueSegmentOwners.Add(testBvsOwner); testBvs.BaseValueSegmentTransactions.Add(testBvsTrans); _context.BaseValueSegments.Add(testBvs); _context.SaveChanges(); IBaseValueSegmentRepository baseValueSegmentRepository = new BaseValueSegmentRepository(_context); var baseValueSegmentEvents = baseValueSegmentRepository.GetBvsEventsByRevenueObjectId(RevObjId).ToList(); baseValueSegmentEvents.Count.ShouldBeGreaterThan(1); DateTime date1 = baseValueSegmentEvents.First().BvsAsOf; DateTime date2 = baseValueSegmentEvents.Last().BvsAsOf; date1.ShouldBeGreaterThan(date2); }
public void GetBaseValueSegment_MatchesId_ValidateNoInactiveBvsTransactions() { IBaseValueSegmentRepository baseValueSegmentRepository = new BaseValueSegmentRepository(_context); var baseValueSegment = baseValueSegmentRepository.Get(BvsId); int bvsTransCount = baseValueSegment.BaseValueSegmentTransactions.Count; //Add an Active Transaction var testBvsTrans = new BaseValueSegmentTransaction { Id = BvsTranId + 1, BaseValueSegmentId = BvsId, TransactionId = 0, EffectiveStatus = "A", BaseValueSegmentTransactionTypeId = 2, DynCalcStepTrackingId = -100, BaseValueSegmentOwners = new List <BaseValueSegmentOwner>(), BaseValueSegmentValueHeaders = new List <BaseValueSegmentValueHeader>() }; _context.BaseValueSegmentTransactions.Add(testBvsTrans); _context.SaveChanges(); baseValueSegment = baseValueSegmentRepository.Get(BvsId); int updatedBvsTransCount = baseValueSegment.BaseValueSegmentTransactions.Count; bvsTransCount.ShouldBeLessThan(updatedBvsTransCount); //Add an Inactive Transaction testBvsTrans = new BaseValueSegmentTransaction { Id = BvsTranId + 2, BaseValueSegmentId = BvsId, TransactionId = 0, EffectiveStatus = "A", BaseValueSegmentTransactionTypeId = UserDeletedTransactionId(), DynCalcStepTrackingId = -100, BaseValueSegmentOwners = new List <BaseValueSegmentOwner>(), BaseValueSegmentValueHeaders = new List <BaseValueSegmentValueHeader>() }; _context.BaseValueSegmentTransactions.Add(testBvsTrans); _context.SaveChanges(); baseValueSegment = baseValueSegmentRepository.Get(BvsId); int newBvsTransCount = baseValueSegment.BaseValueSegmentTransactions.Count; updatedBvsTransCount.ShouldBe(newBvsTransCount); }
public async Task CreateAsync(BaseValueSegmentTransaction baseValueSegmentTransaction, IEnumerable <BaseValueSegmentOwnerValue> baseValueSegmentOwnerValuesList) { using (var transaction = await _baseValueSegmentQueryContext.Database.BeginTransactionAsync()) { try { await _baseValueSegmentQueryContext.BaseValueSegmentTransactions.AddAsync(baseValueSegmentTransaction); await _baseValueSegmentQueryContext.SaveChangesAsync(); var baseValueSegmentOwnerValues = baseValueSegmentOwnerValuesList.ToList(); if (baseValueSegmentOwnerValues.Count > 0) { baseValueSegmentOwnerValues.ForEach(x => { if (x.Header == null) { // This allows us to determine in the DTO that was submitted. throw new NullReferenceException($"Header cannot be set for Base Value Segment Owner with Id: {x.Id}"); } x.Id = 0; x.BaseValueSegmentOwnerId = x.Owner.Id; x.BaseValueSegmentValueHeaderId = x.Header.Id; }); await _baseValueSegmentQueryContext.BaseValueSegmentOwnerValues.AddRangeAsync(baseValueSegmentOwnerValues); await _baseValueSegmentQueryContext.SaveChangesAsync(); } transaction.Commit(); } catch { transaction.Rollback(); throw; } } }
public static BaseValueSegmentTransactionDto ToDomain(this BaseValueSegmentTransaction bvsTransaction) { return(Mapper.Map <BaseValueSegmentTransactionDto>(bvsTransaction)); }
protected void DiscoverOwnerValuesForSavingInTransaction(Func <BaseValueSegmentTransactionType> getUserType, Func <BaseValueSegmentTransactionType> getUserDeletedType, BaseValueSegmentTransaction baseValueSegmentTransaction, List <BaseValueSegmentOwnerValue> baseValueSegmentOwnerValues) { // if we are explicitly trying to save a UserDeleted Tran, do NOT change it to user var userDeletedTransactionType = getUserDeletedType(); if (baseValueSegmentTransaction.BaseValueSegmentTransactionTypeId == userDeletedTransactionType.Id) { baseValueSegmentTransaction.BaseValueSegmentTransactionType = userDeletedTransactionType; baseValueSegmentTransaction.BaseValueSegmentTransactionTypeId = userDeletedTransactionType.Id; } else { var userTransactionType = getUserType(); baseValueSegmentTransaction.BaseValueSegmentTransactionType = userTransactionType; baseValueSegmentTransaction.BaseValueSegmentTransactionTypeId = userTransactionType.Id; } foreach (var baseValueSegmentOwner in baseValueSegmentTransaction.BaseValueSegmentOwners) { // We are clearing out BaseValueSegmentOwnerValues because it needs a relationship from both // the header and the owner. However, both distint parents are not yet created. This causes // an issue when saving because EF does not know how to persist this kind of relationship. var list = baseValueSegmentOwner.BaseValueSegmentOwnerValueValues .Where(x => baseValueSegmentOwnerValues.All(y => y.Id != x.Id || y.Id == 0)).ToList(); // Prevent duplicates. if (list.Count > 0) { // Store a reference to owner who is about to be persisted. list.ForEach(x => x.Owner = baseValueSegmentOwner); } // Clear out of the list as planned so EF wouldn't deal with it yet. baseValueSegmentOwner.BaseValueSegmentOwnerValueValues.Clear(); if (list.Count > 0) { // Here, we are trying to find a matching header to set in each basevaluesegmentownervalue. list.ForEach(x => { foreach (var baseValueSegmentValueHeader in baseValueSegmentTransaction.BaseValueSegmentValueHeaders) { if (baseValueSegmentValueHeader.BaseValueSegmentOwnerValues.Any(y => y.Id == x.Id)) { x.Header = baseValueSegmentValueHeader; break; } } }); baseValueSegmentOwnerValues.AddRange(list); } } foreach (var baseValueSegmentValueHeader in baseValueSegmentTransaction.BaseValueSegmentValueHeaders) { // Same reason as above. baseValueSegmentOwnerValues will be used to save. baseValueSegmentValueHeader.BaseValueSegmentOwnerValues.Clear(); } }
public BaseValueSegmentRepositoryTests() { var optionsBuilder = new DbContextOptionsBuilder <BaseValueSegmentQueryContext>(); optionsBuilder.UseInMemoryDatabase(Guid.NewGuid().ToString("N")); _context = new BaseValueSegmentQueryContext(optionsBuilder.Options); var baseValueSegmentTransaction = new BaseValueSegmentTransaction { Id = BvsTranId, BaseValueSegmentId = BvsId, TransactionId = 0, EffectiveStatus = "A", BaseValueSegmentTransactionTypeId = 2, DynCalcStepTrackingId = -100, BaseValueSegmentOwners = new List <BaseValueSegmentOwner>(), BaseValueSegmentValueHeaders = new List <BaseValueSegmentValueHeader>() }; var baseValueSegmentOwner = new BaseValueSegmentOwner { Id = BvsOwnerId, BaseValueSegmentTransactionId = BvsTranId, LegalPartyRoleId = 0, BeneficialInterestPercent = 50, DynCalcStepTrackingId = 0, GRMEventId = EventId, AlphaBVSOwnerId = null, BaseValueSegmentOwnerValueValues = new List <BaseValueSegmentOwnerValue>() }; var baseValueSegmentValueHeader = new BaseValueSegmentValueHeader { Id = BvsValueHeaderId, BaseValueSegmentTransactionId = BvsTranId, BaseYear = 2015, DynCalcStepTrackingId = 0, BaseValueSegmentValues = new List <BaseValueSegmentValue>() }; var baseValueSegmentValue = new BaseValueSegmentValue { Id = BvsValueId, BaseValueSegmentValueHeaderId = BvsValueHeaderId, SubComponent = 1, ValueAmount = 110000, PercentComplete = 75, FullValueAmount = 120000, DynCalcStepTrackingId = 0, }; var baseValueSegmentOwnerValue = new BaseValueSegmentOwnerValue { Id = BvsOwnerValueId, BaseValueSegmentOwnerId = BvsOwnerValueId, BaseValue = 100000, DynCalcStepTrackingId = 0, }; var baseValueSegment = new Models.V1.BaseValueSegment { Id = BvsId, AsOf = AssessmentEventDate, TransactionId = 0, RevenueObjectId = RevObjId, SequenceNumber = 1, DynCalcInstanceId = 0, DynCalcStepTrackingId = 0 }; baseValueSegmentOwner.BaseValueSegmentOwnerValueValues.Add(baseValueSegmentOwnerValue); baseValueSegmentValueHeader.BaseValueSegmentValues.Add(baseValueSegmentValue); baseValueSegmentTransaction.BaseValueSegmentOwners.Add(baseValueSegmentOwner); baseValueSegmentTransaction.BaseValueSegmentValueHeaders.Add(baseValueSegmentValueHeader); baseValueSegment.BaseValueSegmentTransactions.Add(baseValueSegmentTransaction); _context.Add(baseValueSegment); var userDeletedTransaction = new BaseValueSegmentTransactionType { Id = 1, Name = "User Deleted", Description = "User Deleted" }; _context.Add(userDeletedTransaction); var userTransactionType = new BaseValueSegmentTransactionType { Id = 2, Name = "User", Description = "User" }; _context.Add(userTransactionType); var beneficialInterestInfo = new BeneficialInterestInfo { LegalPartyId = 100, GrmEventId = 200, EventDate = new DateTime(2015, 1, 1), EventType = "Transfer", EffectiveDate = new DateTime(2015, 2, 1), DocNumber = "UnitTestDoc", DocType = "Deed", DocDate = new DateTime(2015, 3, 1), OwnerId = 300, OwnerName = "Unit Test Owner", LegalPartyRoleId = 400, BeneficialInterestPercentage = 50, PercentageInterestGain = 25 }; _context.Add(beneficialInterestInfo); _context.SaveChanges(); }