diff --git a/api/src/Kurs.Platform.Application.Contracts/Intranet/EventCommentDto.cs b/api/src/Kurs.Platform.Application.Contracts/Intranet/EventCommentDto.cs index c73b231a..87d972d6 100644 --- a/api/src/Kurs.Platform.Application.Contracts/Intranet/EventCommentDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/Intranet/EventCommentDto.cs @@ -5,7 +5,7 @@ namespace Kurs.Platform.Intranet; public class EventCommentDto { public string Id { get; set; } - public EventOrganizerDto Author { get; set; } + public EventOrganizerDto Employee { get; set; } public string Content { get; set; } public DateTime CreationTime { get; set; } public int Likes { get; set; } diff --git a/api/src/Kurs.Platform.Application.Contracts/Public/AuthorDto.cs b/api/src/Kurs.Platform.Application.Contracts/Public/AuthorDto.cs deleted file mode 100644 index f9223c0d..00000000 --- a/api/src/Kurs.Platform.Application.Contracts/Public/AuthorDto.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace Kurs.Platform.Public; - -public class AuthorDto -{ - public Guid Id { get; set; } - public string Name { get; set; } - public string Avatar { get; set; } -} diff --git a/api/src/Kurs.Platform.Application.Contracts/Public/BlogPostDto.cs b/api/src/Kurs.Platform.Application.Contracts/Public/BlogPostDto.cs index 5b706044..29180be3 100644 --- a/api/src/Kurs.Platform.Application.Contracts/Public/BlogPostDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/Public/BlogPostDto.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Kurs.Platform.Intranet; using Volo.Abp.Application.Dtos; namespace Kurs.Platform.Public; @@ -17,7 +18,8 @@ public class BlogPostDto : FullAuditedEntityDto public Guid CategoryId { get; set; } public BlogCategoryDto Category { get; set; } - public AuthorDto Author { get; set; } + public Guid EmployeeId { get; set; } + public EmployeeDto Employee { get; set; } public int ViewCount { get; set; } public int LikeCount { get; set; } diff --git a/api/src/Kurs.Platform.Application.Contracts/Public/BlogPostListDto.cs b/api/src/Kurs.Platform.Application.Contracts/Public/BlogPostListDto.cs index 228afbcb..a476cf94 100644 --- a/api/src/Kurs.Platform.Application.Contracts/Public/BlogPostListDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/Public/BlogPostListDto.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Kurs.Platform.Intranet; using Volo.Abp.Application.Dtos; namespace Kurs.Platform.Public; @@ -15,8 +16,11 @@ public class BlogPostListDto : EntityDto public string ContentTr { get; set; } public string ContentEn { get; set; } + public Guid CategoryId { get; set; } public BlogCategoryDto Category { get; set; } - public AuthorDto Author { get; set; } + + public Guid EmployeeId { get; set; } + public EmployeeDto Employee { get; set; } public int ViewCount { get; set; } public int LikeCount { get; set; } diff --git a/api/src/Kurs.Platform.Application.Contracts/Public/CreateUpdateBlogPostDto.cs b/api/src/Kurs.Platform.Application.Contracts/Public/CreateUpdateBlogPostDto.cs index 3331626c..19715e2b 100644 --- a/api/src/Kurs.Platform.Application.Contracts/Public/CreateUpdateBlogPostDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/Public/CreateUpdateBlogPostDto.cs @@ -11,7 +11,7 @@ public class CreateUpdateBlogPostDto public string ContentTr { get; set; } public string ContentEn { get; set; } public string Summary { get; set; } - public DateTime ReadTime { get; set; } + public string ReadTime { get; set; } public string CoverImage { get; set; } public Guid CategoryId { get; set; } public List Tags { get; set; } diff --git a/api/src/Kurs.Platform.Application.Contracts/Public/IBlogAppService.cs b/api/src/Kurs.Platform.Application.Contracts/Public/IBlogAppService.cs index 73704da6..72fbcf58 100644 --- a/api/src/Kurs.Platform.Application.Contracts/Public/IBlogAppService.cs +++ b/api/src/Kurs.Platform.Application.Contracts/Public/IBlogAppService.cs @@ -16,7 +16,6 @@ public interface IBlogAppService : IApplicationService Task UnpublishPostAsync(Guid id); // Blog Category methods - // Task> GetCategoriesAsync(); Task GetCategoryAsync(Guid id); Task CreateCategoryAsync(CreateUpdateBlogCategoryDto input); Task UpdateCategoryAsync(Guid id, CreateUpdateBlogCategoryDto input); @@ -34,7 +33,7 @@ public class SearchBlogPostsInput : PagedAndSortedResultRequestDto public string Query { get; set; } public Guid? CategoryId { get; set; } public string Tag { get; set; } - public Guid? AuthorId { get; set; } + public Guid? EmployeeId { get; set; } public bool? IsPublished { get; set; } } diff --git a/api/src/Kurs.Platform.Application/Blog/BlogAppService.cs b/api/src/Kurs.Platform.Application/Blog/BlogAppService.cs index 237cf47e..0a08151c 100644 --- a/api/src/Kurs.Platform.Application/Blog/BlogAppService.cs +++ b/api/src/Kurs.Platform.Application/Blog/BlogAppService.cs @@ -42,7 +42,7 @@ public class BlogAppService : PlatformAppService, IBlogAppService ReadTime = input.ReadTime, CoverImage = input.CoverImage, CategoryId = input.CategoryId, - AuthorId = _currentUser.Id.Value, + EmployeeId = _currentUser.Id.Value, IsPublished = true, }; @@ -61,13 +61,6 @@ public class BlogAppService : PlatformAppService, IBlogAppService await _categoryRepository.GetAsync(post.CategoryId) ); - // Get author info - dto.Author = new AuthorDto - { - Id = post.AuthorId, - Name = "User" - }; - return dto; } @@ -75,7 +68,7 @@ public class BlogAppService : PlatformAppService, IBlogAppService { var post = await _postRepository.GetAsync(id); - if (post.AuthorId != _currentUser.Id && !await AuthorizationService.IsGrantedAsync("App.BlogManagement.Update")) + if (post.EmployeeId != _currentUser.Id && !await AuthorizationService.IsGrantedAsync("App.BlogManagement.Update")) { throw new Volo.Abp.Authorization.AbpAuthorizationException(); } @@ -112,7 +105,7 @@ public class BlogAppService : PlatformAppService, IBlogAppService var post = await _postRepository.GetAsync(id); // Check if user is author or has permission - if (post.AuthorId != _currentUser.Id && !await AuthorizationService.IsGrantedAsync("App.BlogManagement.Delete")) + if (post.EmployeeId != _currentUser.Id && !await AuthorizationService.IsGrantedAsync("App.BlogManagement.Delete")) { throw new Volo.Abp.Authorization.AbpAuthorizationException(); } @@ -130,7 +123,7 @@ public class BlogAppService : PlatformAppService, IBlogAppService var post = await _postRepository.GetAsync(id); // Check if user is author or has permission - if (post.AuthorId != _currentUser.Id && !await AuthorizationService.IsGrantedAsync("App.BlogManagement.Publish")) + if (post.EmployeeId != _currentUser.Id && !await AuthorizationService.IsGrantedAsync("App.BlogManagement.Publish")) { throw new Volo.Abp.Authorization.AbpAuthorizationException(); } @@ -146,7 +139,7 @@ public class BlogAppService : PlatformAppService, IBlogAppService var post = await _postRepository.GetAsync(id); // Check if user is author or has permission - if (post.AuthorId != _currentUser.Id && !await AuthorizationService.IsGrantedAsync("App.BlogManagement.Publish")) + if (post.EmployeeId != _currentUser.Id && !await AuthorizationService.IsGrantedAsync("App.BlogManagement.Publish")) { throw new Volo.Abp.Authorization.AbpAuthorizationException(); } diff --git a/api/src/Kurs.Platform.Application/Intranet/IntranetAppService.cs b/api/src/Kurs.Platform.Application/Intranet/IntranetAppService.cs index b84734eb..a23f2ee3 100644 --- a/api/src/Kurs.Platform.Application/Intranet/IntranetAppService.cs +++ b/api/src/Kurs.Platform.Application/Intranet/IntranetAppService.cs @@ -384,7 +384,7 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService calendarEvent.Comments.Add(new EventCommentDto { Id = comment.Id.ToString(), - Author = new EventOrganizerDto + Employee = new EventOrganizerDto { Id = commentAuthor.Id, Name = commentAuthor.FullName, diff --git a/api/src/Kurs.Platform.Application/Public/PublicAppService.cs b/api/src/Kurs.Platform.Application/Public/PublicAppService.cs index bc2ae4dd..93a4e854 100644 --- a/api/src/Kurs.Platform.Application/Public/PublicAppService.cs +++ b/api/src/Kurs.Platform.Application/Public/PublicAppService.cs @@ -12,6 +12,7 @@ using Volo.Abp.Domain.Entities; using System.Linq; using Volo.Abp.Application.Dtos; using System.Text.Json; +using Kurs.Platform.Intranet; namespace Kurs.Platform.Public; @@ -29,6 +30,7 @@ public class PublicAppService : PlatformAppService private readonly IRepository _orderRepository; private readonly IRepository _aboutRepository; private readonly IRepository _contactRepository; + private readonly IRepository _employeeRepository; public PublicAppService( IRepository serviceRepository, @@ -42,8 +44,9 @@ public class PublicAppService : PlatformAppService IRepository installmentOptionRepository, IRepository orderRepository, IRepository aboutRepository, - IRepository contactRepository - ) + IRepository contactRepository, + IRepository employeeRepository + ) { _serviceRepository = serviceRepository; _settingProvider = settingProvider; @@ -57,6 +60,7 @@ public class PublicAppService : PlatformAppService _orderRepository = orderRepository; _aboutRepository = aboutRepository; _contactRepository = contactRepository; + _employeeRepository = employeeRepository; } public async Task> GetServicesListAsync() @@ -127,6 +131,10 @@ public class PublicAppService : PlatformAppService var pageCategories = await _categoryRepository.GetListAsync(x => categoryIds.Contains(x.Id)); var categoryDict = pageCategories.ToDictionary(x => x.Id, x => x); + var employeeIds = pagedPosts.Select(x => x.EmployeeId).Distinct().ToList(); + var pageEmployees = await _employeeRepository.GetListAsync(x => employeeIds.Contains(x.Id)); + var employeeDict = pageEmployees.ToDictionary(x => x.Id, x => x); + // Post DTO mapping var postDtos = pagedPosts.Select(post => { @@ -136,7 +144,11 @@ public class PublicAppService : PlatformAppService dto.Category = ObjectMapper.Map(c); } - dto.Author = new AuthorDto { Id = post.AuthorId, Name = "User" }; + if (employeeDict.TryGetValue(post.EmployeeId, out var e)) + { + dto.Employee = ObjectMapper.Map(e); + } + return dto; }).ToList(); @@ -176,13 +188,6 @@ public class PublicAppService : PlatformAppService await _categoryRepository.GetAsync(post.CategoryId) ); - // Get author info - dto.Author = new AuthorDto - { - Id = post.AuthorId, - Name = "User" - }; - return dto; } diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs b/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs index a72c8f89..899dcab0 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormSeeder_Administration.cs @@ -340,7 +340,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Name", - Width = 300, + Width = 400, ListOrderNo = 2, Visible = true, IsActive = true, @@ -355,7 +355,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "DisplayName", - Width = 300, + Width = 500, ListOrderNo = 3, Visible = true, IsActive = true, @@ -427,11 +427,12 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep { new() { Order=1, ColCount=1, ColSpan=2, ItemType="group", Items =[ new EditingFormItemDto { Order=1, DataField="GroupName", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order=2, DataField="Name", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order=3, DataField="DisplayName", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order=4, DataField="IsEnabled", ColSpan=2, IsRequired=false, EditorType2=EditorTypes.dxCheckBox }, - new EditingFormItemDto { Order=5, DataField="MultiTenancySide", ColSpan=2, IsRequired=false, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order=6, DataField="MenuGroup", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxTagBox }, + new EditingFormItemDto { Order=2, DataField="ParentName", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order=3, DataField="Name", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxTextBox }, + new EditingFormItemDto { Order=4, DataField="DisplayName", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order=5, DataField="IsEnabled", ColSpan=2, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order=6, DataField="MultiTenancySide", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order=7, DataField="MenuGroup", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxTagBox }, ]} }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { @@ -463,7 +464,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "GroupName", - Width = 200, + Width = 300, ListOrderNo = 2, Visible = true, IsActive = true, @@ -475,7 +476,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep DataSourceType = UiLookupDataSourceTypeEnum.Query, DisplayExpr = "Name", ValueExpr = "Key", - LookupQuery = $"SELECT \"AbpPermissions\".\"GroupName\" AS \"Key\", \"AbpPermissions\".\"GroupName\" as \"Name\" FROM \"AbpPermissions\" GROUP BY \"AbpPermissions\".\"GroupName\" ORDER BY \"AbpPermissions\".\"GroupName\"", + LookupQuery = LookupQueryValues.PermissionGroupValues }), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, @@ -487,7 +488,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "ParentName", - Width = 200, + Width = 300, ListOrderNo = 3, Visible = true, IsActive = true, @@ -503,7 +504,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Name", - Width = 250, + Width = 300, ListOrderNo = 4, Visible = true, IsActive = true, @@ -519,7 +520,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "DisplayName", - Width = 250, + Width = 400, ListOrderNo = 5, Visible = true, IsActive = true, @@ -542,7 +543,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.Boolean, FieldName = "IsEnabled", - Width = 85, + Width = 100, ListOrderNo = 6, Visible = true, IsActive = true, @@ -557,7 +558,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.Int16, FieldName = "MultiTenancySide", - Width = 85, + Width = 100, ListOrderNo = 7, Visible = true, IsActive = true, @@ -584,7 +585,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "MenuGroup", - Width = 85, + Width = 200, ListOrderNo = 8, Visible = true, IsActive = true, @@ -641,7 +642,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep PagerOptionJson = DefaultPagerOptionJson, EditingOptionJson = JsonSerializer.Serialize(new GridEditingDto { - Popup = new GridEditingPopupDto() { Title = AppCodes.IdentityManagement.ClaimTypes, Width = 500, Height = 550 }, + Popup = new GridEditingPopupDto() { Title = AppCodes.IdentityManagement.ClaimTypes, Width = 500, Height = 300 }, AllowDeleting = true, AllowAdding = true, AllowUpdating = true, @@ -652,11 +653,11 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new() { Order=1, ColCount=1, ColSpan=2, ItemType="group", Items =[ new EditingFormItemDto { Order=1, DataField="Name", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order=2, DataField="ValueType", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxSelectBox, EditorOptions = EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order=3, DataField="Required", ColSpan=2, IsRequired=false, EditorType2=EditorTypes.dxCheckBox }, - new EditingFormItemDto { Order=4, DataField="IsStatic", ColSpan=2, IsRequired=false, EditorType2=EditorTypes.dxCheckBox }, - new EditingFormItemDto { Order=5, DataField="Regex", ColSpan=2, IsRequired=false, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order=6, DataField="RegexDescription", ColSpan=2, IsRequired=false, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order=7, DataField="Description", ColSpan=2, IsRequired=false, EditorType2=EditorTypes.dxTextBox }, + new EditingFormItemDto { Order=3, DataField="Required", ColSpan=2, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order=4, DataField="IsStatic", ColSpan=2, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order=5, DataField="Regex", ColSpan=2, EditorType2=EditorTypes.dxTextBox }, + new EditingFormItemDto { Order=6, DataField="RegexDescription", ColSpan=2, EditorType2=EditorTypes.dxTextBox }, + new EditingFormItemDto { Order=7, DataField="Description", ColSpan=2, EditorType2=EditorTypes.dxTextArea }, ]} }), DeleteCommand = "DELETE FROM \"AbpClaimTypes\" WHERE \"Id\"=@Id", @@ -685,7 +686,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.Guid, FieldName = "Id", - Width = 500, + Width = 100, ListOrderNo = 0, Visible = false, IsActive = true, @@ -716,7 +717,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.Int16, FieldName = "ValueType", - Width = 100, + Width = 150, ListOrderNo = 2, Visible = true, IsActive = true, @@ -789,7 +790,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "RegexDescription", - Width = 250, + Width = 300, ListOrderNo = 6, Visible = true, IsActive = true, @@ -805,7 +806,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Description", - Width = 250, + Width = 300, ListOrderNo = 7, Visible = true, IsActive = true, @@ -861,8 +862,8 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep EditingFormJson = JsonSerializer.Serialize(new List() { new() { Order=1, ColCount=1, ColSpan=2, ItemType="group", Items=[ new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField = "IsDefault", ColSpan = 2, IsRequired = false, EditorType2=EditorTypes.dxCheckBox }, - new EditingFormItemDto { Order = 3, DataField = "IsPublic", ColSpan = 2, IsRequired = false, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 2, DataField = "IsDefault", ColSpan = 2, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 3, DataField = "IsPublic", ColSpan = 2, EditorType2=EditorTypes.dxCheckBox }, ]} }), DeleteCommand = "DELETE FROM \"AbpRoles\" WHERE \"Id\"=@Id", @@ -907,7 +908,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Name", - Width = 400, + Width = 500, ListOrderNo = 1, Visible = true, IsActive = true, @@ -927,7 +928,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.Boolean, FieldName = "IsDefault", - Width = 85, + Width = 100, ListOrderNo = 2, Visible = true, IsActive = true, @@ -943,7 +944,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.Boolean, FieldName = "IsPublic", - Width = 85, + Width = 100, ListOrderNo = 3, Visible = true, IsActive = true, @@ -1008,7 +1009,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new EditingFormItemDto { Order=3, DataField="Surname", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order=4, DataField="PhoneNumber", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order=5, DataField="Password", ColSpan=2, IsRequired=true, EditorType2=EditorTypes.dxTextBox }, - new EditingFormItemDto { Order=6, DataField="IsActive", ColSpan=2, IsRequired=false, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order=6, DataField="IsActive", ColSpan=2, EditorType2=EditorTypes.dxCheckBox }, ]} }), InsertServiceAddress = "list-form-dynamic-api/user-insert", @@ -1048,7 +1049,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.Guid, FieldName = "Id", - Width = 125, + Width = 100, ListOrderNo = 1, Visible = false, IsActive = true, @@ -1065,7 +1066,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Email", - Width = 250, + Width = 300, ListOrderNo = 2, Visible = true, IsActive = true, @@ -1215,7 +1216,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep PagerOptionJson = DefaultPagerOptionJson, EditingOptionJson = JsonSerializer.Serialize(new GridEditingDto { - Popup = new GridEditingPopupDto() { Title = ListFormCodes.Lists.IpRestriction, Width = 800, Height = 500 }, + Popup = new GridEditingPopupDto() { Title = ListFormCodes.Lists.IpRestriction, Width = 500, Height = 300 }, AllowDeleting = true, AllowAdding = true, AllowUpdating = true, @@ -1224,8 +1225,8 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep EditingFormJson = JsonSerializer.Serialize(new List() { new() { Order=1,ColCount=1,ColSpan=2,ItemType="group", Items=[ new EditingFormItemDto { Order = 1, DataField = "ResourceType", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 2, DataField = "ResourceId", ColSpan = 2, IsRequired = false, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 3, DataField = "IP", ColSpan = 2, IsRequired = false, EditorType2=EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 2, DataField = "ResourceId", ColSpan = 2, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 3, DataField = "IP", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, ]} }), InsertFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { @@ -1256,7 +1257,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "ResourceType", - Width = 300, + Width = 400, ListOrderNo = 2, Visible = true, IsActive = true, @@ -1285,7 +1286,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "ResourceId", - Width = 300, + Width = 400, ListOrderNo = 3, Visible = true, IsActive = true, @@ -1307,12 +1308,13 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "IP", - Width = 85, + Width = 100, ListOrderNo = 4, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.IdentityManagement.IpRestrictions), PivotSettingsJson = DefaultPivotSettingsJson @@ -1396,7 +1398,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsDeleted = false, AllowSearch = true, ColumnCustomizationJson = DefaultColumnCustomizationJson, - PermissionJson = DefaultFieldPermissionJson(AppCodes.AuditLogs), + PermissionJson = DefaultFieldPermissionJson(AppCodes.AuditLogs), PivotSettingsJson = DefaultPivotSettingsJson }, new() { @@ -1561,9 +1563,9 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new EditingFormItemDto { Order = 3, DataField = "Method", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 4, DataField = "DataSourceCode", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField = "Sql", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxTextArea, EditorOptions="{ \"height\" : 60 }" }, - new EditingFormItemDto { Order = 6, DataField = "ParametersJson", ColSpan = 2, IsRequired = false, EditorType2=EditorTypes.dxTextArea, EditorOptions="{ \"height\" : 60 }" }, - new EditingFormItemDto { Order = 7, DataField = "PermissionsJson", ColSpan = 2, IsRequired = false, EditorType2=EditorTypes.dxTextArea, EditorOptions="{ \"height\" : 60 }" }, - new EditingFormItemDto { Order = 8, DataField = "Description", ColSpan = 2, IsRequired = false, EditorType2=EditorTypes.dxTextArea, EditorOptions="{\"height\":200}" }, + new EditingFormItemDto { Order = 6, DataField = "ParametersJson", ColSpan = 2, EditorType2=EditorTypes.dxTextArea, EditorOptions="{ \"height\" : 60 }" }, + new EditingFormItemDto { Order = 7, DataField = "PermissionsJson", ColSpan = 2, EditorType2=EditorTypes.dxTextArea, EditorOptions="{ \"height\" : 60 }" }, + new EditingFormItemDto { Order = 8, DataField = "Description", ColSpan = 2, EditorType2=EditorTypes.dxTextArea, EditorOptions="{\"height\":200}" }, ]} }), InsertFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { @@ -1791,8 +1793,8 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep ItemType = "group", Items = [ new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField = "Description", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 3, DataField = "Icon", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 2, DataField = "Description", ColSpan = 2, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 3, DataField = "Icon", ColSpan = 2, EditorType2 = EditorTypes.dxTextBox }, ]} }), DeleteCommand = $"UPDATE \"{FullNameTable(TableNameEnum.ReportCategory)}\" SET \"DeleterId\"=@DeleterId, \"DeletionTime\"=CURRENT_TIMESTAMP, \"IsDeleted\"='true' WHERE \"Id\"=@Id", @@ -1847,7 +1849,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Description", - Width = 500, + Width = 600, ListOrderNo = 3, Visible = true, IsActive = true, @@ -2047,7 +2049,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep PagerOptionJson = DefaultPagerOptionJson, EditingOptionJson = JsonSerializer.Serialize(new GridEditingDto { - Popup = new GridEditingPopupDto { Title = AppCodes.Services, Width = 500, Height = 450 }, + Popup = new GridEditingPopupDto { Title = AppCodes.Services, Width = 500, Height = 300 }, AllowDeleting = true, AllowAdding = true, AllowUpdating = true, @@ -2063,10 +2065,10 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep Items = [ new EditingFormItemDto { Order = 1, DataField = "Title", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 2, DataField = "Icon", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 3, DataField = "Description", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 4, DataField = "Type", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 5, DataField = "Features", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 2, DataField = "Icon", ColSpan = 2, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 3, DataField = "Description", ColSpan = 2, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 4, DataField = "Type", ColSpan = 2, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 5, DataField = "Features", ColSpan = 2, EditorType2 = EditorTypes.dxTextArea }, ] } }), @@ -2106,7 +2108,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Title", - Width = 200, + Width = 400, ListOrderNo = 2, Visible = true, IsActive = true, @@ -2128,7 +2130,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Icon", - Width = 150, + Width = 100, ListOrderNo = 3, Visible = true, IsActive = true, @@ -2144,7 +2146,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Description", - Width = 150, + Width = 500, ListOrderNo = 4, Visible = true, IsActive = true, @@ -2191,7 +2193,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Features", - Width = 200, + Width = 500, ListOrderNo = 6, Visible = true, IsActive = true, @@ -2265,8 +2267,8 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new EditingFormItemDto { Order = 2, DataField = "Description", ColSpan = 2, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "Category", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 4, DataField = "Order", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, - new EditingFormItemDto { Order = 5, DataField = "MonthlyPrice", ColSpan = 2, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, - new EditingFormItemDto { Order = 6, DataField = "YearlyPrice", ColSpan = 2, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, + new EditingFormItemDto { Order = 5, DataField = "MonthlyPrice", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, + new EditingFormItemDto { Order = 6, DataField = "YearlyPrice", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, new EditingFormItemDto { Order = 7, DataField = "IsQuantityBased", ColSpan = 2, EditorType2 = EditorTypes.dxCheckBox }, new EditingFormItemDto { Order = 8, DataField = "ImageUrl", ColSpan = 2, EditorType2 = EditorTypes.dxTextBox }, ] @@ -2304,7 +2306,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Name", - Width = 300, + Width = 400, ListOrderNo = 2, Visible = true, IsActive = true, @@ -2327,7 +2329,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Description", - Width = 300, + Width = 500, ListOrderNo = 3, Visible = true, IsActive = true, @@ -2384,6 +2386,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.Products), }, @@ -2401,6 +2404,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.Products), }, @@ -2425,7 +2429,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "ImageUrl", - Width = 300, + Width = 400, ListOrderNo = 9, Visible = true, IsActive = true, @@ -2460,8 +2464,9 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep SelectCommandType = SelectCommandTypeEnum.Table, SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.PaymentMethod)), KeyFieldName = "Id", - KeyFieldDbSourceType = DbType.String, + KeyFieldDbSourceType = DbType.Guid, SortMode = GridOptions.SortModeSingle, + DefaultFilter = DefaultFilterJson, FilterRowJson = JsonSerializer.Serialize(new GridFilterRowDto { Visible = true }), HeaderFilterJson = JsonSerializer.Serialize(new { Visible = true }), SearchPanelJson = JsonSerializer.Serialize(new { Visible = true }), @@ -2499,6 +2504,14 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new FieldsDefaultValue { FieldName = "DeleterId", FieldDbType = DbType.Guid, Value = "@USERID", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, new FieldsDefaultValue { FieldName = "Id", FieldDbType = DbType.Guid, Value = "@ID", CustomValueType = FieldCustomValueTypeEnum.CustomKey } }), + InsertFieldsDefaultValueJson = JsonSerializer.Serialize(new[] + { + new FieldsDefaultValue { FieldName = "CreationTime", FieldDbType = DbType.DateTime, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, + new FieldsDefaultValue { FieldName = "CreatorId", FieldDbType = DbType.Guid, Value = "@USERID", CustomValueType = FieldCustomValueTypeEnum.CustomKey } + }), + FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "Commission", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value } + }), }); #region PaymentMethod Fields @@ -2511,7 +2524,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep FieldName = "Id", Width = 100, ListOrderNo = 1, - Visible = true, + Visible = false, IsActive = true, IsDeleted = false, ValidationRuleJson = DefaultValidationRuleRequiredJson, @@ -2542,7 +2555,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep FieldName = "Commission", Format = "fixedPoint", Alignment = "right", - Width = 100, + Width = 200, ListOrderNo = 3, Visible = true, IsActive = true, @@ -2557,7 +2570,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Logo", - Width = 300, + Width = 500, ListOrderNo = 4, Visible = true, IsActive = true, @@ -2595,6 +2608,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep KeyFieldName = "Id", KeyFieldDbSourceType = DbType.Guid, SortMode = GridOptions.SortModeSingle, + DefaultFilter = DefaultFilterJson, FilterRowJson = JsonSerializer.Serialize(new GridFilterRowDto { Visible = true }), HeaderFilterJson = JsonSerializer.Serialize(new { Visible = true }), SearchPanelJson = JsonSerializer.Serialize(new { Visible = true }), @@ -2632,6 +2646,14 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new FieldsDefaultValue { FieldName = "DeleterId", FieldDbType = DbType.Guid, Value = "@USERID", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, new FieldsDefaultValue { FieldName = "Id", FieldDbType = DbType.Guid, Value = "@ID", CustomValueType = FieldCustomValueTypeEnum.CustomKey } }), + InsertFieldsDefaultValueJson = JsonSerializer.Serialize(new[] + { + new FieldsDefaultValue { FieldName = "CreationTime", FieldDbType = DbType.DateTime, Value = "@NOW", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, + new FieldsDefaultValue { FieldName = "CreatorId", FieldDbType = DbType.Guid, Value = "@USERID", CustomValueType = FieldCustomValueTypeEnum.CustomKey } + }), + FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "Commission", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value } + }), }); #region PaymentMethod Fields @@ -2657,7 +2679,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Installment", - Width = 100, + Width = 200, ListOrderNo = 2, Visible = true, IsActive = true, @@ -2673,7 +2695,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Name", - Width = 200, + Width = 500, ListOrderNo = 3, Visible = true, IsActive = true, @@ -2771,7 +2793,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep [ new EditingFormItemDto { Order = 11, DataField = "PhoneNumber", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions }, new EditingFormItemDto { Order = 12, DataField = "MobileNumber", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions }, - new EditingFormItemDto { Order = 13, DataField = "FaxNumber", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions }, + new EditingFormItemDto { Order = 13, DataField = "FaxNumber", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions }, new EditingFormItemDto { Order = 14, DataField = "Email", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 15, DataField = "Website", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 16, DataField = "Subtotal", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, @@ -2779,6 +2801,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new EditingFormItemDto { Order = 18, DataField = "Total", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, new EditingFormItemDto { Order = 19, DataField = "PaymentMethodId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 20, DataField = "Installment", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 21, DataField = "IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, ] } }), @@ -2788,7 +2811,9 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new FieldsDefaultValue { FieldName = "CreatorId", FieldDbType = DbType.Guid, Value = "@USERID", CustomValueType = FieldCustomValueTypeEnum.CustomKey } }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "Country", FieldDbType = DbType.String, Value = "TR", CustomValueType = FieldCustomValueTypeEnum.Value } + new() { FieldName = "Country", FieldDbType = DbType.String, Value = "TR", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { FieldName = "Commission", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value } }) }); @@ -2831,12 +2856,13 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Founder", - Width = 100, + Width = 150, ListOrderNo = 3, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -2862,12 +2888,13 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "TaxOffice", - Width = 100, + Width = 150, ListOrderNo = 5, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -2877,12 +2904,13 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Address1", - Width = 100, + Width = 300, ListOrderNo = 6, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -2892,7 +2920,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Address2", - Width = 100, + Width = 300, ListOrderNo = 7, Visible = true, IsActive = true, @@ -2921,6 +2949,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep LookupQuery = LookupQueryValues.CountryValues, CascadeEmptyFields = "City,District" }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -2947,6 +2976,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CascadeParentFields = "Country", CascadeEmptyFields = "District" }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -2972,6 +3002,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CascadeFilterOperator="=", CascadeParentFields = "Country,City", }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -2988,6 +3019,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsDeleted = false, AllowSearch = true, EditorOptions = EditorOptionValues.PhoneEditorOptions, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -3004,6 +3036,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsDeleted = false, AllowSearch = true, EditorOptions = EditorOptionValues.PhoneEditorOptions, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -3029,12 +3062,13 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Website", - Width = 100, + Width = 200, ListOrderNo = 14, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -3052,6 +3086,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -3069,6 +3104,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -3086,6 +3122,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -3095,7 +3132,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.Guid, FieldName = "PaymentMethodId", - Width = 100, + Width = 150, ListOrderNo = 18, Visible = true, IsActive = true, @@ -3108,6 +3145,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep ValueExpr = "Key", LookupQuery = LookupQueryValues.PaymentMethodValues }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), }, @@ -3130,6 +3168,22 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep ValueExpr = "Key", LookupQuery = LookupQueryValues.InstallmentValues }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), + }, + new() + { + ListFormCode = listFormPurchaseOrder.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Boolean, + FieldName = "IsActive", + Width = 100, + ListOrderNo = 20, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.Orders.PurchaseOrders), } @@ -3196,9 +3250,9 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 2, DataField = "Slug", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField = "Description", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 4, DataField = "Icon", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 4, DataField = "Icon", ColSpan = 2, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 5, DataField = "DisplayOrder", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox }, - new EditingFormItemDto { Order = 6, DataField = "IsActive", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxCheckBox } + new EditingFormItemDto { Order = 6, DataField = "IsActive", ColSpan = 2, EditorType2 = EditorTypes.dxCheckBox } ] } }), @@ -3273,7 +3327,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Description", - Width = 400, + Width = 500, ListOrderNo = 4, Visible = true, IsActive = true, @@ -3302,7 +3356,6 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsActive = true, IsDeleted = false, AllowSearch = true, - ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.BlogManagement.BlogCategory), }, @@ -3318,6 +3371,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep IsActive = true, IsDeleted = false, AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(AppCodes.BlogManagement.BlogCategory), }, @@ -3399,14 +3453,14 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep new EditingFormItemDto { Order = 1, DataField = "Title", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 2, DataField = "Slug", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 3, DataField = "Summary", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 4, DataField = "CoverImage", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 5, DataField = "ReadTime", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 4, DataField = "CoverImage", ColSpan = 2, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 5, DataField = "ReadTime", ColSpan = 2, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 6, DataField = "CategoryId", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 7, DataField = "ViewCount", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, - new EditingFormItemDto { Order = 8, DataField = "LikeCount", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, - new EditingFormItemDto { Order = 9, DataField = "CommentCount", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, - new EditingFormItemDto { Order = 10, DataField = "IsPublished", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxCheckBox }, - new EditingFormItemDto { Order = 11, DataField = "PublishedAt", ColSpan = 2, IsRequired = false, EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 7, DataField = "ViewCount", ColSpan = 2, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, + new EditingFormItemDto { Order = 8, DataField = "LikeCount", ColSpan = 2, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, + new EditingFormItemDto { Order = 9, DataField = "CommentCount", ColSpan = 2, EditorType2 = EditorTypes.dxNumberBox, EditorOptions=EditorOptionValues.NumberStandartFormat }, + new EditingFormItemDto { Order = 10, DataField = "IsPublished", ColSpan = 2, EditorType2 = EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 11, DataField = "PublishedAt", ColSpan = 2, EditorType2 = EditorTypes.dxDateBox }, new EditingFormItemDto { Order = 12, DataField = "ContentTr", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxHtmlEditor, EditorOptions=EditorOptionValues.HtmlEditorOptions }, new EditingFormItemDto { Order = 13, DataField = "ContentEn", ColSpan = 2, IsRequired = true, EditorType2 = EditorTypes.dxHtmlEditor, EditorOptions=EditorOptionValues.HtmlEditorOptions } ] @@ -4648,7 +4702,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep [ new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField = "Progress", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxNumberBox }, - new EditingFormItemDto { Order = 3, DataField = "IsDefault", ColSpan = 2, IsRequired = false, EditorType2=EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 3, DataField = "IsDefault", ColSpan = 2, EditorType2=EditorTypes.dxCheckBox }, new EditingFormItemDto { Order = 4, DataField = "SkillTypeId", ColSpan = 2, IsRequired = true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, ] } diff --git a/api/src/Kurs.Platform.Domain.Shared/Enums/LookUpQueryValues.cs b/api/src/Kurs.Platform.Domain.Shared/Enums/LookUpQueryValues.cs index af264901..f5f20ade 100644 --- a/api/src/Kurs.Platform.Domain.Shared/Enums/LookUpQueryValues.cs +++ b/api/src/Kurs.Platform.Domain.Shared/Enums/LookUpQueryValues.cs @@ -317,6 +317,12 @@ public static class LookupQueryValues $"WHERE \"IsEnabled\" = 'true' " + $"ORDER BY \"Name\";"; + public static string PermissionGroupValues = + $"SELECT \"Name\" AS \"Key\", " + + $"\"DisplayName\" AS \"Name\" " + + $"FROM \"AbpPermissionGroups\" " + + $"ORDER BY \"Name\";"; + public static string MenuCodeValues = $"SELECT " + $"\"Code\" AS \"Key\", " + diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/Administration/BlogPost.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/Administration/BlogPost.cs index 58ec671e..f9827511 100644 --- a/api/src/Kurs.Platform.Domain/Entities/Tenant/Administration/BlogPost.cs +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/Administration/BlogPost.cs @@ -14,12 +14,13 @@ public class BlogPost : FullAuditedEntity, IMultiTenant public string ContentEn { get; set; } public string Summary { get; set; } public string CoverImage { get; set; } - public DateTime ReadTime { get; set; } + public string ReadTime { get; set; } public Guid CategoryId { get; set; } public virtual BlogCategory Category { get; set; } - public Guid AuthorId { get; set; } + public Guid EmployeeId { get; set; } + public virtual Employee Employee { get; set; } public int? ViewCount { get; set; } = 0; public int? LikeCount { get; set; } = 0; diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/Hr/Employee.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/Hr/Employee.cs index a4facff3..20654b8f 100644 --- a/api/src/Kurs.Platform.Domain/Entities/Tenant/Hr/Employee.cs +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/Hr/Employee.cs @@ -74,5 +74,6 @@ public class Employee : FullAuditedEntity, IMultiTenant public ICollection ExpenseRequests { get; set; } public ICollection SurveyResponses { get; set; } public ICollection Partners { get; set; } + public ICollection BlogPosts { get; set; } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index 0c1fc8d8..fc676dff 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -1516,6 +1516,11 @@ public class PlatformDbContext : .WithMany(x => x.Posts) .HasForeignKey(x => x.CategoryId) .OnDelete(DeleteBehavior.Restrict); + + b.HasOne(x => x.Employee) + .WithMany(x => x.BlogPosts) + .HasForeignKey(x => x.EmployeeId) + .OnDelete(DeleteBehavior.Restrict); }); builder.Entity(b => diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104083431_Initial.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104115742_Initial.Designer.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104083431_Initial.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104115742_Initial.Designer.cs index d17837a6..bf400909 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104083431_Initial.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104115742_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20251104083431_Initial")] + [Migration("20251104115742_Initial")] partial class Initial { /// @@ -1389,9 +1389,6 @@ namespace Kurs.Platform.Migrations b.Property("Id") .HasColumnType("uniqueidentifier"); - b.Property("AuthorId") - .HasColumnType("uniqueidentifier"); - b.Property("CategoryId") .HasColumnType("uniqueidentifier"); @@ -1426,6 +1423,9 @@ namespace Kurs.Platform.Migrations .HasColumnType("datetime2") .HasColumnName("DeletionTime"); + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -1449,8 +1449,8 @@ namespace Kurs.Platform.Migrations b.Property("PublishedAt") .HasColumnType("datetime2"); - b.Property("ReadTime") - .HasColumnType("datetime2"); + b.Property("ReadTime") + .HasColumnType("nvarchar(max)"); b.Property("Slug") .IsRequired() @@ -1478,6 +1478,8 @@ namespace Kurs.Platform.Migrations b.HasIndex("CategoryId"); + b.HasIndex("EmployeeId"); + b.HasIndex("IsPublished"); b.HasIndex("PublishedAt"); @@ -12415,7 +12417,15 @@ namespace Kurs.Platform.Migrations .OnDelete(DeleteBehavior.Restrict) .IsRequired(); + b.HasOne("Kurs.Platform.Entities.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + b.Navigation("Category"); + + b.Navigation("Employee"); }); modelBuilder.Entity("Kurs.Platform.Entities.BranchUsers", b => diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104083431_Initial.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104115742_Initial.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104083431_Initial.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104115742_Initial.cs index 0efb569b..d62a259b 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104083431_Initial.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251104115742_Initial.cs @@ -2618,45 +2618,6 @@ namespace Kurs.Platform.Migrations onDelete: ReferentialAction.Restrict); }); - migrationBuilder.CreateTable( - name: "Adm_T_BlogPost", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Title = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Slug = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - ContentTr = table.Column(type: "nvarchar(max)", nullable: false), - ContentEn = table.Column(type: "nvarchar(max)", nullable: false), - Summary = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: false), - CoverImage = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - ReadTime = table.Column(type: "datetime2", nullable: false), - CategoryId = table.Column(type: "uniqueidentifier", nullable: false), - AuthorId = table.Column(type: "uniqueidentifier", nullable: false), - ViewCount = table.Column(type: "int", nullable: true), - LikeCount = table.Column(type: "int", nullable: true), - CommentCount = table.Column(type: "int", nullable: true), - IsPublished = table.Column(type: "bit", nullable: false), - PublishedAt = table.Column(type: "datetime2", nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Adm_T_BlogPost", x => x.Id); - table.ForeignKey( - name: "FK_Adm_T_BlogPost_Adm_T_BlogCategory_CategoryId", - column: x => x.CategoryId, - principalTable: "Adm_T_BlogCategory", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - migrationBuilder.CreateTable( name: "Adm_T_OrderItem", columns: table => new @@ -4080,6 +4041,45 @@ namespace Kurs.Platform.Migrations onDelete: ReferentialAction.Restrict); }); + migrationBuilder.CreateTable( + name: "Adm_T_BlogPost", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Title = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Slug = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + ContentTr = table.Column(type: "nvarchar(max)", nullable: false), + ContentEn = table.Column(type: "nvarchar(max)", nullable: false), + Summary = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: false), + CoverImage = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), + ReadTime = table.Column(type: "nvarchar(max)", nullable: true), + CategoryId = table.Column(type: "uniqueidentifier", nullable: false), + EmployeeId = table.Column(type: "uniqueidentifier", nullable: false), + ViewCount = table.Column(type: "int", nullable: true), + LikeCount = table.Column(type: "int", nullable: true), + CommentCount = table.Column(type: "int", nullable: true), + IsPublished = table.Column(type: "bit", nullable: false), + PublishedAt = table.Column(type: "datetime2", nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Adm_T_BlogPost", x => x.Id); + table.ForeignKey( + name: "FK_Adm_T_BlogPost_Adm_T_BlogCategory_CategoryId", + column: x => x.CategoryId, + principalTable: "Adm_T_BlogCategory", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + migrationBuilder.CreateTable( name: "Adm_T_Partner", columns: table => new @@ -5371,6 +5371,11 @@ namespace Kurs.Platform.Migrations table: "Adm_T_BlogPost", column: "CategoryId"); + migrationBuilder.CreateIndex( + name: "IX_Adm_T_BlogPost_EmployeeId", + table: "Adm_T_BlogPost", + column: "EmployeeId"); + migrationBuilder.CreateIndex( name: "IX_Adm_T_BlogPost_IsPublished", table: "Adm_T_BlogPost", @@ -6024,6 +6029,14 @@ namespace Kurs.Platform.Migrations table: "Scp_T_MaterialGroup", column: "ParentGroupId"); + migrationBuilder.AddForeignKey( + name: "FK_Adm_T_BlogPost_Hr_T_Employee_EmployeeId", + table: "Adm_T_BlogPost", + column: "EmployeeId", + principalTable: "Hr_T_Employee", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( name: "FK_Adm_T_Partner_Hr_T_Employee_AssignedEmployeeId", table: "Adm_T_Partner", diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 5191bd66..985769f3 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -1386,9 +1386,6 @@ namespace Kurs.Platform.Migrations b.Property("Id") .HasColumnType("uniqueidentifier"); - b.Property("AuthorId") - .HasColumnType("uniqueidentifier"); - b.Property("CategoryId") .HasColumnType("uniqueidentifier"); @@ -1423,6 +1420,9 @@ namespace Kurs.Platform.Migrations .HasColumnType("datetime2") .HasColumnName("DeletionTime"); + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -1446,8 +1446,8 @@ namespace Kurs.Platform.Migrations b.Property("PublishedAt") .HasColumnType("datetime2"); - b.Property("ReadTime") - .HasColumnType("datetime2"); + b.Property("ReadTime") + .HasColumnType("nvarchar(max)"); b.Property("Slug") .IsRequired() @@ -1475,6 +1475,8 @@ namespace Kurs.Platform.Migrations b.HasIndex("CategoryId"); + b.HasIndex("EmployeeId"); + b.HasIndex("IsPublished"); b.HasIndex("PublishedAt"); @@ -12412,7 +12414,15 @@ namespace Kurs.Platform.Migrations .OnDelete(DeleteBehavior.Restrict) .IsRequired(); + b.HasOne("Kurs.Platform.Entities.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + b.Navigation("Category"); + + b.Navigation("Employee"); }); modelBuilder.Entity("Kurs.Platform.Entities.BranchUsers", b => diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json index 78a51588..12ea4814 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json @@ -533,7 +533,7 @@ "Summary": "blog.posts.ai.excerpt", "CoverImage": "https://images.pexels.com/photos/8386434/pexels-photo-8386434.jpeg?auto=compress&cs=tinysrgb&w=1920", "CategoryName": "blog.categories.technology", - "AuthorId": "1668adf0-fd2a-5216-9834-6b6874ec2a05" + "EmployeeCode": "EMP-001" }, { "Title": "blog.posts.web.title", @@ -544,7 +544,7 @@ "Summary": "blog.posts.web.excerpt", "CoverImage": "https://images.pexels.com/photos/11035471/pexels-photo-11035471.jpeg?auto=compress&cs=tinysrgb&w=1920", "CategoryName": "blog.categories.webdev", - "AuthorId": "7df16a77-92ed-50e6-8749-ae34345c01b9" + "EmployeeCode": "EMP-002" }, { "Title": "blog.posts.security.title", @@ -555,7 +555,7 @@ "Summary": "blog.posts.security.excerpt", "CoverImage": "https://images.pexels.com/photos/5380642/pexels-photo-5380642.jpeg?auto=compress&cs=tinysrgb&w=1920", "CategoryName": "blog.categories.security", - "AuthorId": "c107a187-5e41-51e1-a5b3-5bf85c16b39e" + "EmployeeCode": "EMP-003" }, { "Title": "blog.posts.mobile.title", @@ -566,7 +566,7 @@ "ReadTime": "4 dk", "CoverImage": "https://images.pexels.com/photos/13017583/pexels-photo-13017583.jpeg?auto=compress&cs=tinysrgb&w=1920", "CategoryName": "blog.categories.mobile", - "AuthorId": "c107a187-5e41-51e1-a5b3-5bf85c16b39e" + "EmployeeCode": "EMP-002" }, { "Title": "blog.posts.database.title", @@ -577,7 +577,7 @@ "ReadTime": "8 dk", "CoverImage": "https://images.pexels.com/photos/325229/pexels-photo-325229.jpeg?auto=compress&cs=tinysrgb&w=1920", "CategoryName": "blog.categories.database", - "AuthorId": "8f49d028-69d0-5d2b-abc3-559b7dee180f" + "EmployeeCode": "EMP-004" }, { "Title": "blog.posts.digital.title", @@ -588,7 +588,7 @@ "ReadTime": "6 dk", "CoverImage": "https://images.pexels.com/photos/7681091/pexels-photo-7681091.jpeg?auto=compress&cs=tinysrgb&w=1920", "CategoryName": "blog.categories.digital", - "AuthorId": "727ec3f0-75dd-54e2-8ae6-13d49727ff58" + "EmployeeCode": "EMP-005" } ], "Contacts": [ diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs index deb41e97..f3400cc0 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs @@ -385,52 +385,6 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency } } - foreach (var item in items.BlogCategories) - { - var exists = await _blogCategoryRepository.AnyAsync(x => x.Name == item.Name); - - if (!exists) - { - var newCategory = new BlogCategory - { - Name = item.Name, - Slug = item.Slug, - Description = item.Description, - DisplayOrder = item.DisplayOrder, - PostCount = item.PostCount - }; - - await _blogCategoryRepository.InsertAsync(newCategory, autoSave: true); - } - } - - foreach (var item in items.BlogPosts) - { - var exists = await _blogPostsRepository.AnyAsync(x => x.Title == item.Title); - - if (!exists) - { - var category = await _blogCategoryRepository.FirstOrDefaultAsync(x => x.Name == item.CategoryName); - if (category != null) - { - await _blogPostsRepository.InsertAsync(new BlogPost - { - Title = item.Title, - Slug = item.Slug, - ContentTr = item.ContentTr, - ContentEn = item.ContentEn, - Summary = item.Summary, - CoverImage = item.CoverImage, - ReadTime = item.ReadTime, - CategoryId = category.Id, - AuthorId = item.AuthorId, - IsPublished = true, - PublishedAt = DateTime.UtcNow - }); - } - } - } - foreach (var item in items.ForumCategories) { var exists = await _forumCategoryRepository.AnyAsync(x => x.Name == item.Name); @@ -1080,6 +1034,54 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency }, autoSave: true); } + foreach (var item in items.BlogCategories) + { + var exists = await _blogCategoryRepository.AnyAsync(x => x.Name == item.Name); + + if (!exists) + { + var newCategory = new BlogCategory + { + Name = item.Name, + Slug = item.Slug, + Description = item.Description, + DisplayOrder = item.DisplayOrder, + PostCount = item.PostCount + }; + + await _blogCategoryRepository.InsertAsync(newCategory, autoSave: true); + } + } + + foreach (var item in items.BlogPosts) + { + var exists = await _blogPostsRepository.AnyAsync(x => x.Title == item.Title); + + if (!exists) + { + var category = await _blogCategoryRepository.FirstOrDefaultAsync(x => x.Name == item.CategoryName); + var employee = await _employeeRepository.FirstOrDefaultAsync(x => x.Code == item.EmployeeCode); + + if (category != null && employee != null) + { + await _blogPostsRepository.InsertAsync(new BlogPost + { + Title = item.Title, + Slug = item.Slug, + ContentTr = item.ContentTr, + ContentEn = item.ContentEn, + Summary = item.Summary, + CoverImage = item.CoverImage, + ReadTime = item.ReadTime, + CategoryId = category.Id, + EmployeeId = employee.Id, + IsPublished = true, + PublishedAt = DateTime.UtcNow + }); + } + } + } + foreach (var item in items.Leaves) { var employee = await _employeeRepository.FirstOrDefaultAsync(x => x.Code == item.EmployeeCode); @@ -1099,7 +1101,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency IsHalfDay = item.IsHalfDay, Reason = item.Reason, Status = item.Status, - AppliedDate = _clock.Now, + AppliedDate = _clock.Now, }, autoSave: true); } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs index 0f2378bd..28919a56 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs @@ -513,12 +513,12 @@ public class BlogPostSeedDto public string Slug { get; set; } public string ContentTr { get; set; } public string ContentEn { get; set; } - public DateTime ReadTime { get; set; } + public string ReadTime { get; set; } public string Summary { get; set; } public string CoverImage { get; set; } public string CategoryName { get; set; } - public Guid AuthorId { get; set; } - public Boolean IsPublished { get; set; } + public string EmployeeCode { get; set; } + public bool IsPublished { get; set; } public DateTime PublishedAt { get; set; } } diff --git a/ui/src/main.tsx b/ui/src/main.tsx index 0249132e..98800b39 100644 --- a/ui/src/main.tsx +++ b/ui/src/main.tsx @@ -5,6 +5,7 @@ import './index.css' import { UiEvalService } from './services/UiEvalService' import 'devextreme-react/text-area' import 'devextreme-react/html-editor' +import 'devextreme-react/autocomplete' // import config from 'devextreme/core/config' // import { licenseKey } from './devextreme-license' diff --git a/ui/src/proxy/blog/blog.ts b/ui/src/proxy/blog/blog.ts index 6cca8b30..d4c0b9c6 100644 --- a/ui/src/proxy/blog/blog.ts +++ b/ui/src/proxy/blog/blog.ts @@ -8,7 +8,7 @@ export interface BlogPost { contentEn?: string summary: string coverImage?: string - author: { + employee: { id: string name: string avatar?: string @@ -75,6 +75,6 @@ export interface BlogListParams { categoryId?: string tag?: string search?: string - authorId?: string + employeeId?: string sortBy?: 'latest' | 'popular' | 'trending' } diff --git a/ui/src/proxy/intranet/models.ts b/ui/src/proxy/intranet/models.ts index cd49cb95..51ea1ba8 100644 --- a/ui/src/proxy/intranet/models.ts +++ b/ui/src/proxy/intranet/models.ts @@ -53,7 +53,7 @@ export interface EventDto { // Etkinlik Yorumu export interface EventCommentDto { id: string - author: EmployeeDto + employee: EmployeeDto content: string creationTime: Date likes: number diff --git a/ui/src/views/forum/forum/CreateTopicModal.tsx b/ui/src/views/forum/forum/CreateTopicModal.tsx index 39338414..ceefdca7 100644 --- a/ui/src/views/forum/forum/CreateTopicModal.tsx +++ b/ui/src/views/forum/forum/CreateTopicModal.tsx @@ -1,4 +1,4 @@ -import { FaTimes } from 'react-icons/fa'; +import { FaTimes } from 'react-icons/fa' import { useStoreState } from '@/store/store' import { useLocalization } from '@/utils/hooks/useLocalization' import { Field, FieldProps, Form, Formik } from 'formik' @@ -61,6 +61,7 @@ export function CreateTopicModal({ onClose, onSubmit }: CreateTopicModalProps) { label={translate('::App.Forum.TopicManagement.Baslik')} invalid={errors.title && touched.title} errorMessage={errors.title} + asterisk > {({ field }: FieldProps) => ( diff --git a/ui/src/views/public/Blog.tsx b/ui/src/views/public/Blog.tsx index af620c09..712ffde3 100644 --- a/ui/src/views/public/Blog.tsx +++ b/ui/src/views/public/Blog.tsx @@ -194,7 +194,7 @@ const Blog = () => {
- {post.author.name} + {post.employee.name}
diff --git a/ui/src/views/public/BlogDetail.tsx b/ui/src/views/public/BlogDetail.tsx index 6a22b6d7..84dc49dc 100644 --- a/ui/src/views/public/BlogDetail.tsx +++ b/ui/src/views/public/BlogDetail.tsx @@ -11,7 +11,7 @@ import { Loading } from '@/components/shared' interface PostData { image?: string - author?: { + employee?: { id: string name: string avatar?: string @@ -38,7 +38,7 @@ const BlogDetail: React.FC = () => { setBlogPost(response) setPostData({ image: response.coverImage, - author: response.author, + employee: response.employee, }) } else { setError('Blog post ID is missing.') @@ -106,7 +106,7 @@ const BlogDetail: React.FC = () => {
- {postData.author?.name} + {postData.employee?.name}
{blogPost.publishedAt && showDbDateAsIs(blogPost.publishedAt)}