public IEnumerable <HistoryItem> Assemble(ClarifyGeneric actEntryGeneric, IDictionary <int, ActEntryTemplate> templatesByCode, HistoryRequest historyRequest)
        {
            actEntryGeneric.DataFields.AddRange("act_code", "entry_time", "addnl_info", "proxy");

            if (!historyRequest.ShowAllActivities)
            {
                var activeCodes = templatesByCode.Values.Where(t => !t.IsVerbose).Select(d => d.Code).ToArray();
                actEntryGeneric.Filter(f => f.IsIn("act_code", activeCodes));
            }

            //adding related generics expected by any fancy act entry templates
            var templateRelatedGenerics = traverseRelatedGenerics(actEntryGeneric, templatesByCode);

            _employeeAssembler.TraverseEmployee(actEntryGeneric);
            _contactAssembler.TraverseContact(actEntryGeneric);
            if (historyRequest.HistoryItemLimit.HasValue)
            {
                actEntryGeneric.MaximumRows = historyRequest.HistoryItemLimit.Value;
            }
            actEntryGeneric.Query();

            var actEntryDTOS = actEntryGeneric.DataRows().Select(actEntryRecord =>
            {
                var id = historyRequest.WorkflowObject.Id;
                if (historyRequest.WorkflowObject.IsChild)
                {
                    //child objects are loaded in bulk so historyRequest.WorkflowObject.Id is not the correct id
                    //find the act_entry's parent generic id field value
                    var info      = WorkflowObjectInfo.GetObjectInfo(actEntryGeneric.ParentRelation.TargetName);
                    var parentId  = actEntryRecord.AsInt(actEntryGeneric.ParentRelation.Name);
                    var parentRow = actEntryGeneric.ParentGeneric.DataRows().First(r => r.DatabaseIdentifier() == parentId);
                    id            = (info.HasIDFieldName) ? parentRow[info.IDFieldName].ToString() : Convert.ToString(parentRow.DatabaseIdentifier());
                }

                var code = actEntryRecord.AsInt("act_code");

                return(new ActEntry
                {
                    Id = id,
                    Type = historyRequest.WorkflowObject.Type,
                    Template = findTemplateByActCode(code, templatesByCode),
                    When = actEntryRecord.AsDateTime("entry_time"),
                    Who = _employeeAssembler.Assemble(actEntryRecord, _contactAssembler),
                    ImpersonatedBy = _employeeAssembler.Assemble(actEntryRecord),
                    AdditionalInfo = actEntryRecord.AsString("addnl_info"),
                    ActEntryRecord = actEntryRecord
                });
            }).Where(_ => !_.Template.IsCancelled).ToList();

            return(actEntryDTOS
                   .Select(dto => createActivityDTOFromMapper(dto, templateRelatedGenerics))
                   .Where(i => !i.IsCancelled)
                   .Where(_ => historyRequest.ShowAllActivities || !_.IsVerbose)
                   .ToList());
        }