private async Task <BvsComponenDto> CreateReadBvsTransactionByComponents(DateTime assessmentEventDate, BaseValueSegmentDto baseValueSegmentDto, int assessmentEventType) { var bvsDto = new BvsComponenDto { Source = baseValueSegmentDto }; // get the events defined for the this bvs based on the SubComponentand revenue object var events = (await _grmEventDomain.GetValueHeaderGrmEvents(baseValueSegmentDto)).ToList(); var conclusionHeaderEvents = _baseValueSegmentRepository.GetConclusionsData(baseValueSegmentDto.RevenueObjectId, baseValueSegmentDto.AsOf).Result; foreach (var grmEvent in events) { var conclusionEvent = conclusionHeaderEvents.FirstOrDefault(conclusion => conclusion.GrmEventId == grmEvent.GrmEventId); if (conclusionEvent != null) { grmEvent.EventType = conclusionEvent.Description; } } events.PopulateEvent(bvsDto); // take the first transaction for the bvs var firstTransaction = baseValueSegmentDto.FirstTransaction(); bvsDto.Components = CreateComponents(firstTransaction, events, baseValueSegmentDto.AsOf, baseValueSegmentDto.RevenueObjectId, assessmentEventDate, assessmentEventType); bvsDto.ValueHeaders = GetBaseValueSegmentHeaderEvents(baseValueSegmentDto, firstTransaction); bvsDto.BaseValueSegmentTransactionTypeDescription = firstTransaction.BaseValueSegmentTransactionType.Description; // get the legal parties and document information associated to base value segment var legalPartyRoleDocuments = (await _legalPartyDomain.GetLegalPartyRoleDocuments(baseValueSegmentDto)).ToList(); bvsDto.Owners = firstTransaction.BaseValueSegmentOwners.ToList().Select(bvsOwner => { var doc = legalPartyRoleDocuments.First(d => d.LegalPartyRoleId == bvsOwner.LegalPartyRoleId); // We are only populating 3 fields for the sub components because only the 3 fields are used for // determing what's the base value, market values for each BI based on the ordering of these 3 // fields. These values are used to reallocate base values/ market values if they are changed by // the user in the UI. return(new OwnerDto { // We must have an Owner Id. // ReSharper disable once PossibleInvalidOperationException OwnerId = bvsOwner.Id.Value, BeneficialInterest = doc.LegalPartyDisplayName, BiPercentage = bvsOwner.BeneficialInterestPercent }); }).ToArray(); return(bvsDto); }
private HeaderValue[] GetBaseValueSegmentHeaderEvents(BaseValueSegmentDto baseValueSegmentDto, BaseValueSegmentTransactionDto transaction) { var headerRelatedEvents = _grmEventDomain.GetValueHeaderGrmEvents(baseValueSegmentDto).Result.ToArray(); var conclusionHeaderEvents = _baseValueSegmentRepository.GetConclusionsData(baseValueSegmentDto.RevenueObjectId, baseValueSegmentDto.AsOf).Result.ToList(); var valueHeaders = new List <HeaderValue>(); foreach (var baseValueSegmentValueHeaderDto in transaction.BaseValueSegmentValueHeaders) { var headerRelatedEvent = headerRelatedEvents.Single(he => he.GrmEventId == baseValueSegmentValueHeaderDto.GRMEventId); BaseValueSegmentConclusionDto conclusionEvent = null; if (conclusionHeaderEvents.Count > 0) { conclusionEvent = conclusionHeaderEvents.FirstOrDefault(conclusion => conclusion.GrmEventId == headerRelatedEvent.GrmEventId); } var headerValue = new HeaderValue { HeaderValueId = baseValueSegmentValueHeaderDto.Id, GrmEventId = headerRelatedEvent.GrmEventId, DisplayName = headerRelatedEvent.EventType + " " + headerRelatedEvent.EffectiveDate.Year, BaseYear = baseValueSegmentValueHeaderDto.BaseYear, EventDate = headerRelatedEvent.EventDate, EventType = headerRelatedEvent.EventType, EffectiveDate = headerRelatedEvent.EffectiveDate }; if (conclusionEvent != null) { headerValue.DisplayName = conclusionEvent.Description + " " + conclusionEvent.ConclusionDate.Year; headerValue.EventType = conclusionEvent.Description; } valueHeaders.Add(headerValue); } return(valueHeaders.OrderByDescending(vh => vh.BaseYear).ToArray()); }