From 850e81862b96613e0497f83aacb08ccd42bbc544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96zt=C3=BCrk?= Date: Sat, 25 Oct 2025 20:28:24 +0300 Subject: [PATCH] Hr Announcements --- .../Seeds/HostData.json | 500 ++++++++++++--- .../Seeds/ListFormsSeeder.cs | 578 ++++++++++++++++++ .../Enums/TableNameEnum.cs | 3 +- .../PlatformConsts.cs | 1 + .../TableNameResolver.cs | 1 + .../Kurs.Platform.Domain/Data/SeedConsts.cs | 1 + .../Entities/Tenant/Hr/Announcement.cs | 26 + .../EntityFrameworkCore/PlatformDbContext.cs | 17 + ....cs => 20251025170721_Initial.Designer.cs} | 106 +++- ...8_Initial.cs => 20251025170721_Initial.cs} | 68 ++- .../PlatformDbContextModelSnapshot.cs | 104 ++++ .../Tenants/Seeds/TenantData.json | 57 ++ .../Tenants/TenantDataSeeder.cs | 36 +- .../Tenants/TenantSeederDto.cs | 16 + ui/src/mocks/mockIntranet.ts | 136 ++--- 15 files changed, 1478 insertions(+), 172 deletions(-) create mode 100644 api/src/Kurs.Platform.Domain/Entities/Tenant/Hr/Announcement.cs rename api/src/Kurs.Platform.EntityFrameworkCore/Migrations/{20251024144858_Initial.Designer.cs => 20251025170721_Initial.Designer.cs} (99%) rename api/src/Kurs.Platform.EntityFrameworkCore/Migrations/{20251024144858_Initial.cs => 20251025170721_Initial.cs} (99%) diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/HostData.json b/api/src/Kurs.Platform.DbMigrator/Seeds/HostData.json index b8799d14..9b3f2395 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/HostData.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/HostData.json @@ -11,7 +11,11 @@ "descriptionKey": "Abp.Localization.DefaultLanguage.Description", "defaultValue": "tr", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.SiteManagement", @@ -45,7 +49,11 @@ "descriptionKey": "Abp.Timing.TimeZone.Description", "defaultValue": "Turkey Standard Time", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.SiteManagement", @@ -201,7 +209,11 @@ "descriptionKey": "App.SiteManagement.Theme.Style.Description", "defaultValue": "dx.light.compact", "isVisibleToClients": true, - "providers": ["U", "G", "D"], + "providers": [ + "U", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.SiteManagement", @@ -249,7 +261,10 @@ "descriptionKey": "App.SiteManagement.General.NewMemberNotificationEmails.Description", "defaultValue": "system@sozsoft.com", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.SiteManagement", @@ -265,7 +280,10 @@ "descriptionKey": "App.SiteManagement.General.TimedLoginEmails.Description", "defaultValue": "system@sozsoft.com", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.SiteManagement", @@ -281,7 +299,11 @@ "descriptionKey": "App.Sender.Sms.PostaGuvercini.Url.Description", "defaultValue": "https://www.postaguvercini.com/api_http", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.Sender", @@ -297,7 +319,11 @@ "descriptionKey": "App.Sender.Sms.PostaGuvercini.Username.Description", "defaultValue": "2AIlj4QlCrvlbDDBS/712A==", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": true, "mainGroupKey": "App.Sender", @@ -313,7 +339,11 @@ "descriptionKey": "App.Sender.Sms.PostaGuvercini.Password.Description", "defaultValue": "oTuwyZM9sxfJI+jDH5wJAw==", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": true, "mainGroupKey": "App.Sender", @@ -329,7 +359,11 @@ "descriptionKey": "App.Sender.WhatsApp.Url.Description", "defaultValue": "https://graph.facebook.com/v21.0", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.Sender", @@ -345,7 +379,11 @@ "descriptionKey": "App.Sender.WhatsApp.PhoneNumberId.Description", "defaultValue": "442035112335974", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.Sender", @@ -361,7 +399,11 @@ "descriptionKey": "App.Sender.WhatsApp.Token.Description", "defaultValue": "EAANoftqZAJ64BO5oPwXPqniUtNGF70u8TKvQVzGZBaYQh5UY8fYrgQkcXP9UbQUqT9PWRah1L7TzcBIiWQMacT8AkmZB33AP1begLoywIZCsQSdBSUz21GQaCowfVosYgBoXSyqH8irSBPQDLIjxxVxrC2n76SD9X6zPXeHgOqIPY92DqJXplstWrlhtZCAZDZD", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.Sender", @@ -377,7 +419,11 @@ "descriptionKey": "App.Sender.WhatsApp.TemplateName.Description", "defaultValue": "kurs_platform_notification", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.Sender", @@ -393,7 +439,10 @@ "descriptionKey": "App.Sender.Rocket.Url.Description", "defaultValue": "https://chat.sozsoft.com/api/v1", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.Sender", @@ -409,7 +458,10 @@ "descriptionKey": "App.Sender.Rocket.UserId.Description", "defaultValue": "LfpzPjzag4QJXm84N", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.Sender", @@ -425,7 +477,10 @@ "descriptionKey": "App.Sender.Rocket.Token.Description", "defaultValue": "jvqALawvXn0Q7c6FfHJV3h58DCHDfQLgFF5y7oIc7oc", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "App.Sender", @@ -441,7 +496,11 @@ "descriptionKey": "Abp.Mailing.DefaultFromDisplayName.Description", "defaultValue": "Kurs", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -457,7 +516,11 @@ "descriptionKey": "Abp.Mailing.DefaultFromAddress.Description", "defaultValue": "system@sozsoft.com", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -473,7 +536,11 @@ "descriptionKey": "Abp.Mailing.Smtp.UserName.Description", "defaultValue": "system@sozsoft.com", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -489,7 +556,11 @@ "descriptionKey": "Abp.Mailing.Smtp.Password.Description", "defaultValue": "QT9L7BCl1CT/1Hq19HoSlQ==", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": true, "mainGroupKey": "Abp.Mailing", @@ -505,7 +576,11 @@ "descriptionKey": "Abp.Mailing.Smtp.Host.Description", "defaultValue": "127.0.0.1", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -521,7 +596,11 @@ "descriptionKey": "Abp.Mailing.Smtp.Port.Description", "defaultValue": "25", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -537,7 +616,11 @@ "descriptionKey": "Abp.Mailing.Smtp.Domain.Description", "defaultValue": "sozsoft.com", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -553,7 +636,11 @@ "descriptionKey": "Abp.Mailing.Smtp.EnableSsl.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -569,7 +656,11 @@ "descriptionKey": "Abp.Mailing.AWS.Profile.Description", "defaultValue": "mail-sdk-user", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -585,7 +676,11 @@ "descriptionKey": "Abp.Mailing.AWS.Region.Description", "defaultValue": "eu-central-1", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -601,7 +696,11 @@ "descriptionKey": "Abp.Mailing.AWS.AccessKey.Description", "defaultValue": "aXW8L21rP6dPO6Txj76Be2FCpWRBa25EMrSAVL76", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -617,7 +716,11 @@ "descriptionKey": "Abp.Mailing.AWS.AccessKeyId.Description", "defaultValue": "AKIATULUYBLX4IY3S2P1", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Mailing", @@ -633,7 +736,10 @@ "descriptionKey": "Abp.Account.IsSelfRegistrationEnabled.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Account", @@ -649,7 +755,10 @@ "descriptionKey": "Abp.Account.EnableLocalLogin.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Account", @@ -665,7 +774,11 @@ "descriptionKey": "Abp.Account.TwoFactor.Enabled.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Account", @@ -681,7 +794,10 @@ "descriptionKey": "Abp.Account.Captcha.MaxFailedAccessAttempts.Description", "defaultValue": "3", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Account", @@ -697,7 +813,10 @@ "descriptionKey": "Abp.Account.Captcha.EndPoint.Description", "defaultValue": "https://challenges.cloudflare.com/turnstile/v0/siteverify", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Account", @@ -713,7 +832,10 @@ "descriptionKey": "Abp.Account.Captcha.SiteKey.Description", "defaultValue": "0x4AAAAAAAGadwQME-GSYuJU", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Account", @@ -729,7 +851,10 @@ "descriptionKey": "Abp.Account.Captcha.SecretKey.Description", "defaultValue": "0x4AAAAAAAGad_f_WP47IcNBs9FTu5DhNX8", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Account", @@ -745,7 +870,11 @@ "descriptionKey": "Abp.Identity.Profile.General.RequireVerifiedAccount.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -761,7 +890,11 @@ "descriptionKey": "Abp.Identity.Profile.General.BlacklistedEmailProviders.Description", "defaultValue": "gmail.com\r\nyahoo.com\r\nhotmail.com", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -777,7 +910,11 @@ "descriptionKey": "Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -793,7 +930,11 @@ "descriptionKey": "Abp.Identity.Password.PasswordChangePeriodDays.Description", "defaultValue": "0", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -809,7 +950,11 @@ "descriptionKey": "Abp.Identity.Password.RequiredLength.Description", "defaultValue": "6", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -825,7 +970,11 @@ "descriptionKey": "Abp.Identity.Password.RequiredUniqueChars.Description", "defaultValue": "1", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -841,7 +990,11 @@ "descriptionKey": "Abp.Identity.Password.RequireNonAlphanumeric.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -857,7 +1010,11 @@ "descriptionKey": "Abp.Identity.Password.RequireLowercase.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -873,7 +1030,11 @@ "descriptionKey": "Abp.Identity.Password.RequireUppercase.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -889,7 +1050,11 @@ "descriptionKey": "Abp.Identity.Password.RequireDigit.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -905,7 +1070,11 @@ "descriptionKey": "Abp.Identity.Lockout.AllowedForNewUsers.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -921,7 +1090,11 @@ "descriptionKey": "Abp.Identity.Lockout.LockoutDuration.Description", "defaultValue": "300", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -937,7 +1110,11 @@ "descriptionKey": "Abp.Identity.Lockout.MaxFailedAccessAttempts.Description", "defaultValue": "5", "isVisibleToClients": false, - "providers": ["T", "G", "D"], + "providers": [ + "T", + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -953,7 +1130,10 @@ "descriptionKey": "Abp.Identity.SignIn.RequireConfirmedEmail.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -969,7 +1149,10 @@ "descriptionKey": "Abp.Identity.SignIn.RequireConfirmedPhoneNumber.Description", "defaultValue": "False", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -985,7 +1168,10 @@ "descriptionKey": "Abp.Identity.User.IsUserNameUpdateEnabled.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -1001,7 +1187,10 @@ "descriptionKey": "Abp.Identity.User.IsEmailUpdateEnabled.Description", "defaultValue": "True", "isVisibleToClients": false, - "providers": ["G", "D"], + "providers": [ + "G", + "D" + ], "isInherited": false, "isEncrypted": false, "mainGroupKey": "Abp.Identity", @@ -1224,7 +1413,6 @@ "en": "Tests", "tr": "Testler" }, - { "resourceName": "Platform", "key": "App.Participant", @@ -7645,6 +7833,12 @@ "tr": "Servis Rotaları", "en": "Shuttle Routes" }, + { + "resourceName": "Platform", + "key": "App.Hr.Announcement", + "tr": "Duyurular", + "en": "Announcements" + }, { "resourceName": "Platform", "key": "App.Definitions.Information", @@ -12424,14 +12618,18 @@ "path": "/admin/menuManager", "componentPath": "@/views/menu/MenuManager", "routeType": "protected", - "authority": ["App.Menus.Manager"] + "authority": [ + "App.Menus.Manager" + ] }, { "key": "admin.listFormManagement.wizard", "path": "/admin/listform/wizard", "componentPath": "@/views/admin/listForm/Wizard", "routeType": "protected", - "authority": ["App.Listforms.Wizard"] + "authority": [ + "App.Listforms.Wizard" + ] }, { "key": "admin.listFormManagement.edit", @@ -12445,14 +12643,18 @@ "path": "/admin/forumManagement", "componentPath": "@/views/forum/Management", "routeType": "protected", - "authority": ["App.ForumManagement"] + "authority": [ + "App.ForumManagement" + ] }, { "key": "admin.ai", "path": "/admin/ai", "componentPath": "@/views/ai/Assistant", "routeType": "protected", - "authority": ["Abp.Identity.Ai"] + "authority": [ + "Abp.Identity.Ai" + ] }, { "key": "admin.profile.general", @@ -12494,28 +12696,36 @@ "path": "/admin/settings", "componentPath": "@/views/settings/Settings", "routeType": "protected", - "authority": ["App.Setting"] + "authority": [ + "App.Setting" + ] }, { "key": "admin.identity.user.detail", "path": "/admin/users/detail/:userId", "componentPath": "@/views/admin/user-management/Details", "routeType": "protected", - "authority": ["AbpIdentity.Users.Update"] + "authority": [ + "AbpIdentity.Users.Update" + ] }, { "key": "admin.identity.ous", "path": "/admin/ous", "componentPath": "@/views/admin/organization-unit/OrganizationUnits", "routeType": "protected", - "authority": ["Abp.Identity.OrganizationUnits"] + "authority": [ + "Abp.Identity.OrganizationUnits" + ] }, { "key": "admin.forum", "path": "/admin/forum", "componentPath": "@/views/forum/Forum", "routeType": "protected", - "authority": ["App.ForumManagement.Publish"] + "authority": [ + "App.ForumManagement.Publish" + ] }, { "key": "admin.list", @@ -12557,156 +12767,199 @@ "path": "/admin/developerkit", "componentPath": "@/views/developerKit/DashboardPage", "routeType": "protected", - "authority": ["App.DeveloperKit"] + "authority": [ + "App.DeveloperKit" + ] }, { "key": "admin.developerkit.entities", "path": "/admin/developerkit/entities", "componentPath": "@/views/developerKit/EntityPage", "routeType": "protected", - "authority": ["App.DeveloperKit.Entity"] + "authority": [ + "App.DeveloperKit.Entity" + ] }, { "key": "admin.developerkit.entities.new", "path": "/admin/developerkit/entities/new", "componentPath": "@/views/developerKit/EntityDetailPage", "routeType": "protected", - "authority": ["App.DeveloperKit.Entity"] + "authority": [ + "App.DeveloperKit.Entity" + ] }, { "key": "admin.developerkit.entities.edit", "path": "/admin/developerkit/entities/edit/:id", "componentPath": "@/views/developerKit/EntityDetailPage", "routeType": "protected", - "authority": ["App.DeveloperKit.Entity"] + "authority": [ + "App.DeveloperKit.Entity" + ] }, { "key": "admin.developerkit.migrations", "path": "/admin/developerkit/migrations", "componentPath": "@/views/developerKit/MigrationPage", "routeType": "protected", - "authority": ["App.DeveloperKit.Migrations"] + "authority": [ + "App.DeveloperKit.Migrations" + ] }, { "key": "admin.developerkit.endpoints", "path": "/admin/developerkit/endpoints", "componentPath": "@/views/developerKit/EndpointPage", "routeType": "protected", - "authority": ["App.DeveloperKit.Endpoints"] + "authority": [ + "App.DeveloperKit.Endpoints" + ] }, { "key": "admin.developerkit.components", "path": "/admin/developerkit/components", "componentPath": "@/views/developerKit/ComponentPage", "routeType": "protected", - "authority": ["App.DeveloperKit.Components"] + "authority": [ + "App.DeveloperKit.Components" + ] }, { "key": "admin.developerkit.components.new", "path": "/admin/developerkit/components/new", "componentPath": "@/views/developerKit/ComponentDetailPage", "routeType": "protected", - "authority": ["App.DeveloperKit.Components"] + "authority": [ + "App.DeveloperKit.Components" + ] }, { "key": "admin.developerkit.components.view", "path": "/admin/developerkit/components/view/:id", "componentPath": "@/views/developerKit/ComponentDetailPage", "routeType": "protected", - "authority": ["App.DeveloperKit.Components"] + "authority": [ + "App.DeveloperKit.Components" + ] }, { "key": "admin.developerkit.components.edit", "path": "/admin/developerkit/components/edit/:id", "componentPath": "@/views/developerKit/CodePage", "routeType": "protected", - "authority": ["App.DeveloperKit.Components"] + "authority": [ + "App.DeveloperKit.Components" + ] }, { "key": "admin.reportManagement", "path": "/admin/reports/management", "componentPath": "@/views/report/DashboardPage", "routeType": "protected", - "authority": ["App.Reports.Management"] + "authority": [ + "App.Reports.Management" + ] }, { "key": "admin.reports.view", "path": "/admin/reports/:id", "componentPath": "@/views/report/ReportViewerPage", "routeType": "protected", - "authority": ["App.Reports.Categories"] + "authority": [ + "App.Reports.Categories" + ] }, { "key": "admin.coordinator.classroom.dashboard", "path": "/admin/coordinator/classroom/dashboard", "componentPath": "@/views/coordinator/Classroom/Dashboard", "routeType": "protected", - "authority": ["App.Coordinator.Classroom.Dashboard"] + "authority": [ + "App.Coordinator.Classroom.Dashboard" + ] }, { "key": "admin.coordinator.classroom.classes", "path": "/admin/coordinator/classroom/classes", "componentPath": "@/views/coordinator/Classroom/ClassList", "routeType": "protected", - "authority": ["App.Coordinator.Classroom.List"] + "authority": [ + "App.Coordinator.Classroom.List" + ] }, { "key": "admin.coordinator.classroom.classroom", "path": "/admin/coordinator/classroom/room/:id", "componentPath": "@/views/coordinator/Classroom/RoomDetail", "routeType": "protected", - "authority": ["App.Coordinator.Classroom.RoomDetail"] + "authority": [ + "App.Coordinator.Classroom.RoomDetail" + ] }, { "key": "admin.coordinator.classroom.planning", "path": "/admin/coordinator/classroom/planning/:id", "componentPath": "@/views/coordinator/Classroom/PlanningPage", "routeType": "protected", - "authority": ["App.Coordinator.Classroom.Planning"] + "authority": [ + "App.Coordinator.Classroom.Planning" + ] }, { "key": "admin.coordinator.exams", "path": "/admin/coordinator/exams", "componentPath": "@/views/coordinator/Exams", "routeType": "protected", - "authority": ["App.Coordinator.Exams"] + "authority": [ + "App.Coordinator.Exams" + ] }, { "key": "admin.coordinator.examDetail", "path": "/admin/coordinator/exam/:id", "componentPath": "@/views/coordinator/ExamInterface/ExamInterface", "routeType": "protected", - "authority": ["App.Coordinator.Exams"] + "authority": [ + "App.Coordinator.Exams" + ] }, { "key": "admin.coordinator.assignments", "path": "/admin/coordinator/assignments", "componentPath": "@/views/coordinator/Assignments", "routeType": "protected", - "authority": ["App.Coordinator.Assignments"] + "authority": [ + "App.Coordinator.Assignments" + ] }, { "key": "admin.coordinator.assignmentDetail", "path": "/admin/coordinator/assignment/:id", "componentPath": "@/views/coordinator/ExamInterface/ExamInterface", "routeType": "protected", - "authority": ["App.Coordinator.Assignments"] + "authority": [ + "App.Coordinator.Assignments" + ] }, { "key": "admin.coordinator.tests", "path": "/admin/coordinator/tests", "componentPath": "@/views/coordinator/Tests", "routeType": "protected", - "authority": ["App.Coordinator.Tests"] + "authority": [ + "App.Coordinator.Tests" + ] }, { "key": "admin.coordinator.testDetail", "path": "/admin/coordinator/test/:id", "componentPath": "@/views/coordinator/ExamInterface/PDFTestInterface", "routeType": "protected", - "authority": ["App.Coordinator.Tests"] + "authority": [ + "App.Coordinator.Tests" + ] }, - { "key": "admin.supplychain.materialTypes", "path": "/admin/supplychain/materials/types", @@ -14502,7 +14755,6 @@ "RequiredPermissionName": "App.Coordinator.Tests", "IsDisabled": false }, - { "ParentCode": null, "Code": "App.Crm", @@ -15063,7 +15315,6 @@ "RequiredPermissionName": null, "IsDisabled": false }, - { "ParentCode": "App.Hr.Events", "Code": "App.Hr.Events.EventType", @@ -15134,7 +15385,16 @@ "RequiredPermissionName": "App.Hr.ShuttleRoute", "IsDisabled": false }, - + { + "ParentCode": "App.Hr", + "Code": "App.Hr.Announcement", + "DisplayName": "App.Hr.Announcement", + "Order": 17, + "Url": "/admin/list/list-announcement", + "Icon": "FcSpeaker", + "RequiredPermissionName": "App.Hr.Announcement", + "IsDisabled": false + }, { "ParentCode": null, "Code": "App.Mrp", @@ -21797,7 +22057,6 @@ "MultiTenancySide": 3, "MenuGroup": "Kurs" }, - { "GroupName": "App.Coordinator", "Name": "App.Coordinator.Classroom", @@ -21870,7 +22129,6 @@ "MultiTenancySide": 2, "MenuGroup": "Kurs" }, - { "GroupName": "App.SupplyChain", "Name": "App.SupplyChain.MaterialTypes", @@ -25021,7 +25279,69 @@ "MultiTenancySide": 3, "MenuGroup": "Kurs" }, - + { + "GroupName": "App.Hr", + "Name": "App.Hr.Announcement", + "ParentName": null, + "DisplayName": "App.Hr.Announcement", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Kurs" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Announcement.Create", + "ParentName": "App.Hr.Announcement", + "DisplayName": "Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Kurs" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Announcement.Update", + "ParentName": "App.Hr.Announcement", + "DisplayName": "Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Kurs" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Announcement.Delete", + "ParentName": "App.Hr.Announcement", + "DisplayName": "Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Kurs" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Announcement.Export", + "ParentName": "App.Hr.Announcement", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Kurs" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Announcement.Import", + "ParentName": "App.Hr.Announcement", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Kurs" + }, + { + "GroupName": "App.Hr", + "Name": "App.Hr.Announcement.Activity", + "ParentName": "App.Hr.Announcement", + "DisplayName": "Activity", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Kurs" + }, { "GroupName": "App.Crm", "Name": "App.Crm.Customer", @@ -26346,4 +26666,4 @@ "MenuGroup": "Erp" } ] -} +} \ No newline at end of file diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs b/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs index 5dc049fb..f023db12 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Data; using System.Text.Json; using System.Threading.Tasks; +using DocumentFormat.OpenXml.Spreadsheet; using Kurs.Languages.Languages; using Kurs.Platform.Entities; using Kurs.Platform.Enums; @@ -39760,6 +39761,583 @@ public class ListFormsSeeder : IDataSeedContributor, ITransientDependency } #endregion + #region Announncements + if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == ListFormCodes.Lists.Announcement)) + { + var listFormAnnouncement = await _listFormRepository.InsertAsync( + new ListForm() + { + ListFormType = ListFormTypeEnum.List, + IsSubForm = true, + LayoutJson = JsonSerializer.Serialize(new LayoutDto() + { + Grid = true, + Card = true, + Pivot = true, + Chart = true, + DefaultLayout = "grid", + CardLayoutColumn = 3 + }), + CultureName = LanguageCodes.En, + ListFormCode = ListFormCodes.Lists.Announcement, + Name = AppCodes.Hr.Announcement, + Title = AppCodes.Hr.Announcement, + DataSourceCode = SeedConsts.DataSources.DefaultCode, + IsTenant = true, + IsBranch = false, + IsOrganizationUnit = false, + Description = AppCodes.Hr.Announcement, + SelectCommandType = SelectCommandTypeEnum.Table, + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Announcement)), + KeyFieldName = "Id", + KeyFieldDbSourceType = DbType.Guid, + DefaultFilter = "\"IsDeleted\" = 'false'", + SortMode = GridOptions.SortModeSingle, + FilterRowJson = JsonSerializer.Serialize(new GridFilterRowDto { Visible = true }), + HeaderFilterJson = JsonSerializer.Serialize(new { Visible = true }), + SearchPanelJson = JsonSerializer.Serialize(new { Visible = true }), + GroupPanelJson = JsonSerializer.Serialize(new { Visible = true }), + SelectionJson = JsonSerializer.Serialize(new SelectionDto + { + Mode = GridOptions.SelectionModeSingle, + AllowSelectAll = false + }), + ColumnOptionJson = JsonSerializer.Serialize(new + { + ColumnFixingEnabled = true, + ColumnAutoWidth = true, + ColumnChooserEnabled = true, + AllowColumnResizing = true, + AllowColumnReordering = true, + ColumnResizingMode = "widget", + }), + PermissionJson = JsonSerializer.Serialize(new PermissionCrudDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + D = AppCodes.Hr.Announcement + ".Delete", + E = AppCodes.Hr.Announcement + ".Export", + I = AppCodes.Hr.Announcement + ".Import", + A = AppCodes.Hr.Announcement + ".Activity", + }), + DeleteCommand = $"UPDATE \"{TableNameResolver.GetFullTableName(nameof(TableNameEnum.Announcement))}\" SET \"DeleterId\"=@DeleterId, \"DeletionTime\"=CURRENT_TIMESTAMP, \"IsDeleted\"='true' WHERE \"Id\"=@Id", + DeleteFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { + FieldName = "DeleterId", + FieldDbType = DbType.Guid, + Value = "@USERID", + CustomValueType = FieldCustomValueTypeEnum.CustomKey }, + new() { + FieldName = "Id", + FieldDbType = DbType.Guid, + Value = "@ID", + CustomValueType = FieldCustomValueTypeEnum.CustomKey } + }), + PagerOptionJson = JsonSerializer.Serialize(new GridPagerOptionDto + { + Visible = true, + AllowedPageSizes = "10,20,50,100", + ShowPageSizeSelector = true, + ShowNavigationButtons = true, + ShowInfo = false, + InfoText = "Page {0} of {1} ({2} items)", + DisplayMode = GridColumnOptions.PagerDisplayModeAdaptive, + ScrollingMode = GridColumnOptions.ScrollingModeStandard, + LoadPanelEnabled = "auto", + LoadPanelText = "Loading..." + }), + EditingOptionJson = JsonSerializer.Serialize(new GridEditingDto + { + Popup = new GridEditingPopupDto() + { + Title = "Announcement Form", + Width = 500, + Height = 600 + }, + AllowDeleting = true, + AllowAdding = true, + AllowUpdating = true, + SendOnlyChangedFormValuesUpdate = false, + }), + InsertFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { + FieldName = "CreationTime", + FieldDbType = DbType.DateTime, + Value = "@NOW", + CustomValueType = FieldCustomValueTypeEnum.CustomKey }, + new() { + FieldName = "CreatorId", + FieldDbType = DbType.Guid, + Value = "@USERID", + CustomValueType = FieldCustomValueTypeEnum.CustomKey }, + new() { + FieldName = "IsDeleted", + FieldDbType = DbType.Boolean, + Value = "false", + CustomValueType = FieldCustomValueTypeEnum.Value } + }), + EditingFormJson = JsonSerializer.Serialize(new List() + { + new() { + Order=1, ColCount=1, ColSpan=2, ItemType="group", Items = + [ + new EditingFormItemDto { Order = 1, DataField = "Title", IsRequired = true, EditorType2=EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 2, DataField = "Excerpt", IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 3, DataField = "Content", IsRequired = true, EditorType2 = EditorTypes.dxHtmlEditor, EditorOptions = EditorOptionValues.HtmlEditorOptions }, + new EditingFormItemDto { Order = 4, DataField = "ImageUrl", EditorType2 = EditorTypes.dxTagBox }, + new EditingFormItemDto { Order = 5, DataField = "Category", IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 6, DataField = "EmployeeId", IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 7, DataField = "PublishDate", EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 8, DataField = "ExpiryDate", IsRequired = true, EditorType2 = EditorTypes.dxDateBox }, + new EditingFormItemDto { Order = 9, DataField = "IsPinned", EditorType2 = EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 10, DataField = "Departments", EditorType2 = EditorTypes.dxTagBox }, + new EditingFormItemDto { Order = 11, DataField = "Attachments", EditorType2 = EditorTypes.dxTagBox } + ] + } + }), + FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] + { + new() { + FieldName = "IsPinned", + FieldDbType = DbType.Boolean, + Value = "false", + CustomValueType = FieldCustomValueTypeEnum.Value }, + new() { + FieldName = "PublishDate", + FieldDbType = DbType.Date, + Value = "@NOW", + CustomValueType = FieldCustomValueTypeEnum.CustomKey } + }) + } + ); + + #region Announcement Fields + await _listFormFieldRepository.InsertManyAsync([ + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "Id", + Width = 100, + ListOrderNo = 1, + Visible = false, + IsActive = true, + IsDeleted = false, + SortIndex = 0, + ValidationRuleJson = JsonSerializer.Serialize(new ValidationRuleDto[] { + new ValidationRuleDto() { Type = Enum.GetName(UiColumnValidationRuleTypeEnum.required) } + }), + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Title", + Width = 250, + ListOrderNo = 2, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = JsonSerializer.Serialize(new ValidationRuleDto[] { + new ValidationRuleDto() { Type = Enum.GetName(UiColumnValidationRuleTypeEnum.required) } + }), + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Excerpt", + Width = 300, + ListOrderNo = 3, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = JsonSerializer.Serialize(new ValidationRuleDto[] { + new ValidationRuleDto() { Type = Enum.GetName(UiColumnValidationRuleTypeEnum.required) } + }), + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Content", + Width = 400, + ListOrderNo = 4, + Visible = false, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = JsonSerializer.Serialize(new ValidationRuleDto[] { + new ValidationRuleDto() { Type = Enum.GetName(UiColumnValidationRuleTypeEnum.required) } + }), + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "ImageUrl", + Width = 200, + ListOrderNo = 5, + Visible = false, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Category", + Width = 100, + ListOrderNo = 6, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.StaticData, + DisplayExpr = "name", + ValueExpr = "key", + LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { + new () { Key= "general", Name= "General" }, + new () { Key= "event", Name= "Event" }, + new () { Key= "urgent", Name= "Urgent" }, + new () { Key= "announcement", Name= "Announcement" }, + }), + }), + ValidationRuleJson = JsonSerializer.Serialize(new ValidationRuleDto[] { + new ValidationRuleDto() { Type = Enum.GetName(UiColumnValidationRuleTypeEnum.required) } + }), + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "EmployeeId", + Width = 100, + ListOrderNo = 7, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "name", + ValueExpr = "key", + LookupQuery = LookUpQueryValues.EmployeeValues + }), + ValidationRuleJson = JsonSerializer.Serialize(new ValidationRuleDto[] { + new ValidationRuleDto() { Type = Enum.GetName(UiColumnValidationRuleTypeEnum.required) } + }), + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "PublishDate", + Width = 100, + ListOrderNo = 8, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = JsonSerializer.Serialize(new ValidationRuleDto[] { + new ValidationRuleDto() { Type = Enum.GetName(UiColumnValidationRuleTypeEnum.required) } + }), + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "ExpiryDate", + Width = 100, + ListOrderNo = 9, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Boolean, + FieldName = "IsPinned", + Width = 100, + ListOrderNo = 10, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Departments", + Width = 100, + ListOrderNo = 11, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "name", + ValueExpr = "key", + LookupQuery = LookUpQueryValues.DepartmentValues + }), + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + new() { + ListFormCode = listFormAnnouncement.ListFormCode, + RoleId = null, + UserId = null, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Attachments", + Width = 100, + ListOrderNo = 12, + Visible = false, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = JsonSerializer.Serialize(new ColumnCustomizationDto + { + AllowReordering = true, + }), + PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto + { + C = AppCodes.Hr.Announcement + ".Create", + R = AppCodes.Hr.Announcement, + U = AppCodes.Hr.Announcement + ".Update", + E = true, + I = true, + Deny = false + }), + PivotSettingsJson = JsonSerializer.Serialize(new ListFormFieldPivotSettingsDto + { + IsPivot = true + }) + }, + ]); + #endregion + } + #endregion + #endregion } } diff --git a/api/src/Kurs.Platform.Domain.Shared/Enums/TableNameEnum.cs b/api/src/Kurs.Platform.Domain.Shared/Enums/TableNameEnum.cs index 589ff2c4..3bcaf566 100644 --- a/api/src/Kurs.Platform.Domain.Shared/Enums/TableNameEnum.cs +++ b/api/src/Kurs.Platform.Domain.Shared/Enums/TableNameEnum.cs @@ -120,5 +120,6 @@ public enum TableNameEnum Training, Certificate, Reservation, - ShuttleRoute + ShuttleRoute, + Announcement } \ No newline at end of file diff --git a/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs b/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs index 0cf5a6ea..1ab81a3b 100644 --- a/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs +++ b/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs @@ -531,6 +531,7 @@ public static class PlatformConsts public const string Training = "list-training"; public const string Reservation = "list-reservation"; public const string ShuttleRoute = "list-shuttleroute"; + public const string Announcement = "list-announcement"; } } diff --git a/api/src/Kurs.Platform.Domain.Shared/TableNameResolver.cs b/api/src/Kurs.Platform.Domain.Shared/TableNameResolver.cs index 1547708d..fb0a4b23 100644 --- a/api/src/Kurs.Platform.Domain.Shared/TableNameResolver.cs +++ b/api/src/Kurs.Platform.Domain.Shared/TableNameResolver.cs @@ -138,6 +138,7 @@ public static class TableNameResolver { nameof(TableNameEnum.Meal), (PlatformConsts.TablePrefix.BranchByName, MenuPrefix.Hr) }, { nameof(TableNameEnum.Reservation), (PlatformConsts.TablePrefix.TenantByName, MenuPrefix.Hr) }, { nameof(TableNameEnum.ShuttleRoute), (PlatformConsts.TablePrefix.TenantByName, MenuPrefix.Hr) }, + { nameof(TableNameEnum.Announcement), (PlatformConsts.TablePrefix.TenantByName, MenuPrefix.Hr) }, // 🔹 ACCOUNTING { nameof(TableNameEnum.Bank), (PlatformConsts.TablePrefix.TenantByName, MenuPrefix.Accounting) }, diff --git a/api/src/Kurs.Platform.Domain/Data/SeedConsts.cs b/api/src/Kurs.Platform.Domain/Data/SeedConsts.cs index 10a11cc7..5fd62996 100644 --- a/api/src/Kurs.Platform.Domain/Data/SeedConsts.cs +++ b/api/src/Kurs.Platform.Domain/Data/SeedConsts.cs @@ -469,6 +469,7 @@ public static class SeedConsts public const string Meal = Default + ".Meal"; public const string Reservation = Default + ".Reservation"; public const string ShuttleRoute = Default + ".ShuttleRoute"; + public const string Announcement = Default + ".Announcement"; } public static class Accounting diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/Hr/Announcement.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/Hr/Announcement.cs new file mode 100644 index 00000000..07c5a801 --- /dev/null +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/Hr/Announcement.cs @@ -0,0 +1,26 @@ +// Domain/Entities/Announcement.cs +using System; +using System.Collections.Generic; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Kurs.Platform.Entities; + +public class Announcement : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public string Title { get; set; } + public string Excerpt { get; set; } + public string Content { get; set; } + public string ImageUrl { get; set; } + public string Category { get; set; } // Örneğin: "Genel", "Etkinlik", "Duyuru" + public Guid? EmployeeId { get; set; } // Employee referansı metin olarak saklanır + public Employee Employee { get; set; } + public DateTime PublishDate { get; set; } + public DateTime? ExpiryDate { get; set; } + public bool IsPinned { get; set; } + public int ViewCount { get; set; } + public string Departments { get; set; } // ["Yazılım Geliştirme"] + public string Attachments { get; set; } // [{name,url,size}] +} diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index d86dada9..e7731dac 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -181,6 +181,7 @@ public class PlatformDbContext : public DbSet Certificates { get; set; } public DbSet Reservations { get; set; } public DbSet ShuttleRoutes { get; set; } + public DbSet Announcements { get; set; } #endregion @@ -1945,5 +1946,21 @@ public class PlatformDbContext : b.Property(x => x.Capacity).HasDefaultValue(0); b.Property(x => x.Available).HasDefaultValue(0); }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Announcement)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.Title).IsRequired().HasMaxLength(200); + b.Property(x => x.Excerpt).IsRequired().HasMaxLength(500); + b.Property(x => x.Content).IsRequired().HasMaxLength(4000); + b.Property(x => x.ImageUrl).HasMaxLength(500); + b.Property(x => x.Category).IsRequired().HasMaxLength(50); + b.Property(x => x.PublishDate).IsRequired(); + b.Property(x => x.Departments).HasMaxLength(1000); + b.Property(x => x.Attachments).HasMaxLength(2000); + b.Property(x => x.ViewCount).HasDefaultValue(0); + }); } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251024144858_Initial.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251025170721_Initial.Designer.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251024144858_Initial.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251025170721_Initial.Designer.cs index d0638a47..8322fe7b 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251024144858_Initial.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251025170721_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20251024144858_Initial")] + [Migration("20251025170721_Initial")] partial class Initial { /// @@ -707,6 +707,101 @@ namespace Kurs.Platform.Migrations b.ToTable("P_P_AiBot", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.Announcement", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Attachments") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Departments") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Excerpt") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("ExpiryDate") + .HasColumnType("datetime2"); + + b.Property("ImageUrl") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPinned") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("PublishDate") + .HasColumnType("datetime2"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("ViewCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.HasKey("Id"); + + b.HasIndex("EmployeeId"); + + b.ToTable("T_Hr_Announcement", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ApiEndpoint", b => { b.Property("Id") @@ -10480,6 +10575,15 @@ namespace Kurs.Platform.Migrations b.Navigation("NotificationRule"); }); + modelBuilder.Entity("Kurs.Platform.Entities.Announcement", b => + { + b.HasOne("Kurs.Platform.Entities.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId"); + + b.Navigation("Employee"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ApiEndpoint", b => { b.HasOne("Kurs.Platform.Entities.CustomEntity", "Entity") diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251024144858_Initial.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251025170721_Initial.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251024144858_Initial.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251025170721_Initial.cs index e2c361b0..636be507 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251024144858_Initial.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251025170721_Initial.cs @@ -3901,6 +3901,37 @@ namespace Kurs.Platform.Migrations principalColumn: "Id"); }); + migrationBuilder.CreateTable( + name: "T_Hr_Announcement", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Title = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + Excerpt = table.Column(type: "nvarchar(500)", maxLength: 500, nullable: false), + Content = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: false), + ImageUrl = table.Column(type: "nvarchar(500)", maxLength: 500, nullable: true), + Category = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + EmployeeId = table.Column(type: "uniqueidentifier", nullable: true), + PublishDate = table.Column(type: "datetime2", nullable: false), + ExpiryDate = table.Column(type: "datetime2", nullable: true), + IsPinned = table.Column(type: "bit", nullable: false), + ViewCount = table.Column(type: "int", nullable: false, defaultValue: 0), + Departments = table.Column(type: "nvarchar(1000)", maxLength: 1000, nullable: true), + Attachments = table.Column(type: "nvarchar(2000)", maxLength: 2000, 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_T_Hr_Announcement", x => x.Id); + }); + migrationBuilder.CreateTable( name: "T_Hr_CostCenter", columns: table => new @@ -4798,6 +4829,11 @@ namespace Kurs.Platform.Migrations table: "T_Crd_QuestionOption", column: "QuestionId"); + migrationBuilder.CreateIndex( + name: "IX_T_Hr_Announcement_EmployeeId", + table: "T_Hr_Announcement", + column: "EmployeeId"); + migrationBuilder.CreateIndex( name: "IX_T_Hr_Certificate_TrainingId", table: "T_Hr_Certificate", @@ -4953,6 +4989,13 @@ namespace Kurs.Platform.Migrations table: "T_Sas_ReportTemplate", column: "CategoryId"); + migrationBuilder.AddForeignKey( + name: "FK_T_Hr_Announcement_T_Hr_Employee_EmployeeId", + table: "T_Hr_Announcement", + column: "EmployeeId", + principalTable: "T_Hr_Employee", + principalColumn: "Id"); + migrationBuilder.AddForeignKey( name: "FK_T_Hr_CostCenter_T_Hr_Department_DepartmentId", table: "T_Hr_CostCenter", @@ -5000,16 +5043,16 @@ namespace Kurs.Platform.Migrations table: "T_Acc_BankAccount"); migrationBuilder.DropForeignKey( - name: "FK_T_Hr_CostCenter_T_Hr_Department_DepartmentId", + name: "FK_T_Hr_CostCenter_T_Hr_Employee_ResponsibleEmployeeId", table: "T_Hr_CostCenter"); migrationBuilder.DropForeignKey( - name: "FK_T_Hr_Employee_T_Hr_Department_DepartmentId", - table: "T_Hr_Employee"); + name: "FK_T_Hr_Department_T_Hr_Employee_ManagerId", + table: "T_Hr_Department"); migrationBuilder.DropForeignKey( - name: "FK_T_Hr_JobPosition_T_Hr_Department_DepartmentId", - table: "T_Hr_JobPosition"); + name: "FK_T_Hr_CostCenter_T_Hr_Department_DepartmentId", + table: "T_Hr_CostCenter"); migrationBuilder.DropTable( name: "AbpAuditLogActions"); @@ -5245,6 +5288,9 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "T_Crd_QuestionTag"); + migrationBuilder.DropTable( + name: "T_Hr_Announcement"); + migrationBuilder.DropTable( name: "T_Hr_Certificate"); @@ -5446,12 +5492,6 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "T_Acc_Bank"); - migrationBuilder.DropTable( - name: "T_Hr_Department"); - - migrationBuilder.DropTable( - name: "T_Hr_CostCenter"); - migrationBuilder.DropTable( name: "T_Hr_Employee"); @@ -5466,6 +5506,12 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "T_Hr_JobPosition"); + + migrationBuilder.DropTable( + name: "T_Hr_Department"); + + migrationBuilder.DropTable( + name: "T_Hr_CostCenter"); } } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 6fb29e65..c04c5e1c 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -704,6 +704,101 @@ namespace Kurs.Platform.Migrations b.ToTable("P_P_AiBot", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.Announcement", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Attachments") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Departments") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Excerpt") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("ExpiryDate") + .HasColumnType("datetime2"); + + b.Property("ImageUrl") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPinned") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("PublishDate") + .HasColumnType("datetime2"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("ViewCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.HasKey("Id"); + + b.HasIndex("EmployeeId"); + + b.ToTable("T_Hr_Announcement", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ApiEndpoint", b => { b.Property("Id") @@ -10477,6 +10572,15 @@ namespace Kurs.Platform.Migrations b.Navigation("NotificationRule"); }); + modelBuilder.Entity("Kurs.Platform.Entities.Announcement", b => + { + b.HasOne("Kurs.Platform.Entities.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId"); + + b.Navigation("Employee"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ApiEndpoint", b => { b.HasOne("Kurs.Platform.Entities.CustomEntity", "Entity") diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json index c4ba8ae9..9a1a9f18 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json @@ -3572,5 +3572,62 @@ "available": 12, "type": "evening" } + ], + "Announcements": [ + { + "title": "🎉 Yeni Ofis Açılışı", + "content": "Ankara ofisimiz 1 Kasım tarihinde hizmete başlıyor! Tüm çalışanlarımızı açılış törenimize davet ediyoruz.", + "excerpt": "Ankara ofisimiz 1 Kasım tarihinde hizmete başlıyor!", + "category": "general", + "employeeCode": "EMP-001", + "publishDate": "12-10-2024", + "isPinned": true, + "viewCount": 156, + "imageUrl": "https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&q=80" + }, + { + "title": "📅 Performans Değerlendirme Dönemi", + "content": "Yıl sonu performans değerlendirmelerimiz 20 Ekim - 5 Kasım tarihleri arasında gerçekleştirilecektir. Lütfen formları zamanında doldurunuz.", + "excerpt": "Yıl sonu performans değerlendirmeleri başlıyor.", + "category": "hr", + "employeeCode": "EMP-002", + "publishDate": "08-10-2024", + "expiryDate": "05-11-2024", + "isPinned": true, + "viewCount": 89, + "departmentCodes": "ÜRT|BAK" + }, + { + "title": "💻 Sistem Bakımı Duyurusu", + "content": "Bu Cumartesi saat 02: 00 - 06: 00 arası sistemlerimizde bakım çalışması yapılacaktır. Bu süre içinde sistemlere erişim sağlanamayacaktır.", + "excerpt": "Cumartesi gecesi planlı bakım çalışması", + "category": "it", + "employeeCode": "EMP-003", + "publishDate": "08-10-2024", + "isPinned": false, + "viewCount": 234 + }, + { + "title": "🎓 React İleri Seviye Eğitimi", + "content": "Yazılım Geliştirme ekibimiz için React İleri Seviye eğitimi 25-26 Ekim tarihlerinde düzenlenecektir. Katılım için IK birimine başvurunuz.", + "excerpt": "React İleri Seviye eğitimi kayıtları başladı", + "category": "event", + "employeeCode": "EMP-003", + "publishDate": "09-10-2024", + "isPinned": false, + "viewCount": 67, + "departmentCodes": "IDR" + }, + { + "title": "⚠️ Güvenlik Politikası Güncellemesi", + "content": "Bilgi güvenliği politikamız güncellenmiştir. Tüm çalışanlarımızın yeni politikayı okuması ve onaylaması gerekmektedir.", + "excerpt": "Güvenlik politikası güncellendi - Onay gerekli", + "category": "urgent", + "employeeCode": "EMP-002", + "publishDate": "04-10-2024", + "isPinned": true, + "viewCount": 312, + "departmentCodes": "BAK|DEP" + } ] } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs index ebee01f6..51eb6f16 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs @@ -76,6 +76,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency private readonly IRepository _trainingRepository; private readonly IRepository _reservationRepository; private readonly IRepository _shuttleRouteRepository; + private readonly IRepository _announcementRepository; public TenantDataSeeder( IRepository repositoryUser, @@ -135,7 +136,8 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency IRepository performans360Repository, IRepository trainingRepository, IRepository reservationRepository, - IRepository shuttleRouteRepository + IRepository shuttleRouteRepository, + IRepository announcementRepository ) { _repositoryUser = repositoryUser; @@ -196,6 +198,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency _trainingRepository = trainingRepository; _reservationRepository = reservationRepository; _shuttleRouteRepository = shuttleRouteRepository; + _announcementRepository = announcementRepository; } private static IConfigurationRoot BuildConfiguration() @@ -1248,5 +1251,36 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency Type = item.Type }, autoSave: true); } + + foreach (var item in items.Announcements) + { + var exists = await _announcementRepository.AnyAsync(x => x.Title == item.Title); + if (exists) + continue; + + var employee = await _employeeRepository.FirstOrDefaultAsync(x => x.Code == item.EmployeeCode); + var targetDepartments = new List(); + + if (item.DepartmentCodes != null) + { + targetDepartments = await _departmentRepository.GetListAsync(x => + item.DepartmentCodes.Split('|', StringSplitOptions.RemoveEmptyEntries).Contains(x.Code)); + } + + await _announcementRepository.InsertAsync(new Announcement + { + Title = item.Title, + Excerpt = item.Excerpt, + Content = item.Content, + ImageUrl = item.ImageUrl, + Category = item.Category, + EmployeeId = employee != null ? employee.Id : null, + PublishDate = item.PublishDate, + ExpiryDate = item.ExpiryDate, + IsPinned = item.IsPinned, + ViewCount = item.ViewCount, + Departments = string.Join("|", targetDepartments.Select(d => d.Id)), + }, autoSave: true); + } } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs index 6c21b0e5..197b37e4 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs @@ -65,8 +65,24 @@ public class TenantSeederDto public List Trainings { get; set; } public List Reservations { get; set; } public List ShuttleRoutes { get; set; } + public List Announcements { get; set; } } +public class AnnouncementSeedDto +{ + public string Title { get; set; } + public string Excerpt { get; set; } + public string Content { get; set; } + public string ImageUrl { get; set; } + public string Category { get; set; } + public string EmployeeCode { get; set; } + public DateTime PublishDate { get; set; } + public DateTime? ExpiryDate { get; set; } + public bool IsPinned { get; set; } + public int ViewCount { get; set; } + public string DepartmentCodes { get; set; } +} + public class ShuttleRouteSeedDto { public string Name { get; set; } diff --git a/ui/src/mocks/mockIntranet.ts b/ui/src/mocks/mockIntranet.ts index dd1dd090..451b291b 100644 --- a/ui/src/mocks/mockIntranet.ts +++ b/ui/src/mocks/mockIntranet.ts @@ -15,74 +15,6 @@ import { SocialPost, } from '@/types/intranet' -export const mockAnnouncements: Announcement[] = [ - { - id: 'ann1', - title: '🎉 Yeni Ofis Açılışı', - content: - 'Ankara ofisimiz 1 Kasım tarihinde hizmete başlıyor! Tüm çalışanlarımızı açılış törenimize davet ediyoruz.', - excerpt: 'Ankara ofisimiz 1 Kasım tarihinde hizmete başlıyor!', - category: 'general', - author: mockEmployees[4], - publishDate: new Date('2024-10-15T09:00:00'), - isPinned: true, - viewCount: 156, - imageUrl: 'https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&q=80', - }, - { - id: 'ann2', - title: '📅 Performans Değerlendirme Dönemi', - content: - 'Yıl sonu performans değerlendirmelerimiz 20 Ekim - 5 Kasım tarihleri arasında gerçekleştirilecektir. Lütfen formları zamanında doldurunuz.', - excerpt: 'Yıl sonu performans değerlendirmeleri başlıyor.', - category: 'hr', - author: mockEmployees[3], - publishDate: new Date('2024-10-18T10:30:00'), - expiryDate: new Date('2024-11-05'), - isPinned: true, - viewCount: 89, - departments: ['Tüm Departmanlar'], - }, - { - id: 'ann3', - title: '💻 Sistem Bakımı Duyurusu', - content: - 'Bu Cumartesi saat 02:00-06:00 arası sistemlerimizde bakım çalışması yapılacaktır. Bu süre içinde sistemlere erişim sağlanamayacaktır.', - excerpt: 'Cumartesi gecesi planlı bakım çalışması', - category: 'it', - author: mockEmployees[2], - publishDate: new Date('2024-10-17T14:00:00'), - isPinned: false, - viewCount: 234, - }, - { - id: 'ann4', - title: '🎓 React İleri Seviye Eğitimi', - content: - 'Yazılım Geliştirme ekibimiz için React İleri Seviye eğitimi 25-26 Ekim tarihlerinde düzenlenecektir. Katılım için IK birimine başvurunuz.', - excerpt: 'React İleri Seviye eğitimi kayıtları başladı', - category: 'event', - author: mockEmployees[0], - publishDate: new Date('2024-10-16T11:00:00'), - isPinned: false, - viewCount: 67, - departments: ['Yazılım Geliştirme'], - }, - { - id: 'ann5', - title: '⚠️ Güvenlik Politikası Güncellemesi', - content: - 'Bilgi güvenliği politikamız güncellenmiştir. Tüm çalışanlarımızın yeni politikayı okuması ve onaylaması gerekmektedir.', - excerpt: 'Güvenlik politikası güncellendi - Onay gerekli', - category: 'urgent', - author: mockEmployees[4], - publishDate: new Date('2024-10-18T08:00:00'), - isPinned: true, - viewCount: 312, - attachments: [{ name: 'Bilgi_Guvenligi_Politikasi_v2.pdf', url: '#', size: '2.4 MB' }], - }, -] - export const mockEvents: CalendarEvent[] = [ { id: 'evt1', @@ -979,4 +911,72 @@ export const mockShuttleRoutes: ShuttleRoute[] = [ available: 12, type: 'evening', }, +] + +export const mockAnnouncements: Announcement[] = [ + { + id: 'ann1', + title: '🎉 Yeni Ofis Açılışı', + content: + 'Ankara ofisimiz 1 Kasım tarihinde hizmete başlıyor! Tüm çalışanlarımızı açılış törenimize davet ediyoruz.', + excerpt: 'Ankara ofisimiz 1 Kasım tarihinde hizmete başlıyor!', + category: 'general', + author: mockEmployees[4], + publishDate: new Date('2024-10-15T09:00:00'), + isPinned: true, + viewCount: 156, + imageUrl: 'https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&q=80', + }, + { + id: 'ann2', + title: '📅 Performans Değerlendirme Dönemi', + content: + 'Yıl sonu performans değerlendirmelerimiz 20 Ekim - 5 Kasım tarihleri arasında gerçekleştirilecektir. Lütfen formları zamanında doldurunuz.', + excerpt: 'Yıl sonu performans değerlendirmeleri başlıyor.', + category: 'hr', + author: mockEmployees[3], + publishDate: new Date('2024-10-18T10:30:00'), + expiryDate: new Date('2024-11-05'), + isPinned: true, + viewCount: 89, + departments: ['Tüm Departmanlar'], + }, + { + id: 'ann3', + title: '💻 Sistem Bakımı Duyurusu', + content: + 'Bu Cumartesi saat 02:00-06:00 arası sistemlerimizde bakım çalışması yapılacaktır. Bu süre içinde sistemlere erişim sağlanamayacaktır.', + excerpt: 'Cumartesi gecesi planlı bakım çalışması', + category: 'it', + author: mockEmployees[2], + publishDate: new Date('2024-10-17T14:00:00'), + isPinned: false, + viewCount: 234, + }, + { + id: 'ann4', + title: '🎓 React İleri Seviye Eğitimi', + content: + 'Yazılım Geliştirme ekibimiz için React İleri Seviye eğitimi 25-26 Ekim tarihlerinde düzenlenecektir. Katılım için IK birimine başvurunuz.', + excerpt: 'React İleri Seviye eğitimi kayıtları başladı', + category: 'event', + author: mockEmployees[0], + publishDate: new Date('2024-10-16T11:00:00'), + isPinned: false, + viewCount: 67, + departments: ['Yazılım Geliştirme'], + }, + { + id: 'ann5', + title: '⚠️ Güvenlik Politikası Güncellemesi', + content: + 'Bilgi güvenliği politikamız güncellenmiştir. Tüm çalışanlarımızın yeni politikayı okuması ve onaylaması gerekmektedir.', + excerpt: 'Güvenlik politikası güncellendi - Onay gerekli', + category: 'urgent', + author: mockEmployees[4], + publishDate: new Date('2024-10-18T08:00:00'), + isPinned: true, + viewCount: 312, + attachments: [{ name: 'Bilgi_Guvenligi_Politikasi_v2.pdf', url: '#', size: '2.4 MB' }], + }, ] \ No newline at end of file