public void GetActionsReportInScreen_Bug_25919() { var section = Entity.Get <NavSection>("test:25919_section"); var workflow = Entity.Get <Workflow>("test:25919_workflow"); var report = Entity.Get <ReadiNow.Model.Report>("test:25919_report"); var screen = Entity.Get <StructureControlOnForm>("test:25919_screen"); section.Should().NotBeNull("Section should exist in Test Solution."); workflow.Should().NotBeNull("Workflow should exist in Test Solution."); report.Should().NotBeNull("Report should exist in Test Solution."); screen.Should().NotBeNull("Screen should exist in Test Solution."); screen.ContainedControlsOnForm.Should().NotBeNull().And.NotBeEmpty(); screen.ContainedControlsOnForm.Count.Should().Be(1); var ctrl = screen.ContainedControlsOnForm.First(); var aaronWitte = Entity.Get("test:aaronWitte"); aaronWitte.Should().NotBeNull("AAAAAAAAAAAAAAARRROOOOOOOOOOOONNNN!!!!"); var svc = new ActionService(); svc.FlushCaches(); var request1 = new ActionRequestExtended { LastSelectedResourceId = aaronWitte.Id, SelectedResourceIds = new[] { aaronWitte.Id }, ReportId = report.Id }; var result1 = svc.GetActions(request1); result1.Should().NotBeNull(); result1.Actions.Should().NotBeNull().And.NotBeEmpty(); result1.Actions.Count(a => a.Name == "Log Test Person").Should().Be(1); var request2 = new ActionRequestExtended { LastSelectedResourceId = aaronWitte.Id, SelectedResourceIds = new [] { aaronWitte.Id }, ReportId = report.Id, HostResourceIds = new [] { ctrl.Id } }; var result2 = svc.GetActions(request2); result2.Should().NotBeNull(); result2.Actions.Should().NotBeNull().And.NotBeEmpty(); result2.Actions.Count.Should().Be(result1.Actions.Count - 1); result2.Actions.Count(a => a.Name == "Log Test Person").Should().Be(0); }
public PartialViewResult GetActionsView(long uri, bool vertical) { var hvm = new ActionsViewModel(); if (AppUserState == null || AppUserState.Connected == false) { return(null); } var conn = new InforConnection(tu: _tu, tup: _tup); var rec = (InforRecord)conn.GetRecordWeb(uri, AppUserState.UserName, AppUserState.Wgs, AppUserState.Ds); hvm.Actions = ActionService.GetActions(AppUserState.Wgs, AppUserState.Ds, AppUserState.UserName, uri); hvm.RecordNumber = rec.RecordNumber; var firstOrDefault = hvm.Actions.FirstOrDefault(ac => ac.Status == InforActionStatus.Current); if (firstOrDefault != null) { hvm.CurrentActionUri = firstOrDefault.Uri; } hvm.RecordUri = rec.Uri; hvm.Title = rec.Title; hvm.VerticalView = vertical; hvm.CanAddActions = rec.CanAddActions; return(PartialView("_Actions", hvm)); }
public void GetActionsSingleSelectedResource( ) { // arrange var resource = Entity.Create <Resource>(); resource.Save( ); var request = new ActionRequestExtended { LastSelectedResourceId = resource.Id, SelectedResourceIds = new[] { resource.Id } }; var svc = new ActionService( ); svc.FlushCaches(); // act var result = svc.GetActions(request); // assert result.Should().NotBeNull(); request.SelectedResources.Should().NotBeNull().And.NotBeEmpty(); request.SelectedResources.Count().Should().Be(1); request.SelectedResources.Should().Contain(r => r.Id == resource.Id); request.LastSelectedResource.Id.Should().Be(resource.Id); request.SelectedResourceTypes.Should().NotBeNull().And.NotBeEmpty(); foreach (EntityType t in resource.EntityTypes) { var type = request.SelectedResourceTypes.FirstOrDefault(a => a.Id == t.Id); type.Should().NotBeNull(); if (type == null) { continue; } type.Alias.Should().Be(t.Alias); type.TenantId.Should().Be(t.TenantId); } result.Actions.Should().NotBeNull(); RemovePowerTools(result); result.Actions.Count.Should().Be(3); result.Actions[0].Name.Should().Be("View 'Resource'"); // View result.Actions[0].Order.Should().Be(10); result.Actions[1].Name.Should().Be("Edit 'Resource'"); // Edit result.Actions[1].Order.Should().Be(20); result.Actions[2].Name.Should().Be("Delete 'Resource'"); // Delete result.Actions[2].Order.Should().Be(30); }
public void GetActionsMultipleSelectedResources() { // arrange var resource1 = Entity.Create <Resource>(); var resource2 = Entity.Create <Resource>(); resource1.Save( ); resource2.Save( ); var svc = new ActionService( ); svc.FlushCaches(); var request = new ActionRequestExtended { LastSelectedResourceId = resource2.Id, SelectedResourceIds = new[] { resource1.Id, resource2.Id } }; // act var result = svc.GetActions(request); // assert result.Should().NotBeNull(); request.SelectedResources.Should().NotBeNull().And.NotBeEmpty(); request.SelectedResources.Count().Should().Be(2); request.SelectedResources.Should().Contain(r => r.Id == resource1.Id); request.SelectedResources.Should().Contain(r => r.Id == resource2.Id); request.LastSelectedResource.Should().NotBeNull(); request.SelectedResourceTypes.Should().NotBeNull().And.NotBeEmpty(); foreach (EntityType t in resource1.EntityTypes) { var type = request.SelectedResourceTypes.FirstOrDefault(a => a.Id == t.Id); type.Should().NotBeNull(); if (type == null) { continue; } type.Alias.Should().Be(t.Alias); type.TenantId.Should().Be(t.TenantId); } result.Actions.Should().NotBeNull(); result.Actions.Count.Should().Be(1); result.Actions[0].Name.Should().Be("Delete selected"); // Multi-delete result.Actions[0].Order.Should().Be(30); }
public void GetActionsEmptyRequest() { var entityMock = new Mock <IEntityRepository>(); entityMock .Setup(e => e.Get <Resource>(It.IsAny <IEnumerable <long> >())) .Returns(default(List <Resource>)); var svc = new ActionService { EntityModelHelper = entityMock.Object }; svc.FlushCaches(); svc.Invoking(s => s.GetActions(null)).ShouldThrow <ArgumentException>("The request object may not be null."); var request = svc.GetActions(new ActionRequestExtended()); request.Should().NotBeNull(); request.Actions.Should().NotBeNull().And.BeEmpty(); }
public void TestCreateAction() { //Arrange Guid id = Guid.NewGuid(); HubManPractices.Models.Action ToCreate = new HubManPractices.Models.Action() { ActionID = id, ActionName = "Terminate", Client = new Client() { ClientID = Guid.NewGuid(), ClientName = "Doha" }, Date = DateTime.Now }; //Act actionService.CreateAction(ToCreate); //Assert //Verifies the Action has been inserted Assert.AreEqual(id, actionService.GetById(id).ActionID); Assert.IsTrue(actionService.GetActions().Count() == 3); }
public void Test_GetActions(string reportKey, string selectName, string[] expectedActionKeys) { ActionResponse response; var testObject = SetupGrandDesign(); var request = new ActionRequestExtended(new ActionRequest { ReportId = testObject.Reports[reportKey].Id, ActionDisplayContext = ActionContext.All }); var svc = new ActionService(); svc.FlushCaches(); using (new SetUser(testObject.Accounts["administrator"])) { response = svc.GetActions(request); } response.Should().NotBeNull(); var expectedActions = testObject.Actions .Where(a => expectedActionKeys.Contains(a.Key)) .Select(a => a.Value) .Union(testObject.SelectActions(selectName) .Where(s => expectedActionKeys.Contains(s.Name))).ToList(); var actions = response.Actions.Where(a => !a.Name.StartsWith("Debug '")).ToList(); actions.ShouldAllBeEquivalentTo(expectedActions, options => options .Excluding(o => o.Id) .Excluding(o => o.EntityId) .Excluding(o => o.Alias) .Excluding(o => o.AdditionalData) .Excluding(o => o.RequiresPermissions) .Excluding(o => o.RequiresParentPermissions)); }
private ActionListViewModel CreateActionListModel(DateTime dateBegin, DateTime dateEnd, User selectedUser) { ActionListViewModel model = new ActionListViewModel(); model.DateBegin = dateBegin; model.DateEnd = dateEnd; //Для администратора заполняем список всеми экспертами //Для эксперта - только им. if (User.IsInRole(Roles.Admin)) { foreach (var user in UserService.GetExperts()) { model.Users.Add(user); } model.Users.Insert(0, mfc.domain.entities.User.All); } else { model.Users.Add(selectedUser); } //Пользователь, для данными которого заполняется список оказанных услуг //Если он не задан, то берем первого в списке if (selectedUser != null) { model.SelectedUserId = selectedUser.Id; foreach (var action in ActionService.GetActions(selectedUser, dateBegin, dateEnd)) { model.Actions.Add(action); } } return(model); }
public void Refresh(DateTime dateBegin, DateTime dateEnd, CustomerType customerType) { _data.Clear(); IEnumerable <ServiceAction> actions; var user = UserService.GetCurrentUser(); if (user.IsAdmin) { actions = ActionService.GetActions(dateBegin, dateEnd, customerType); } else { actions = ActionService.GetActions(user, dateBegin, dateEnd, customerType); } foreach (var action in actions) { if (action.Service == null || action.Type == null || action.Service.Organization == null || action.User == null || action.Service.Organization.Type == null) { continue; } Dictionary <Service, ReportSumRow> services = null; if (!_data.ContainsKey(action.Service.Organization.Type)) { services = new Dictionary <Service, ReportSumRow>(); _data.Add(action.Service.Organization.Type, services); } else { services = _data[action.Service.Organization.Type]; } ReportSumRow row = null; if (!services.ContainsKey(action.Service)) { row = new ReportSumRow { Service = action.Service }; services.Add(action.Service, row); } else { row = services[action.Service]; } var caption = action.Type.Caption.ToLower().Replace("ё", "e"); if (caption.Contains("прием")) { row.Priem += 1; } else if (caption.Contains("выдача")) { row.Vidacha += 1; } else if (caption.Contains("консул")) { row.Consult += 1; } else { throw new Exception(string.Format("Работа {0} не может быть обработана, поскольку ее тип отчетом не поддерживается", action.Type.Caption)); } } }
public void GetActionsWithExpressionItems() { // arrange var scientistType = Entity.GetByName <EntityType>("Scientist").First(); var bornField = scientistType.GetAllFields().FirstOrDefault(f => f.Name == "Born"); var scientist = Entity.Create(new EntityRef(scientistType)); scientist.SetField("core:name", "Alex Engelhardt"); scientist.SetField(new EntityRef(bornField), new DateTime(1977, 10, 24)); scientist.Save(); var alanTuring = Entity.GetByName <Resource>("Alan Turing").First(); alanTuring.Should().NotBeNull(); alanTuring.Id.Should().BeGreaterThan(0); var report = Entity.Create <ReadiNow.Model.Report>(); var sb = new ConsoleBehavior(); var am = new ActionMenu(); var a = new ActionMenuItem { Name = "Test '%Resource%' Action", EmptySelectName = "Test Expression Action", IsActionItem = true, IsActionButton = true, IsContextMenu = true, AppliesToSelection = true, ActionRequiresExpression = new ActionExpression { ActionExpressionString = "datediff(year, Born, [Alan].[Born]) = 0", ActionExpressionEntities = new EntityCollection <NamedReference> { new NamedReference { Name = "Alan", ReferencedEntity = alanTuring } } } }; am.MenuItems.Add(a); am.IncludeActionsAsButtons.Add(a); sb.BehaviorActionMenu = am; report.SelectionBehavior = sb; report.Save(); var svc = new ActionService(); svc.FlushCaches(); var request = new ActionRequestExtended { LastSelectedResourceId = scientist.Id, SelectedResourceIds = new[] { scientist.Id }, EntityTypeId = scientistType.Id, ReportId = report.Id, ReportBaseType = scientistType, HostResourceIds = new long[0] }; // act var result = svc.GetActions(request); // assert result.Should().NotBeNull(); result.Actions.Should().NotBeNull(); result.Actions.Count.Should().BeGreaterThan(0); var action = result.Actions.FirstOrDefault(i => i.Name == "Test 'Alex Engelhardt' Action"); action.Should().NotBeNull(); action.IsEnabled.Should().BeFalse(); action.EntityId.Should().Be(scientist.Id); request.LastSelectedResourceId = alanTuring.Id; request.SelectedResourceIds = new[] { alanTuring.Id }; var result2 = svc.GetActions(request); result2.Should().NotBeNull(); result2.Actions.Should().NotBeNull(); result2.Actions.Count.Should().BeGreaterThan(0); var action2 = result2.Actions.FirstOrDefault(i => i.Name == "Test 'Alan Turing' Action"); action2.Should().NotBeNull(); action2.IsEnabled.Should().BeTrue(); action2.EntityId.Should().Be(alanTuring.Id); }
public void GetActionsSuppressAllNewItems() { // arrange var testType1 = new EntityType { Name = "Test Type 1" }; testType1.Inherits.Add(Entity.Get <EntityType>("core:definition")); testType1.Save(); var testType2 = new EntityType { Name = "Test Type 2" }; testType2.Inherits.Add(testType1); testType2.Save(); var report = Entity.Create <ReadiNow.Model.Report>(); report.ReportUsesDefinition = testType1; report.Save(); var svc = new ActionService(); svc.FlushCaches(); var request = new ActionRequestExtended { ReportId = report.Id, ReportBaseType = report.ReportUsesDefinition, HostResourceIds = new long[0], ActionDisplayContext = ActionContext.ActionsMenu }; // act var result = svc.GetActions(request); // assert result.Should().NotBeNull(); result.Actions.Should().NotBeNull(); result.Actions.Count.Should().BeGreaterThan(0); var newMenu = result.Actions.FirstOrDefault(a => a.Name == "New"); newMenu.Should().NotBeNull(); newMenu.Children.Count.Should().Be(2); var t1 = newMenu.Children.FirstOrDefault(a => a.Name == "Test Type 1"); t1.Should().NotBeNull(); t1.IsNew.Should().BeTrue(); t1.HtmlActionMethod.Should().Be("navigate"); t1.HtmlActionState.Should().Be("createForm"); t1.EntityId.Should().Be(testType1.Id); var t2 = newMenu.Children.FirstOrDefault(a => a.Name == "Test Type 2"); t2.Should().NotBeNull(); t2.IsNew.Should().BeTrue(); t2.HtmlActionMethod.Should().Be("navigate"); t2.HtmlActionState.Should().Be("createForm"); t2.EntityId.Should().Be(testType2.Id); // suppress the news var rcb = new ConsoleBehavior(); var am = new ActionMenu { SuppressNewActions = true }; rcb.BehaviorActionMenu = am; report.ResourceConsoleBehavior = rcb; report.Save(); svc.FlushCaches(); var result2 = svc.GetActions(request); result2.Should().NotBeNull(); result2.Actions.Should().NotBeNull(); result2.Actions.Count.Should().BeGreaterThan(0); result2.Actions.Count(a => a.Name == "New").Should().Be(0); }
public void GetActionsWithReportOnTabControlInForm() { // arrange var resource = Entity.Create <Resource>(); var report = Entity.Create <ReadiNow.Model.Report>(); var testType1 = new EntityType { Name = "Test Type 1" }; var testType2 = new EntityType { Name = "Test Type 2" }; var testType1Form = new CustomEditForm { Name = "testType1Form", TypeToEditWithForm = testType1 }; var testType2Form = new CustomEditForm { Name = "testType2Form", TypeToEditWithForm = testType2 }; var tabControl = new TabRelationshipRenderControl { ResourceViewerConsoleForm = testType1Form }; // assign custom form to tab host control report.ResourceViewerConsoleForm = testType2Form; // assign custom form to the report tabControl.RelationshipDisplayReport = report; report.Save( ); resource.Save( ); testType1.Save( ); testType2.Save( ); testType1Form.Save( ); testType2Form.Save( ); tabControl.Save( ); var svc = new ActionService( ); svc.FlushCaches(); var request = new ActionRequestExtended { LastSelectedResourceId = resource.Id, SelectedResourceIds = new[] { resource.Id }, HostResourceIds = new[] { tabControl.Id }, ReportId = report.Id, ActionDisplayContext = ActionContext.QuickMenu }; // act var result = svc.GetActions(request); // assert result.Should().NotBeNull(); request.SelectedResources.Should().NotBeNull().And.NotBeEmpty(); request.SelectedResources.Count().Should().Be(1); request.SelectedResources.Should().Contain(r => r.Id == resource.Id); request.LastSelectedResource.Should().NotBeNull(); request.SelectedResourceTypes.Should().NotBeNull().And.NotBeEmpty(); foreach (EntityType t in resource.EntityTypes) { var type = request.SelectedResourceTypes.FirstOrDefault(a => a.Id == t.Id); type.Should().NotBeNull(); if (type == null) { continue; } type.Alias.Should().Be(t.Alias); type.TenantId.Should().Be(t.TenantId); } result.Actions.Should().NotBeNull(); RemovePowerTools(result); result.Actions.Count.Should().Be(8); result.Actions[0].Name.Should().Be("View 'Resource'"); // View result.Actions[0].Order.Should().Be(10); result.Actions[0].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[0].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id); // make sure the form is the one assigned to tab control, not the form assigned to report result.Actions[0].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id); result.Actions[1].Name.Should().Be("Edit 'Resource'"); // Edit result.Actions[1].Order.Should().Be(20); result.Actions[1].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[1].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id); result.Actions[1].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id); result.Actions[2].Name.Should().Be("Link to Existing"); // Link result.Actions[2].Order.Should().Be(25); result.Actions[2].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[2].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id); result.Actions[2].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id); result.Actions[3].Name.Should().Be("Remove Link"); // Remove Link result.Actions[3].Order.Should().Be(26); result.Actions[3].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[3].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id); result.Actions[3].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id); result.Actions[4].Name.Should().Be("Delete 'Resource'"); // Delete result.Actions[4].Order.Should().Be(30); result.Actions[4].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[4].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id); result.Actions[4].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id); result.Actions[5].Name.Should().Be("Excel"); // Excel result.Actions[5].Order.Should().Be(500); result.Actions[5].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[5].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id); result.Actions[5].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id); result.Actions[6].Name.Should().Be("CSV"); // CSV result.Actions[6].Order.Should().Be(501); result.Actions[6].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[6].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id); result.Actions[6].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id); result.Actions[7].Name.Should().Be("Word"); // Word result.Actions[7].Order.Should().Be(502); result.Actions[7].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[7].AdditionalData["CustomForm"].Should().Be(tabControl.ResourceViewerConsoleForm.Id); result.Actions[7].AdditionalData["CustomFormEditsTypeId"].Should().Be(testType1.Id); }
public void GetActionsWithReport() { // arrange var resource = Entity.Create <Resource>(); resource.Save( ); var report = Entity.Create <ReadiNow.Model.Report>( ); report.ResourceViewerConsoleForm = new CustomEditForm(); var typeToEditWithForm = new EntityType(); report.ResourceViewerConsoleForm.TypeToEditWithForm = typeToEditWithForm; report.Save( ); var svc = new ActionService( ); svc.FlushCaches(); var request = new ActionRequestExtended { LastSelectedResourceId = resource.Id, SelectedResourceIds = new[] { resource.Id }, ReportId = report.Id }; // act var result = svc.GetActions(request); // assert result.Should().NotBeNull(); request.SelectedResources.Should().NotBeNull().And.NotBeEmpty(); request.SelectedResources.Count().Should().Be(1); request.SelectedResources.Should().Contain(r => r.Id == resource.Id); request.LastSelectedResource.Should().NotBeNull(); request.SelectedResourceTypes.Should().NotBeNull().And.NotBeEmpty(); foreach (EntityType t in resource.EntityTypes) { var type = request.SelectedResourceTypes.FirstOrDefault(a => a.Id == t.Id); type.Should().NotBeNull(); if (type == null) { continue; } type.Alias.Should().Be(t.Alias); type.TenantId.Should().Be(t.TenantId); } result.Actions.Should().NotBeNull(); RemovePowerTools(result); result.Actions.Count.Should().Be(3); result.Actions[0].Name.Should().Be("View 'Resource'"); // View result.Actions[0].Order.Should().Be(10); result.Actions[0].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[0].AdditionalData["CustomForm"].Should().Be(report.ResourceViewerConsoleForm.Id); result.Actions[0].AdditionalData["CustomFormEditsTypeId"].Should().Be(typeToEditWithForm.Id); result.Actions[1].Name.Should().Be("Edit 'Resource'"); // Edit result.Actions[1].Order.Should().Be(20); result.Actions[1].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[1].AdditionalData["CustomForm"].Should().Be(report.ResourceViewerConsoleForm.Id); result.Actions[1].AdditionalData["CustomFormEditsTypeId"].Should().Be(typeToEditWithForm.Id); result.Actions[2].Name.Should().Be("Delete 'Resource'"); // Delete result.Actions[2].Order.Should().Be(30); result.Actions[2].AdditionalData.Should().NotBeNull().And.NotBeEmpty(); result.Actions[2].AdditionalData["CustomForm"].Should().Be(report.ResourceViewerConsoleForm.Id); result.Actions[2].AdditionalData["CustomFormEditsTypeId"].Should().Be(typeToEditWithForm.Id); }
public void MakeReportOper(DateTime dateBegin, DateTime dateEnd, Int64 customerTypeId, Stream stream) { int last_column = 8; int first_row = 2; IWorkbook book = Factory.GetWorkbook(); var sheet = book.Worksheets[0]; var customerType = CustomerTypeService.GetTypeById(customerTypeId); if (customerType == CustomerType.Empty) { customerType = null; } PrepareTemplateOper(sheet, dateBegin, dateEnd, customerType); ReportSumModel.Refresh(dateBegin, dateEnd, customerType); Int32 row_index = first_row; Int32 num = 0; IEnumerable <ServiceAction> actions = null; var user = UserService.GetCurrentUser(); if (user.IsAdmin) { actions = ActionService.GetActions(dateBegin, dateEnd, customerType); } else { actions = ActionService.GetActions(user, dateBegin, dateEnd, customerType); } foreach (var action in actions) { if (action.Service == null || action.Service.Organization == null || action.User == null || action.Type == null) { continue; } sheet.Cells[row_index, 0].Value = ++num; sheet.Cells[row_index, 1].Value = action.Date.ToString("dd.MM.yyyy"); sheet.Cells[row_index, 2].Value = action.Customer; sheet.Cells[row_index, 3].Value = action.IsNonresident ? "Да" : "Нет"; sheet.Cells[row_index, 4].Value = action.FreeVisit ? "Да" : "Нет"; sheet.Cells[row_index, 5].Value = action.Service.Caption; sheet.Cells[row_index, 6].Value = action.Service.Organization.Caption; sheet.Cells[row_index, 7].Value = action.Type.Caption; sheet.Cells[row_index, 8].Value = action.User.Name; row_index++; } sheet.Cells[first_row - 2, 0, row_index, last_column].Borders.LineStyle = LineStyle.Continuous; sheet.PageSetup.Orientation = PageOrientation.Landscape; sheet.PageSetup.FitToPagesTall = 999; book.SaveToStream(stream, FileFormat.Excel8); }