Core sisteme Hr menüsü eklendi
This commit is contained in:
parent
677a62bd79
commit
acc836c293
36 changed files with 1834 additions and 1555 deletions
4
.github/instructions/ai.instructions.md
vendored
4
.github/instructions/ai.instructions.md
vendored
|
|
@ -19,7 +19,7 @@ Companion documents (this file wins on conflict):
|
||||||
| Document | Scope |
|
| Document | Scope |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `lowcode.instructions.md` | **Authoring reference**: exact schemas, enum values and worked examples for producing wizard screens, editor scripts, custom components, SQL objects and endpoints. Read it before writing any artifact. |
|
| `lowcode.instructions.md` | **Authoring reference**: exact schemas, enum values and worked examples for producing wizard screens, editor scripts, custom components, SQL objects and endpoints. Read it before writing any artifact. |
|
||||||
| `lowcode-reference.instructions.md` | **Capability inventory**: field-by-field contract of every ListForm/ListFormField JSON column, chart and pivot options, SQL command hooks, Visual Designer toolbox, the scheduled-mail module and (§12) every ready-made screen under the Saas and Administration menus. Sweep its §0 checklist before producing a screen or component; a request whose answer already exists as a platform screen (§12.5) is configured there, not rebuilt. |
|
| `lowcode-reference.instructions.md` | **Capability inventory**: field-by-field contract of every ListForm/ListFormField JSON column, chart and pivot options, SQL command hooks, Visual Designer toolbox, the scheduled-mail module and (§12) every ready-made screen under the Saas, Administration and HR (`App.Hr`) menus. Sweep its §0 checklist before producing a screen or component; a request whose answer already exists as a platform screen (§12.6) is configured there, not rebuilt. |
|
||||||
| `dotnet.instructions.md` | Binding code standard for everything under `api/` |
|
| `dotnet.instructions.md` | Binding code standard for everything under `api/` |
|
||||||
| `list.instructions.md` | Step-by-step procedure for adding a module / list through seeders |
|
| `list.instructions.md` | Step-by-step procedure for adding a module / list through seeders |
|
||||||
| `../../README.md` | Technical map: what exists, where it lives, how it is wired |
|
| `../../README.md` | Technical map: what exists, where it lives, how it is wired |
|
||||||
|
|
@ -661,7 +661,7 @@ There are **two seed surfaces**. AI must not mix them.
|
||||||
Platform-owned screens, menus, permissions and language texts. Changing them requires a build and
|
Platform-owned screens, menus, permissions and language texts. Changing them requires a build and
|
||||||
a deploy. AI must learn and teach implementation flow primarily from these assets:
|
a deploy. AI must learn and teach implementation flow primarily from these assets:
|
||||||
|
|
||||||
- ListFormSeeder_Saas.cs / ListFormSeeder_Administration.cs / ListFormSeeder_{Modul}.cs
|
- ListFormSeeder_Saas.cs / ListFormSeeder_Administration.cs / ListFormSeeder_Hr.cs / ListFormSeeder_{Modul}.cs
|
||||||
- configs/seeds/host/data/App.Languages.{Language,LanguageText}.json — languages and texts (ListForm seed data)
|
- configs/seeds/host/data/App.Languages.{Language,LanguageText}.json — languages and texts (ListForm seed data)
|
||||||
- WizardDataSeeder.cs / CrudDataSeeder.cs — the seeders that read
|
- WizardDataSeeder.cs / CrudDataSeeder.cs — the seeders that read
|
||||||
surface B below
|
surface B below
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
`lowcode.instructions.md` **nasıl üretileceğini** anlatır; bu dosya **neyin ayarlanabildiğini**
|
`lowcode.instructions.md` **nasıl üretileceğini** anlatır; bu dosya **neyin ayarlanabildiğini**
|
||||||
tek tek listeler. Orada "bunun bir JSON kolonu var" denen her şeyin alan alan karşılığı burada
|
tek tek listeler. Orada "bunun bir JSON kolonu var" denen her şeyin alan alan karşılığı burada
|
||||||
durur: ListForm/ListFormField'ın tüm JSON kolonları, grafik sözleşmesi, Visual Designer envanteri
|
durur: ListForm/ListFormField'ın tüm JSON kolonları, grafik sözleşmesi, Visual Designer envanteri
|
||||||
ve zamanlanmış e-posta modülü. Son bölüm (§12) Saas ve Administration menülerindeki **hazır
|
ve zamanlanmış e-posta modülü. Son bölüm (§12) Saas, Administration ve İK (Hr) menülerindeki **hazır
|
||||||
gelen bütün ekranları** ve bunların yeni bir komponentte nasıl kullanılacağını listeler.
|
gelen bütün ekranları** ve bunların yeni bir komponentte nasıl kullanılacağını listeler.
|
||||||
|
|
||||||
**Kullanım sırası:** `ai.instructions.md` → `lowcode.instructions.md` → **bu dosya** → `README.md`.
|
**Kullanım sırası:** `ai.instructions.md` → `lowcode.instructions.md` → **bu dosya** → `README.md`.
|
||||||
|
|
@ -51,7 +51,7 @@ ama hiçbirini görmeden bırakma; kullanıcı "şunu da yapabilir miydik?" dedi
|
||||||
|
|
||||||
| # | Katman | Sorulacak soru | Nerede |
|
| # | Katman | Sorulacak soru | Nerede |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 0 | **Hazır yetenek** | Bu talebin karşılığı Saas/Administration menüsünde zaten var mı? | §12.5 |
|
| 0 | **Hazır yetenek** | Bu talebin karşılığı Saas/Administration/İK menüsünde zaten var mı? | §12.6 |
|
||||||
| 1 | **Veri** | Tablo/view var mı, join gerekiyor mu, anahtar ve tipi ne? | `lowcode` §8 · §9.6 |
|
| 1 | **Veri** | Tablo/view var mı, join gerekiyor mu, anahtar ve tipi ne? | `lowcode` §8 · §9.6 |
|
||||||
| 2 | **Ekran türü** | Liste mi, tek kayıt formu mu, serbest yerleşim mi? Kaç görünüm açılacak? | `lowcode` §0.6.1 · §9.8 · §5.4 |
|
| 2 | **Ekran türü** | Liste mi, tek kayıt formu mu, serbest yerleşim mi? Kaç görünüm açılacak? | `lowcode` §0.6.1 · §9.8 · §5.4 |
|
||||||
| 3 | **Sütunlar** | Editör tipi, biçim, hizalama, genişlik, band, gizli/aktif | `lowcode` §4.3 · §9.7 |
|
| 3 | **Sütunlar** | Editör tipi, biçim, hizalama, genişlik, band, gizli/aktif | `lowcode` §4.3 · §9.7 |
|
||||||
|
|
@ -85,7 +85,7 @@ iki yerdedir: düğüm başına `designerPermission` ve `Form`'un dört komut ye
|
||||||
|
|
||||||
Katmanların çoğunda cevap yeni bir artefakt değil, platformun **hazır bir ekranıdır**: numaratör,
|
Katmanların çoğunda cevap yeni bir artefakt değil, platformun **hazır bir ekranıdır**: numaratör,
|
||||||
bildirim, zamanlanmış iş, rapor, ayar, dil, yetki, şube, kısıt, dosya. Hepsinin envanteri §12'de —
|
bildirim, zamanlanmış iş, rapor, ayar, dil, yetki, şube, kısıt, dosya. Hepsinin envanteri §12'de —
|
||||||
"kod yazmamız gerekir" demeden önce §12.5'e bak.
|
"kod yazmamız gerekir" demeden önce §12.6'ya bak.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -468,7 +468,7 @@ denenir. Buraya yazılan kod ekran her açıldığında çalışır ve hiçbir y
|
||||||
| `ShowNote` | `true` | Not paneli (alt form ya da iş akışı varsa wizard açar) |
|
| `ShowNote` | `true` | Not paneli (alt form ya da iş akışı varsa wizard açar) |
|
||||||
|
|
||||||
`ListFormType = "Form"` listesiz, tek kayıtlık kart ekrandır; canlı örneği Administration ›
|
`ListFormType = "Form"` listesiz, tek kayıtlık kart ekrandır; canlı örneği Administration ›
|
||||||
Licence'tır (§12.6). `Pivot` bir `ListFormType` **değildir** — pivot, `LayoutJson.Pivot`
|
Licence'tır (§12.7). `Pivot` bir `ListFormType` **değildir** — pivot, `LayoutJson.Pivot`
|
||||||
bayrağıyla açılan bir görünümdür ve `/admin/pivot/...` diye bir route yoktur.
|
bayrağıyla açılan bir görünümdür ve `/admin/pivot/...` diye bir route yoktur.
|
||||||
|
|
||||||
### 5.7 Varyantlar
|
### 5.7 Varyantlar
|
||||||
|
|
@ -1202,9 +1202,9 @@ gerektirmez.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 12. Saas ve Administration menüleri — platform yetenek kataloğu
|
## 12. Saas, Administration ve İK menüleri — platform yetenek kataloğu
|
||||||
|
|
||||||
Bu iki menü, platformun **hazır gelen tüm yeteneklerinin** girişidir. Bir komponent üretirken
|
Bu üç menü, platformun **hazır gelen tüm yeteneklerinin** girişidir. Bir komponent üretirken
|
||||||
buradaki her ekran üç rolden birindedir:
|
buradaki her ekran üç rolden birindedir:
|
||||||
|
|
||||||
- **Yeniden kullanılacak yetenek** — numaratör, bildirim, zamanlanmış iş, rapor, dosya, yetki,
|
- **Yeniden kullanılacak yetenek** — numaratör, bildirim, zamanlanmış iş, rapor, dosya, yetki,
|
||||||
|
|
@ -1212,7 +1212,7 @@ buradaki her ekran üç rolden birindedir:
|
||||||
- **Veri kaynağı** — ülke/il/ilçe, para birimi, ölçü birimi, departman, ünvan, şube, kullanıcı,
|
- **Veri kaynağı** — ülke/il/ilçe, para birimi, ölçü birimi, departman, ünvan, şube, kullanıcı,
|
||||||
rol. Yeni ekranın lookup'ı bu tablolara bağlanır; aynı listeyi tekrar tanımlama.
|
rol. Yeni ekranın lookup'ı bu tablolara bağlanır; aynı listeyi tekrar tanımlama.
|
||||||
- **Referans uygulama** — istenen davranışın bu uygulamada zaten çalışan bir örneği. Aynı JSON'u
|
- **Referans uygulama** — istenen davranışın bu uygulamada zaten çalışan bir örneği. Aynı JSON'u
|
||||||
oradan alıp uyarlamak, sıfırdan yazmaktan hem hızlı hem güvenlidir (§12.6).
|
oradan alıp uyarlamak, sıfırdan yazmaktan hem hızlı hem güvenlidir (§12.7).
|
||||||
|
|
||||||
### 12.1 Tablo adlandırma sözleşmesi
|
### 12.1 Tablo adlandırma sözleşmesi
|
||||||
|
|
||||||
|
|
@ -1224,14 +1224,13 @@ Platform tablolarının adı `TableNameResolver` tarafından üretilir:
|
||||||
|
|
||||||
| Parça | Değerler |
|
| Parça | Değerler |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Modül ön eki (`MenuPrefix`) | Yalnızca `Sas` (Saas) · `Adm` (Administration). Modüller (`api/modules/*`) kendi `*DbProperties.MenuPrefix` değerini taşır (MailQueue/Settings/Languages `Sas`, Notifications `Adm`) |
|
| Modül ön eki (`MenuPrefix`) | Yalnızca `Sas` (Saas) · `Adm` (Administration) · `Hr` (İK — `ListFormSeeder_Hr`, menü/yetki grubu `App.Hr`, modül `Hr`). Modüller (`api/modules/*`) kendi `*DbProperties.MenuPrefix` değerini taşır (MailQueue/Settings/Languages `Sas`, Notifications `Adm`) |
|
||||||
| Kapsam | `H` host (tüm tenant'lar için ortak) · `T` tenant · `B` şube (`TablePrefix.BranchByName`; şu an eşlemesi olan tablo yok) |
|
| Kapsam | `H` host (tüm tenant'lar için ortak) · `T` tenant · `B` şube (`TablePrefix.BranchByName`; şu an eşlemesi olan tablo yok) |
|
||||||
| Ad | `TableNameEnum` üyesi |
|
| Ad | `TableNameEnum` üyesi |
|
||||||
|
|
||||||
Örnek: `Sas_H_Currency` (host — tüm kiracılar aynı para birimlerini görür), `Adm_T_Department`
|
Örnek: `Sas_H_Currency` (host — tüm kiracılar aynı para birimlerini görür), `Hr_T_Department`
|
||||||
(kiracı başına), `V_Sas_H_Order` (view). Menü ile tablo öneki her zaman örtüşmez:
|
(kiracı başına), `Hr_H_SkillType` (İK'nın host tablosu), `V_Sas_H_Order` (view). Menü ile tablo öneki her zaman örtüşmez:
|
||||||
`Sas_T_GlobalSearch`, `Sas_T_Branch`, `Sas_T_Forum*`, `Sas_T_IntranetWidget` kiracı tablosudur;
|
`Sas_T_GlobalSearch`, `Sas_T_Branch`, `Sas_T_Forum*`, `Sas_T_IntranetWidget` kiracı tablosudur. Özel view'ler
|
||||||
`Adm_T_Sequence` Saas menüsündedir. Özel view'ler
|
|
||||||
`TableNameResolver.GetFullSpecialViewName` ile `V_{Önek}_{Prefix}_{Ad}` biçiminde üretilir.
|
`TableNameResolver.GetFullSpecialViewName` ile `V_{Önek}_{Prefix}_{Ad}` biçiminde üretilir.
|
||||||
|
|
||||||
> Yeni bir platform tablosu eklenecekse `TableNameEnum` + `TableNameResolver._map` birlikte
|
> Yeni bir platform tablosu eklenecekse `TableNameEnum` + `TableNameResolver._map` birlikte
|
||||||
|
|
@ -1251,11 +1250,9 @@ soneklerini alır.
|
||||||
| **Definitions › Contact Title** | `App.Definitions.ContactTitle` | `Sas_H_ContactTitle` | host | Ünvan/hitap lookup'ı (`Title`, `Abbreviation`). |
|
| **Definitions › Contact Title** | `App.Definitions.ContactTitle` | `Sas_H_ContactTitle` | host | Ünvan/hitap lookup'ı (`Title`, `Abbreviation`). |
|
||||||
| **Definitions › Currency** | `App.Definitions.Currency` | `Sas_H_Currency` | host | Para birimi + `Rate`. Tutar alanı olan ekranın kur lookup'ı ve `DbQuery` varsayılanı buradan beslenir. |
|
| **Definitions › Currency** | `App.Definitions.Currency` | `Sas_H_Currency` | host | Para birimi + `Rate`. Tutar alanı olan ekranın kur lookup'ı ve `DbQuery` varsayılanı buradan beslenir. |
|
||||||
| **Definitions › Country Group / Country / City / District** | `App.Definitions.CountryGroup` · `.Country` · `.City` · `.District` | `Sas_H_CountryGroup` · `Sas_H_Country` · `Sas_H_City` · `Sas_H_District` | host | Adres alanlarının hazır cascade zinciri (dört ayrı menü ve seed dosyası; `Order` sırası grup → ülke → il → ilçe). `Country` ayrıca `PhoneCode`, `PhoneNumberFormat`, `ZipRequired`, `StateRequired`, `TaxLabel` taşır — adres doğrulaması için kullan. |
|
| **Definitions › Country Group / Country / City / District** | `App.Definitions.CountryGroup` · `.Country` · `.City` · `.District` | `Sas_H_CountryGroup` · `Sas_H_Country` · `Sas_H_City` · `Sas_H_District` | host | Adres alanlarının hazır cascade zinciri (dört ayrı menü ve seed dosyası; `Order` sırası grup → ülke → il → ilçe). `Country` ayrıca `PhoneCode`, `PhoneNumberFormat`, `ZipRequired`, `StateRequired`, `TaxLabel` taşır — adres doğrulaması için kullan. |
|
||||||
| **Definitions › Skill Type** | `App.Definitions.SkillType` (alt formlar `.Skill`, `.SkillLevel`) | `Sas_H_SkillType` · `Sas_H_Skill` · `Sas_H_SkillLevel` | host | Yetkinlik tanımı; bir ana ekrandan iki alt forma açılan **çoklu alt form** örneği. |
|
|
||||||
| **Definitions › UoM Category** | `App.Definitions.UomCategory` (alt form `.Uom`) | `Sas_H_UomCategory` · `Sas_H_Uom` | host | Ölçü birimi, `Ratio`/`Rounding` — miktar alanı olan ekranlarda birim lookup'ı ve çevrim. |
|
| **Definitions › UoM Category** | `App.Definitions.UomCategory` (alt form `.Uom`) | `Sas_H_UomCategory` · `Sas_H_Uom` | host | Ölçü birimi, `Ratio`/`Rounding` — miktar alanı olan ekranlarda birim lookup'ı ve çevrim. |
|
||||||
| **Definitions › Sequence** | `App.Definitions.Sequence` | `Adm_T_Sequence` | tenant | Belge numarası üretimi (`lowcode` §9.9); alan varsayılanında `CustomValueType: 5` ile bağlanır. |
|
|
||||||
| **Public › Products / Payment Methods / Installment Options** | `App.Orders.Products` · `.PaymentMethods` · `.InstallmentOptions` | `Sas_H_Product` · `Sas_H_PaymentMethod` · `Sas_H_InstallmentOption` | host | Ürün, ödeme yöntemi (`Commission`), taksit — satış/abonelik ekranlarının ve public `/products` sayfasının kaynağı. |
|
| **Public › Products / Payment Methods / Installment Options** | `App.Orders.Products` · `.PaymentMethods` · `.InstallmentOptions` | `Sas_H_Product` · `Sas_H_PaymentMethod` · `Sas_H_InstallmentOption` | host | Ürün, ödeme yöntemi (`Commission`), taksit — satış/abonelik ekranlarının ve public `/products` sayfasının kaynağı. |
|
||||||
| **Public › Sales Orders** | `App.Orders.SalesOrders` (alt form Sales Order Item) | `Sas_H_Order` + `Sas_H_OrderItem` | host | **Onay akışı + alt kalem + toplam + diyalog** birlikte kullanılan tam örnek (§12.6). |
|
| **Public › Sales Orders** | `App.Orders.SalesOrders` (alt form Sales Order Item) | `Sas_H_Order` + `Sas_H_OrderItem` | host | **Onay akışı + alt kalem + toplam + diyalog** birlikte kullanılan tam örnek (§12.7). |
|
||||||
| **Public › Blog Category / Posts** | `App.BlogManagement.Category` · `.Posts` | `Sas_H_BlogCategory` · `Sas_H_BlogPost` | host | Çok dilli içerik (`ContentTr`/`ContentEn`), slug, yayın durumu, sayaç alanları; public `/blog` bu tablolardan okur, yayınlanmış yazılar sitemap'e girer. |
|
| **Public › Blog Category / Posts** | `App.BlogManagement.Category` · `.Posts` | `Sas_H_BlogCategory` · `Sas_H_BlogPost` | host | Çok dilli içerik (`ContentTr`/`ContentEn`), slug, yayın durumu, sayaç alanları; public `/blog` bu tablolardan okur, yayınlanmış yazılar sitemap'e girer. |
|
||||||
| **Public › Demos** | `App.Demos` | `Sas_H_Demo` | host | Public `/demo` formundan gelen talepler — public form → tablo akışının örneği. |
|
| **Public › Demos** | `App.Demos` | `Sas_H_Demo` | host | Public `/demo` formundan gelen talepler — public form → tablo akışının örneği. |
|
||||||
| **Dev Requests** | `App.DevRequests` | `Sas_H_DevRequest` | host | **Kanban/Todo düzeninin** referansı (`DefaultLayout: todo`): `Status`, `Priority`, `SortOrder`, `Tags`, `Assignees`, `SubTasks`, `Timesheets`; detayda `Description` yanında `Analysis` sekmesi (`AnalysisExpr`). MCP geliştirme döngüsünün kuyruğudur (`Backlog` → `Analysis` MCP analiz eder, `Ready to Start`'a kullanıcı alır; `Ready to Start` → `Testing`, `Staging`'e kullanıcı alır; araç çubuğunda DB Migrate butonu vardır — `UiEvalService.ApiDbMigrate()`, `App.Setup.Migrate`; yalnızca `start_dev_request` başlatır; açıklamadaki base64 görseller MCP'ye resim içeriği olarak gider, analiz `save_dev_request_analysis` ile yazılır, üretim notu `append_dev_request_note` ile `Analysis`'e eklenir — `Description` talebin yazıldığı hâliyle kalır; `lowcode.instructions.md` §0.11–§0.12). |
|
| **Dev Requests** | `App.DevRequests` | `Sas_H_DevRequest` | host | **Kanban/Todo düzeninin** referansı (`DefaultLayout: todo`): `Status`, `Priority`, `SortOrder`, `Tags`, `Assignees`, `SubTasks`, `Timesheets`; detayda `Description` yanında `Analysis` sekmesi (`AnalysisExpr`). MCP geliştirme döngüsünün kuyruğudur (`Backlog` → `Analysis` MCP analiz eder, `Ready to Start`'a kullanıcı alır; `Ready to Start` → `Testing`, `Staging`'e kullanıcı alır; araç çubuğunda DB Migrate butonu vardır — `UiEvalService.ApiDbMigrate()`, `App.Setup.Migrate`; yalnızca `start_dev_request` başlatır; açıklamadaki base64 görseller MCP'ye resim içeriği olarak gider, analiz `save_dev_request_analysis` ile yazılır, üretim notu `append_dev_request_note` ile `Analysis`'e eklenir — `Description` talebin yazıldığı hâliyle kalır; `lowcode.instructions.md` §0.11–§0.12). |
|
||||||
|
|
@ -1279,9 +1276,8 @@ soneklerini alır.
|
||||||
|
|
||||||
> Menü kodu ile yetki adı **her zaman aynı değildir**: Wizard Manager'da kod
|
> Menü kodu ile yetki adı **her zaman aynı değildir**: Wizard Manager'da kod
|
||||||
> `App.Listforms.WizardManager`, yetki `App.Listforms.Wizard`'dır; Administration'daki Forum
|
> `App.Listforms.WizardManager`, yetki `App.Listforms.Wizard`'dır; Administration'daki Forum
|
||||||
> ekranında kod `App.Forum`, yetki `App.ForumManagement.Publish`'tir; Org Chart menüsü
|
> ekranında kod `App.Forum`, yetki `App.ForumManagement.Publish`'tir. Org Chart'ta menü ve
|
||||||
> `App.Definitions.OrgChart` ister ama `/admin/organization` rotası `App.Definitions.Department`
|
> `/admin/organization` rotası aynı yetkiyi (`App.Hr.OrgChart`) ister. Yeni ürettiğin ekranlarda
|
||||||
> ister (menüyü gören ama sayfayı açamayan kullanıcı olabilir). Yeni ürettiğin ekranlarda
|
|
||||||
> ikisini ayırma — wizard zaten aynı kökü kullanır (`lowcode` §2).
|
> ikisini ayırma — wizard zaten aynı kökü kullanır (`lowcode` §2).
|
||||||
|
|
||||||
### 12.3 Administration menüsü
|
### 12.3 Administration menüsü
|
||||||
|
|
@ -1292,9 +1288,7 @@ ekranları ABP tablolarıdır, Licence/Dev Request host tablolarını okur.
|
||||||
| Ekran | Kod / route | Tablo | Komponent üretirken ne işe yarar |
|
| Ekran | Kod / route | Tablo | Komponent üretirken ne işe yarar |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| **Definitions › Sector** | `App.Definitions.Sector` | `Adm_T_Sector` | Sektör lookup’ı. Veri `data/App.Definitions.Sector.json`'dan seed edilir. |
|
| **Definitions › Sector** | `App.Definitions.Sector` | `Adm_T_Sector` | Sektör lookup’ı. Veri `data/App.Definitions.Sector.json`'dan seed edilir. |
|
||||||
| **Definitions › Department** | `App.Definitions.Department` | `Adm_T_Department` | `ParentId` ile **ağaç (TreeList) düzeninin** referansı; personel/onay ekranlarının departman lookup'ı. |
|
| **Definitions › Sequence** | `App.Definitions.Sequence` | `Adm_T_Sequence` | Belge numarası üretimi (`lowcode` §9.9); alan varsayılanında `CustomValueType: 5` ile bağlanır. Entity `IMultiTenant`'tır; ekran `IsTenant = true`, yetkiler `MultiTenancySide = Both` — her kiracı kendi numaratörlerini tutar. Seed `data/App.Definitions.Sequence.json`. |
|
||||||
| **Definitions › Job Position** | `App.Definitions.JobPosition` | `Adm_T_JobPosition` | Ünvan ağacı (`ParentId` + `DepartmentId`) — departmana bağlı cascade örneği. |
|
|
||||||
| **Definitions › Org Chart** | menü yetkisi `App.Definitions.OrgChart` · `/admin/organization` | `Adm_T_Department` · `Adm_T_JobPosition` | Departman/ünvan verisinin organizasyon şeması görünümü (özel React sayfası). |
|
|
||||||
| **Licence** | `App.Licence` · `/admin/form/App.Licence` | `AbpTenants` + `V_Sas_H_OrderItem_ByTenantId` | **`ListFormType = Form`** (listesiz, tek kayıtlık ekran) + alt kalem listesi. "Tek kayıtlık kart ekran" isteğinin karşılığı budur. |
|
| **Licence** | `App.Licence` · `/admin/form/App.Licence` | `AbpTenants` + `V_Sas_H_OrderItem_ByTenantId` | **`ListFormType = Form`** (listesiz, tek kayıtlık ekran) + alt kalem listesi. "Tek kayıtlık kart ekran" isteğinin karşılığı budur. |
|
||||||
| **Dev Request** | `App.DevRequest` | `Sas_H_DevRequest` | Kiracı tarafındaki talep ekranı (Saas'taki listenin kullanıcı yüzü; `UserName` varsayılanı `@USERNAME`). |
|
| **Dev Request** | `App.DevRequest` | `Sas_H_DevRequest` | Kiracı tarafındaki talep ekranı (Saas'taki listenin kullanıcı yüzü; `UserName` varsayılanı `@USERNAME`). |
|
||||||
| **Bildirimler › Bildirim Şablonları** | `App.Notifications.NotificationTemplates` | `Adm_T_NotificationTemplate` | Elle gönderimde seçilen mesaj metinleri: `Code`, `Name`, `Channel` (boş = tüm kanallar), `Subject`, `Body` (`{AdSoyad}`, `{KullaniciAdi}`, `{Eposta}`, `{Tarih}`, `{Saat}`, `{Kiraci}` yer tutucuları), `IsActive`. Boş bırakılan konu/gövde şablondan tamamlanır. Seed: `data/App.Notifications.NotificationTemplates.json`. |
|
| **Bildirimler › Bildirim Şablonları** | `App.Notifications.NotificationTemplates` | `Adm_T_NotificationTemplate` | Elle gönderimde seçilen mesaj metinleri: `Code`, `Name`, `Channel` (boş = tüm kanallar), `Subject`, `Body` (`{AdSoyad}`, `{KullaniciAdi}`, `{Eposta}`, `{Tarih}`, `{Saat}`, `{Kiraci}` yer tutucuları), `IsActive`. Boş bırakılan konu/gövde şablondan tamamlanır. Seed: `data/App.Notifications.NotificationTemplates.json`. |
|
||||||
|
|
@ -1341,7 +1335,38 @@ açılmaz:
|
||||||
|
|
||||||
`/admin/pivot/...` diye bir route **yoktur**; pivot, liste ekranındaki bir görünümdür.
|
`/admin/pivot/...` diye bir route **yoktur**; pivot, liste ekranındaki bir görünümdür.
|
||||||
|
|
||||||
### 12.4 ListForm olmayan (özel React) ekranlar
|
### 12.4 İK (Hr) menüsü
|
||||||
|
|
||||||
|
Kök menü `App.Hr` (`ModuleId = Hr`, `Order = 0`; Saas `-2` ve Administration `-1`'in yanında),
|
||||||
|
yetki grubu `App.Hr`. İK'ya ait her şey `Hr` ile başlar: tablo `Hr_{H|T}_*` (`MenuPrefix.Hr`),
|
||||||
|
ListForm kodu / menü kodu / yetki adı / dil anahtarı `App.Hr.*`, seed dosyası `data/App.Hr.*.json`,
|
||||||
|
seeder `ListFormSeeder_Hr.cs` (`SeedConsts.AppCodes.Hr`, `PlatformConsts.AppCodes.Hr`), entity
|
||||||
|
klasörü `Entities/{Host,Tenant}/Hr`. Tanımlar alt menüsü `App.Hr.Definitions`'tır
|
||||||
|
(`App.Platform.Definitions` başlığı); Organizasyon Şeması doğrudan `App.Hr` altındadır.
|
||||||
|
|
||||||
|
İK yetkilerinin `Modules` değeri `Sas|Hr`'dir: host (`Sas`) her zaman görür, kiracı yalnızca modül
|
||||||
|
listesinde `Hr` varsa görür (modül listesi boş kiracıda süzme yoktur — `MenuAppService`,
|
||||||
|
`RolesPermission.tsx`). Yetki ağacı: `App.Hr.Definitions` → `App.Hr.SkillType` (1),
|
||||||
|
`App.Hr.SkillLevel` (2), `App.Hr.Skill` (3), `App.Hr.Department` (4), `App.Hr.JobPosition` (5);
|
||||||
|
`App.Hr.OrgChart` grubun kökünde (2). ListForm ekranlarının alt yetkileri `.Create`, `.Update`,
|
||||||
|
`.Delete`, `.Export`, `.Import` (Skill Type'ta ayrıca `.Note`).
|
||||||
|
|
||||||
|
| Ekran | Kod / route | Tablo | Kapsam | Komponent üretirken ne işe yarar |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| **Definitions › Skill Type** | `App.Hr.SkillType` (alt formlar `App.Hr.SkillLevel`, `App.Hr.Skill`) | `Hr_H_SkillType` · `Hr_H_SkillLevel` · `Hr_H_Skill` | host | Yetkinlik tanımı; bir ana ekrandan iki alt forma açılan **çoklu alt form** örneği. Seed `data/App.Hr.{SkillType,SkillLevel,Skill}.json`. |
|
||||||
|
| **Definitions › Department** | `App.Hr.Department` | `Hr_T_Department` | tenant | **Şube bazlı** departman ağacı: ilk sütun `BranchId` (Şube Adı; `LookupQueryValues.TenantBranchValues`, zorunlu), `ParentId` lookup'ı seçili şubenin departmanlarına süzülür (`BranchDepartmentValues`, cascade `BranchId`). `ParentId` ile **ağaç (TreeList) düzeninin** referansı; personel/onay ekranlarının departman lookup'ı. Tekil indeks `TenantId + BranchId + Name`. Seed `data/App.Hr.Department.json`. |
|
||||||
|
| **Definitions › Job Position** | `App.Hr.JobPosition` | `Hr_T_JobPosition` | tenant | Ünvan ağacı. Form sırası `BranchId` → `DepartmentId` (şubeye göre süzülür) → `Name` → `ParentId` (departmana göre süzülür); şube değişince departman ve üst görev temizlenir (`CascadeEmptyFields`). **İki kademeli cascade** örneği. Seed `data/App.Hr.JobPosition.json`. |
|
||||||
|
| **Org Chart** | `App.Hr.OrgChart` · `/admin/organization` | `Hr_T_Department` · `Hr_T_JobPosition` | tenant | Departman/ünvan verisinin organizasyon şeması görünümü (özel React sayfası `hr/OrgChart`, veri `api/app/org-chart`). Menü ve route aynı yetkiyi ister. |
|
||||||
|
|
||||||
|
**Şube bilgisi:** `Department.BranchId` ve `JobPosition.BranchId` (`Guid`, **zorunlu** — kolon `NOT NULL`, formda
|
||||||
|
zorunlu alan; değer `Sas_T_Branch.Id`) şubeyi taşır; ekranlar `IsBranch = false`'tur (satırlar kullanıcının şube atamasına göre süzülmez, şube
|
||||||
|
sütunu veridir). Host varsayılan şubesinin kimliği sabittir
|
||||||
|
(`PlatformConsts.Branches.BranchIdDefaultValue`; `PlatformIdentityDataSeeder` /
|
||||||
|
`TenantIdentityDataSeeder` host şubesi için bu kimliği kullanır, kiracı şubeleri yeni GUID alır);
|
||||||
|
seed edilen departman ve pozisyon satırları `BranchId` ile bu şubeye bağlanır. Yeni seed satırı
|
||||||
|
eklerken `BranchId` de yazılır.
|
||||||
|
|
||||||
|
### 12.5 ListForm olmayan (özel React) ekranlar
|
||||||
|
|
||||||
Bu ekranlar `Sas_H_Route` kayıtlarıyla yönetilir (seed:
|
Bu ekranlar `Sas_H_Route` kayıtlarıyla yönetilir (seed:
|
||||||
`configs/seeds/host/data/App.Menus.Routes.json`). Yenisini eklemek **kod yazmak demektir** — karar
|
`configs/seeds/host/data/App.Menus.Routes.json`). Yenisini eklemek **kod yazmak demektir** — karar
|
||||||
|
|
@ -1376,7 +1401,7 @@ görünürlük `checkPermission` ile bileşen içinde kurulur (`lowcode` §7.5).
|
||||||
| `/admin/settings` | `settings/Settings` | `App.Setting` |
|
| `/admin/settings` | `settings/Settings` | `App.Setting` |
|
||||||
| `/admin/files` | `admin/files/FileManager` | `App.Files` |
|
| `/admin/files` | `admin/files/FileManager` | `App.Files` |
|
||||||
| `/admin/intranet-documents` | `intranet/documents/IntranetDocuments` | `App.Intranet.Document` |
|
| `/admin/intranet-documents` | `intranet/documents/IntranetDocuments` | `App.Intranet.Document` |
|
||||||
| `/admin/ous` · `/admin/organization` | `organization-unit/OrganizationUnits` · `hr/OrgChart` | `Abp.Identity.OrganizationUnits` · `App.Definitions.Department` (menü `App.Definitions.OrgChart` ister — §12.2 notu) |
|
| `/admin/ous` · `/admin/organization` | `organization-unit/OrganizationUnits` · `hr/OrgChart` | `Abp.Identity.OrganizationUnits` · `App.Hr.OrgChart` (menü ile aynı — §12.4) |
|
||||||
| `/admin/forum` | `forum/Forum` | `App.ForumManagement.Publish` |
|
| `/admin/forum` | `forum/Forum` | `App.ForumManagement.Publish` |
|
||||||
| `/admin/videoroom/{dashboard,list,room/:id}` | `admin/videoroom/{Dashboard,RoomList,RoomDetail}` | `App.Videoroom{,.List,.Detail}` |
|
| `/admin/videoroom/{dashboard,list,room/:id}` | `admin/videoroom/{Dashboard,RoomList,RoomDetail}` | `App.Videoroom{,.List,.Detail}` |
|
||||||
| `/admin/ai` | `ai/Assistant` | `App.Definitions.AiBot.Asistant` |
|
| `/admin/ai` | `ai/Assistant` | `App.Definitions.AiBot.Asistant` |
|
||||||
|
|
@ -1409,13 +1434,13 @@ alanları da doldurur (`lowcode` §0.9).
|
||||||
`/reset-password`, `/confirm`, `/confirm/:userId/:token`, `/extend-login` →
|
`/reset-password`, `/confirm`, `/confirm/:userId/:token`, `/extend-login` →
|
||||||
`views/auth/*`. Bunlara dokunma; parola ve doğrulama akışları ABP tarafındadır.
|
`views/auth/*`. Bunlara dokunma; parola ve doğrulama akışları ABP tarafındadır.
|
||||||
|
|
||||||
### 12.5 Talep → hangi menü
|
### 12.6 Talep → hangi menü
|
||||||
|
|
||||||
§0'daki katman taraması bu tabloyla eşleşir; "kod yazmamız gerekir" demeden önce buraya bak.
|
§0'daki katman taraması bu tabloyla eşleşir; "kod yazmamız gerekir" demeden önce buraya bak.
|
||||||
|
|
||||||
| Talepte geçen | Menü / ekran | Ne yapılır |
|
| Talepte geçen | Menü / ekran | Ne yapılır |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| "numara otomatik gelsin" | Saas › Definitions › Sequence | Kayıt aç, alan varsayılanına `CustomValueType: 5` |
|
| "numara otomatik gelsin" | Administration › Definitions › Sequence | Kayıt aç, alan varsayılanına `CustomValueType: 5` |
|
||||||
| "her gece / saat başı çalışsın" | Saas › Background Workers | `WorkerType: 2` + `BeforeSp`; prosedür `sql/object/` altına |
|
| "her gece / saat başı çalışsın" | Saas › Background Workers | `WorkerType: 2` + `BeforeSp`; prosedür `sql/object/` altına |
|
||||||
| "bilgilendirme gitsin" | Administration › Bildirimler (+ MailQueue §11) | Tür + kural (8 kanal); tablolu/ekli e-posta ise MailQueue |
|
| "bilgilendirme gitsin" | Administration › Bildirimler (+ MailQueue §11) | Tür + kural (8 kanal); tablolu/ekli e-posta ise MailQueue |
|
||||||
| "elden bildirim/duyuru gönderelim" | Administration › Bildirimler › Bildirimler (+ Şablonlar) | Ekleme formu = elle gönderim; hazır metin için şablon kaydı |
|
| "elden bildirim/duyuru gönderelim" | Administration › Bildirimler › Bildirimler (+ Şablonlar) | Ekleme formu = elle gönderim; hazır metin için şablon kaydı |
|
||||||
|
|
@ -1438,13 +1463,14 @@ alanları da doldurur (`lowcode` §0.9).
|
||||||
| "menüye eklensin" | Saas › Menus › Manager | Menü kaydı + yetki + route eşlemesi |
|
| "menüye eklensin" | Saas › Menus › Manager | Menü kaydı + yetki + route eşlemesi |
|
||||||
| "yapay zekâ ajanı sorgulasın / veri çeksin" | Saas › DeveloperKit › MCP Servers | Kayıt aç, `AllowedTools`/tenant kapsamını ayarla; yeni endpoint/kod yok |
|
| "yapay zekâ ajanı sorgulasın / veri çeksin" | Saas › DeveloperKit › MCP Servers | Kayıt aç, `AllowedTools`/tenant kapsamını ayarla; yeni endpoint/kod yok |
|
||||||
| "yapay zekâ ajanı ekran/bileşen geliştirsin" | Saas › DeveloperKit › MCP Servers | Yalnızca host kullanıcısı: `App.DeveloperKit.McpServers.Invoke` + `.Write` + Wizard / Custom Components yetkilerini ver; geliştirme araçları `AllowedTools` ile açılıp kapatılır. Kiracı MCP'de veri okur ve yazar, geliştirme yapamaz |
|
| "yapay zekâ ajanı ekran/bileşen geliştirsin" | Saas › DeveloperKit › MCP Servers | Yalnızca host kullanıcısı: `App.DeveloperKit.McpServers.Invoke` + `.Write` + Wizard / Custom Components yetkilerini ver; geliştirme araçları `AllowedTools` ile açılıp kapatılır. Kiracı MCP'de veri okur ve yazar, geliştirme yapamaz |
|
||||||
| "ülke/il/ilçe, para birimi, birim, departman, ünvan" | Saas / Administration › Definitions | Var olan tabloya lookup bağla, yenisini üretme |
|
| "ülke/il/ilçe, para birimi, birim, sektör" | Saas / Administration › Definitions | Var olan tabloya lookup bağla, yenisini üretme |
|
||||||
|
| "departman, pozisyon/ünvan, yetkinlik, organizasyon şeması" | İK › Definitions · İK › Org Chart | Var olan `Hr_*` tablosuna lookup bağla (departman lookup'ı şubeye göre süzülebilir — `BranchDepartmentValues`); yenisini üretme |
|
||||||
| "yapay zekâ cevaplasın" | Saas › Definitions › AiBot | Bot tanımı; `/admin/ai` bu tanımı kullanır |
|
| "yapay zekâ cevaplasın" | Saas › Definitions › AiBot | Bot tanımı; `/admin/ai` bu tanımı kullanır |
|
||||||
|
|
||||||
### 12.6 Canlı referans uygulamalar
|
### 12.7 Canlı referans uygulamalar
|
||||||
|
|
||||||
İstenen davranışın bu uygulamada çalışan örneği. Tanımlar
|
İstenen davranışın bu uygulamada çalışan örneği. Tanımlar
|
||||||
`api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_{Saas,Administration}.cs`
|
`api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_{Saas,Administration,Hr}.cs`
|
||||||
içinde ilgili `#region` altındadır.
|
içinde ilgili `#region` altındadır.
|
||||||
|
|
||||||
| İhtiyaç | Bak |
|
| İhtiyaç | Bak |
|
||||||
|
|
@ -1455,17 +1481,17 @@ içinde ilgili `#region` altındadır.
|
||||||
| Tek kayıtlık form ekranı | `Licence` (`ListFormType = Form` + alt kalem listesi) |
|
| Tek kayıtlık form ekranı | `Licence` (`ListFormType = Form` + alt kalem listesi) |
|
||||||
| Onay akışı | `Sales Orders` — `WorkflowJson` (`ApprovalUserFieldName`, `ApprovalStatusFieldName`, `ApprovalDateFieldName`, `ApprovalDescriptionFieldName`) + `ListFormWorkflow` düğümleri (Start → Approval → End/End) |
|
| Onay akışı | `Sales Orders` — `WorkflowJson` (`ApprovalUserFieldName`, `ApprovalStatusFieldName`, `ApprovalDateFieldName`, `ApprovalDescriptionFieldName`) + `ListFormWorkflow` düğümleri (Start → Approval → End/End) |
|
||||||
| Alt form (master-detail) | `Tenant → Branches`, `Sales Orders → Sales Order Item`, `Survey → Question → Option` |
|
| Alt form (master-detail) | `Tenant → Branches`, `Sales Orders → Sales Order Item`, `Survey → Question → Option` |
|
||||||
| KPI widget | Saas ve Administration'daki yönetim ekranlarının çoğu (Users, Tenants, Dynamic Services, Custom Components, Audit Logs, Bildirimler, Duyuru/Anket/Etkinlik, Forum…; basit tanım listeleri hariç) — `WidgetsJson`; tek sorgu `UNION ALL` ile birden çok kart döndürür (`Title`, `Value`, `Color`, `SubTitle`, `Icon`) |
|
| KPI widget | Saas, Administration ve İK'daki yönetim ekranlarının çoğu (Users, Tenants, Dynamic Services, Custom Components, Audit Logs, Bildirimler, Duyuru/Anket/Etkinlik, Forum…; basit tanım listeleri hariç) — `WidgetsJson`; tek sorgu `UNION ALL` ile birden çok kart döndürür (`Title`, `Value`, `Color`, `SubTitle`, `Icon`) |
|
||||||
| Toolbar'dan diyalog açma | `Tenant` (`TenantsConnectionString`), `Role` (`RolesPermission`), `User` (`UsersPermission`), `Audit Logs` (`AuditLogDetail`), `Notification Rule` (`CreateNotification`), `Branches` (`BranchSeed`), `Sales Orders` (`CreateTenantFromOrderDialog`), `Dynamic Services` (`DynamicServiceEditor` — hem toolbar hem satır) |
|
| Toolbar'dan diyalog açma | `Tenant` (`TenantsConnectionString`), `Role` (`RolesPermission`), `User` (`UsersPermission`), `Audit Logs` (`AuditLogDetail`), `Notification Rule` (`CreateNotification`), `Branches` (`BranchSeed`), `Sales Orders` (`CreateTenantFromOrderDialog`), `Dynamic Services` (`DynamicServiceEditor` — hem toolbar hem satır) |
|
||||||
| Yazmayı servise devretme | `Tenant`, `Role`, `User` — `*ServiceAddress = "list-form-dynamic-api/{tenant\|role\|user}-{insert\|update}"`; `Notification` — `notification-insert` (çoklu değer `MultiValueStringJsonConverter`) |
|
| Yazmayı servise devretme | `Tenant`, `Role`, `User` — `*ServiceAddress = "list-form-dynamic-api/{tenant\|role\|user}-{insert\|update}"`; `Notification` — `notification-insert` (çoklu değer `MultiValueStringJsonConverter`) |
|
||||||
| Ekle düğmesini diyaloğa bağlama | `Dynamic Services` — `EditingOptionJson.AddDialogName = "DynamicServiceEditor"` |
|
| Ekle düğmesini diyaloğa bağlama | `Dynamic Services` — `EditingOptionJson.AddDialogName = "DynamicServiceEditor"` |
|
||||||
| Satır butonundan servis silme | `Dynamic Services` — `UiEvalService.ApiDeleteDynamicService` |
|
| Satır butonundan servis silme | `Dynamic Services` — `UiEvalService.ApiDeleteDynamicService` |
|
||||||
| Toplam satırı | `Sales Order Item`, `Licence Item` (`TotalSummaryJson`) |
|
| Toplam satırı | `Sales Order Item`, `Licence Item` (`TotalSummaryJson`) |
|
||||||
| View üzerinden okuma | `Background Worker Jobs`, `Licence Item` (`SelectCommandType = View`) |
|
| View üzerinden okuma | `Background Worker Jobs`, `Licence Item` (`SelectCommandType = View`) |
|
||||||
| Cascade lookup | `City` → `District` (ülke/il/ilçe zinciri) |
|
| Cascade lookup | `City` → `District` (ülke/il/ilçe zinciri); `Job Position` (şube → departman → üst görev) |
|
||||||
| Alan varsayılanı ve soft delete | `Tenant` (`FormFieldsDefaultValueJson`, `DeleteFieldsDefaultValueJson`) |
|
| Alan varsayılanı ve soft delete | `Tenant` (`FormFieldsDefaultValueJson`, `DeleteFieldsDefaultValueJson`) |
|
||||||
|
|
||||||
### 12.7 Uyarılar
|
### 12.8 Uyarılar
|
||||||
|
|
||||||
- **Bu ekranların seeder'ı idempotenttir:** `ListFormCode` zaten varsa kayıt **güncellenmez**.
|
- **Bu ekranların seeder'ı idempotenttir:** `ListFormCode` zaten varsa kayıt **güncellenmez**.
|
||||||
Hazır bir ekranın davranışını değiştirmek gerekiyorsa seeder'ı düzenlemek yetmez; değişikliği
|
Hazır bir ekranın davranışını değiştirmek gerekiyorsa seeder'ı düzenlemek yetmez; değişikliği
|
||||||
|
|
|
||||||
13
.github/instructions/lowcode.instructions.md
vendored
13
.github/instructions/lowcode.instructions.md
vendored
|
|
@ -12,7 +12,7 @@ bileşen üretebilmesi için gereken somut şemaları, alan anlamlarını, enum
|
||||||
|
|
||||||
Bu dosya **nasıl üretileceğini** anlatır; `lowcode-reference.instructions.md` **neyin
|
Bu dosya **nasıl üretileceğini** anlatır; `lowcode-reference.instructions.md` **neyin
|
||||||
ayarlanabildiğini** alan alan listeler (grid/pivot/chart JSON'ları, alan seviyesi JSON'lar, SQL
|
ayarlanabildiğini** alan alan listeler (grid/pivot/chart JSON'ları, alan seviyesi JSON'lar, SQL
|
||||||
kancaları, tasarımcı envanteri, mail modülü) ve **§12'de Saas + Administration menülerindeki
|
kancaları, tasarımcı envanteri, mail modülü) ve **§12'de Saas + Administration + İK menülerindeki
|
||||||
hazır gelen bütün ekranları** — hangisi yeniden kullanılacak yetenek, hangisi lookup kaynağı,
|
hazır gelen bütün ekranları** — hangisi yeniden kullanılacak yetenek, hangisi lookup kaynağı,
|
||||||
hangisi taklit edilecek canlı örnek. Bir komponent üretmeden önce oradaki **§0 yetenek
|
hangisi taklit edilecek canlı örnek. Bir komponent üretmeden önce oradaki **§0 yetenek
|
||||||
envanterini** tara: platformun sunduğu bir katmanı atlamadığından böyle emin olursun.
|
envanterini** tara: platformun sunduğu bir katmanı atlamadığından böyle emin olursun.
|
||||||
|
|
@ -258,7 +258,7 @@ bildirilir:
|
||||||
| Route kaydı açılıp açılmayacağı | List statik route kullanır, Custom `RoutePath`'ten türer (§9.7) |
|
| Route kaydı açılıp açılmayacağı | List statik route kullanır, Custom `RoutePath`'ten türer (§9.7) |
|
||||||
| Parametreli SQL kullanımı, yetki kontrolü, tenant izolasyonu | Tartışmaya açık değil |
|
| Parametreli SQL kullanımı, yetki kontrolü, tenant izolasyonu | Tartışmaya açık değil |
|
||||||
| Depoda okunabilen tablo/kolon/menü/yetki adları | Önce ara, bulduğunu **doğrulat**, sıfırdan sorma |
|
| Depoda okunabilen tablo/kolon/menü/yetki adları | Önce ara, bulduğunu **doğrulat**, sıfırdan sorma |
|
||||||
| Var olan bir tanım tablosunun (ülke, para birimi, departman, ünvan, birim) yeniden üretilip üretilmeyeceği | Üretilmez; mevcut tabloya lookup bağlanır (reference §12.5) |
|
| Var olan bir tanım tablosunun (ülke, para birimi, departman, ünvan, birim) yeniden üretilip üretilmeyeceği | Üretilmez; mevcut tabloya lookup bağlanır (reference §12.6) |
|
||||||
| Liste ekranının üstündeki KPI kartları (`Widgets`) | List ekranı en az 3 kartla gelir, kartlar tablonun durum/bayrak/tarih/tutar kolonlarından seçilir (§4.6.1) |
|
| Liste ekranının üstündeki KPI kartları (`Widgets`) | List ekranı en az 3 kartla gelir, kartlar tablonun durum/bayrak/tarih/tutar kolonlarından seçilir (§4.6.1) |
|
||||||
|
|
||||||
Buna karşılık **her zaman sorulacak** üç şey vardır, çünkü yanlış varsayım geri dönülmez sonuç
|
Buna karşılık **her zaman sorulacak** üç şey vardır, çünkü yanlış varsayım geri dönülmez sonuç
|
||||||
|
|
@ -3818,7 +3818,7 @@ elle düzeltme ve wizard'ın kapsamadığı düzenlemeler içindir.
|
||||||
| Ekran | Route | Yetki | Ne yapar |
|
| Ekran | Route | Yetki | Ne yapar |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| **Routes** | `/admin/list/App.Menus.Routes` | `App.Menus.Routes` | Fiziksel React sayfalarının route kayıtları (`Key`, `Path`, `ComponentType`, `ComponentPath`, `RouteType`, `Authority[]`) |
|
| **Routes** | `/admin/list/App.Menus.Routes` | `App.Menus.Routes` | Fiziksel React sayfalarının route kayıtları (`Key`, `Path`, `ComponentType`, `ComponentPath`, `RouteType`, `Authority[]`) |
|
||||||
| **Modules** | `/admin/list/App.Menus.Module` | `App.Menus.Module` | Modül adları (`Sas`, `Adm` gibi üst kümeler); kök menü `ModuleId` ile buraya bağlanır |
|
| **Modules** | `/admin/list/App.Menus.Module` | `App.Menus.Module` | Modül adları (`Sas`, `Adm`, `Hr`, `Pub`); kök menü `ModuleId` ile buraya bağlanır. Yetkilerin `Modules` değeri kiracıdaki görünürlüğü belirler (`Sas` host, `Adm`/`Hr` kiracı) |
|
||||||
| **Menu List** | `/admin/list/App.Menus.Menu` | `App.Menus.Menu` | Menü kayıtlarının ham listesi |
|
| **Menu List** | `/admin/list/App.Menus.Menu` | `App.Menus.Menu` | Menü kayıtlarının ham listesi |
|
||||||
| **Menu Manager** | `/admin/menuManager` | `App.Menus.Manager` | Sürükle-bırak menü ağacı; sıra ve hiyerarşi düzenleme |
|
| **Menu Manager** | `/admin/menuManager` | `App.Menus.Manager` | Sürükle-bırak menü ağacı; sıra ve hiyerarşi düzenleme |
|
||||||
|
|
||||||
|
|
@ -4129,7 +4129,8 @@ kullanılacağı** `lowcode-reference.instructions.md` §12'dedir.
|
||||||
| "Dosya yükleme/yönetme" | File Manager | `/admin/files` |
|
| "Dosya yükleme/yönetme" | File Manager | `/admin/files` |
|
||||||
| "Global aramada çıksın" | Global Search kayıtları (`System`, `Group`, `Term`, `Weight`, `Url`) | `/admin/list/App.Definitions.GlobalSearch` |
|
| "Global aramada çıksın" | Global Search kayıtları (`System`, `Group`, `Term`, `Weight`, `Url`) | `/admin/list/App.Definitions.GlobalSearch` |
|
||||||
| "Duyuru, anket, sosyal akış, etkinlik" | Intranet ekranları | `/admin/list/App.Intranet.*` |
|
| "Duyuru, anket, sosyal akış, etkinlik" | Intranet ekranları | `/admin/list/App.Intranet.*` |
|
||||||
| "Para birimi, ülke/il/ilçe, departman, ünvan, birim…" | Definitions ekranları | `/admin/list/App.Definitions.*` |
|
| "Para birimi, ülke/il/ilçe, birim, sektör…" | Definitions ekranları | `/admin/list/App.Definitions.*` |
|
||||||
|
| "Departman, pozisyon/ünvan, yetkinlik, organizasyon şeması" | İK › Definitions · Org Chart (şube bazlı departman/pozisyon) | `/admin/list/App.Hr.*` · `/admin/organization` |
|
||||||
| "Menü düzeni" | Menu Manager (§9.7) | `/admin/menuManager` |
|
| "Menü düzeni" | Menu Manager (§9.7) | `/admin/menuManager` |
|
||||||
| "Genel siteye sayfa" | Custom Component (`Pub` modülü) — Visual Designer'dan yeni component + `Pub` menü kaydı | `/admin/developerkit/components/design/:id` (README.md §10.4) |
|
| "Genel siteye sayfa" | Custom Component (`Pub` modülü) — Visual Designer'dan yeni component + `Pub` menü kaydı | `/admin/developerkit/components/design/:id` (README.md §10.4) |
|
||||||
| "Yapay zekâ asistanı" | AI Bot tanımları | `/admin/list/App.Definitions.AiBot` |
|
| "Yapay zekâ asistanı" | AI Bot tanımları | `/admin/list/App.Definitions.AiBot` |
|
||||||
|
|
@ -4141,10 +4142,10 @@ kullanılacağı** `lowcode-reference.instructions.md` §12'dedir.
|
||||||
> | Durum | Ekranlar (örnek) | Prompt ile kayıt eklerken |
|
> | Durum | Ekranlar (örnek) | Prompt ile kayıt eklerken |
|
||||||
> | --- | --- | --- |
|
> | --- | --- | --- |
|
||||||
> | Seed bayrakları açık — ekrandan yapılan kayıt dosyaya yansır | RecurringJobs, NotificationTemplates/Types/Rules, SettingDefinitions, AiBot, CustomEndpoints, DynamicServices, CustomComponents, McpServers, IntranetWidgets, `App.Menus.*`, `Abp.Identity.Permission*` | Satırı `data/{ListFormCode}.json`'a yaz |
|
> | Seed bayrakları açık — ekrandan yapılan kayıt dosyaya yansır | RecurringJobs, NotificationTemplates/Types/Rules, SettingDefinitions, AiBot, CustomEndpoints, DynamicServices, CustomComponents, McpServers, IntranetWidgets, `App.Menus.*`, `Abp.Identity.Permission*` | Satırı `data/{ListFormCode}.json`'a yaz |
|
||||||
> | `SeedFilePath` dolu, bayraklar kapalı — dosya migrate'te uygulanır, ekrandan yapılan değişiklik dosyaya **yansımaz** | Sequence, GlobalSearch, Currency, ContactTitle, Country/City/District, Uom, Department, JobPosition, ReportTemplates/Categories, WorkHour, Intranet, Blog, Forum, Orders tanımları | Satırı dosyaya yaz; ekrandan eklenen kayıt teslim sayılmaz |
|
> | `SeedFilePath` dolu, bayraklar kapalı — dosya migrate'te uygulanır, ekrandan yapılan değişiklik dosyaya **yansımaz** | Sequence, GlobalSearch, Currency, ContactTitle, Country/City/District, Uom, Hr Department/JobPosition/SkillType, ReportTemplates/Categories, WorkHour, Intranet, Blog, Forum, Orders tanımları | Satırı dosyaya yaz; ekrandan eklenen kayıt teslim sayılmaz |
|
||||||
> | `SeedFilePath` boş — yalnızca veritabanı | DataSource, Languages, Branches, Roles/Users/Tenants, AuditLogs, IpRestrictions, Notification (geçmiş), BackgroundWorkers.Jobs | `sql/execute/{Ad}.sql` altında **varsa güncelleyen/yoksa ekleyen** bir prosedür (§8.4) |
|
> | `SeedFilePath` boş — yalnızca veritabanı | DataSource, Languages, Branches, Roles/Users/Tenants, AuditLogs, IpRestrictions, Notification (geçmiş), BackgroundWorkers.Jobs | `sql/execute/{Ad}.sql` altında **varsa güncelleyen/yoksa ekleyen** bir prosedür (§8.4) |
|
||||||
>
|
>
|
||||||
> Tam liste `ListFormSeeder_Saas.cs` / `ListFormSeeder_Administration.cs` içindeki `SeedFilePath`
|
> Tam liste `ListFormSeeder_Saas.cs` / `ListFormSeeder_Administration.cs` / `ListFormSeeder_Hr.cs` içindeki `SeedFilePath`
|
||||||
> ve `SeedSync*` atamalarıdır. "Ekranı ürettim ama numaratörü/zamanlanmış işi de kurdum" diyorsan,
|
> ve `SeedSync*` atamalarıdır. "Ekranı ürettim ama numaratörü/zamanlanmış işi de kurdum" diyorsan,
|
||||||
> o kayıtların seed karşılığını da yazmadıysan teslim eksiktir.
|
> o kayıtların seed karşılığını da yazmadıysan teslim eksiktir.
|
||||||
|
|
||||||
|
|
|
||||||
35
README.md
35
README.md
|
|
@ -903,10 +903,34 @@ Route.Authority ──┘ └► Permission
|
||||||
karşılığı olan dosyası bulunmayan rota kaydı hiç yüklenmez. Public site menüsü bu modelin
|
karşılığı olan dosyası bulunmayan rota kaydı hiç yüklenmez. Public site menüsü bu modelin
|
||||||
dışındadır: `Pub` modülü altında tutulur ve uygulama konfigürasyonuyla taşınır (bkz. §10.4).
|
dışındadır: `Pub` modülü altında tutulur ve uygulama konfigürasyonuyla taşınır (bkz. §10.4).
|
||||||
|
|
||||||
|
**Modüller ve kök menüler.** Kök menüler bir modüle bağlıdır (`Menu.ModuleId` →
|
||||||
|
`data/App.Menus.Module.json`): `Sas` → `App.Saas` (Saas), `Adm` → `App.Administration`,
|
||||||
|
`Hr` → `App.Hr` (İK), `Pub` → `App.Public.Header` (public site). Tablo ön eki aynı modülden gelir
|
||||||
|
(`MenuPrefix`: `Sas_`, `Adm_`, `Hr_`; `TableNameResolver`). Her yetki satırı `Modules`
|
||||||
|
(pipe ile ayrılmış) değeri taşır; kiracının modül listesi doluysa menü (`MenuAppService`) ve rol
|
||||||
|
yetki ekranı (`RolesPermission.tsx`) yalnızca kesişen modüllerin yetkilerini gösterir. Sözleşme:
|
||||||
|
`Sas` host'ta görünürlüğü, `Adm` ve `Hr` kiracıdaki görünürlüğü belirler — Saas/Administration
|
||||||
|
yetkileri `Sas|Adm`, İK yetkileri `Sas|Hr` taşır.
|
||||||
|
|
||||||
|
**İK (Hr) modülü.** Menü `App.Hr` → `App.Hr.Definitions` (Yetenek Tipleri `App.Hr.SkillType`,
|
||||||
|
Departmanlar `App.Hr.Department`, Pozisyonlar `App.Hr.JobPosition`) ve doğrudan
|
||||||
|
Organizasyon Şeması `App.Hr.OrgChart` (`/admin/organization`; menü ve route aynı yetkiyi ister).
|
||||||
|
Yetki grubu `App.Hr`; ListForm kodu = menü kodu = yetki adı = dil anahtarı. Tablolar
|
||||||
|
`Hr_H_SkillType` / `Hr_H_SkillLevel` / `Hr_H_Skill` (host) ve `Hr_T_Department` /
|
||||||
|
`Hr_T_JobPosition` (kiracı); ekranlar `ListFormSeeder_Hr.cs`'tedir, entity'ler
|
||||||
|
`Entities/{Host,Tenant}/Hr`. Departman ve pozisyon **şube bazlıdır**: `BranchId` zorunlu kolondur
|
||||||
|
(`Guid`, `NOT NULL`), listenin ilk sütunu Şube Adı'dır (`LookupQueryValues.TenantBranchValues`);
|
||||||
|
departman lookup'ı şubeye göre süzülür (`BranchDepartmentValues`). Host varsayılan şubesi sabit
|
||||||
|
kimlikle kurulur (`PlatformConsts.Branches.BranchIdDefaultValue`) ve
|
||||||
|
`data/App.Hr.{Department,JobPosition}.json` satırları bu kimliğe bağlıdır. Numaratör
|
||||||
|
(`App.Definitions.Sequence`) Administration › Definitions altındadır. Ayrıntı:
|
||||||
|
`lowcode-reference.instructions.md` §12.4.
|
||||||
|
|
||||||
**Yetki kodları** `PlatformConsts.AppCodes` içinde merkezî olarak tanımlıdır ve
|
**Yetki kodları** `PlatformConsts.AppCodes` içinde merkezî olarak tanımlıdır ve
|
||||||
`configs/seeds/host/data/Abp.Identity.Permissions.json` ile seed edilir (gruplar:
|
`configs/seeds/host/data/Abp.Identity.Permissions.json` ile seed edilir (gruplar:
|
||||||
`Abp.Identity.PermissionGroups.json`). Ana gruplar: `App.Saas`, `App.Branches`, `App.Intranet.*`,
|
`Abp.Identity.PermissionGroups.json` — `App.Saas` (1), `App.Administration` (2), `App.Hr` (3)).
|
||||||
`App.Definitions.*`, `App.Restrictions.*`, `App.Languages.*`, `App.Listforms.*`,
|
Ana yetki kökleri: `App.Saas`, `App.Branches`, `App.Intranet.*`,
|
||||||
|
`App.Definitions.*`, `App.Hr.*`, `App.Restrictions.*`, `App.Languages.*`, `App.Listforms.*`,
|
||||||
`App.Notifications.*`, `App.BackgroundWorkers.*`, `App.Menus.*`, `App.DeveloperKit.*`,
|
`App.Notifications.*`, `App.BackgroundWorkers.*`, `App.Menus.*`, `App.DeveloperKit.*`,
|
||||||
`App.SqlQueryManager.*`,
|
`App.SqlQueryManager.*`,
|
||||||
`App.Orders.*`, `App.BlogManagement.*`, `App.IdentityManagement.*`, `App.Reports.*`,
|
`App.Orders.*`, `App.BlogManagement.*`, `App.IdentityManagement.*`, `App.Reports.*`,
|
||||||
|
|
@ -1950,7 +1974,8 @@ Yeni ABP modülü eklemek için:
|
||||||
Platformun kendi ekranları buradadır (dil metinleri `configs/seeds/host/data/App.Languages.*.json`); değişiklikleri
|
Platformun kendi ekranları buradadır (dil metinleri `configs/seeds/host/data/App.Languages.*.json`); değişiklikleri
|
||||||
derlenip yayınlanır. Yeni bir modülün nasıl kurulacağını öğrenmek için başvurulacak dosyalar:
|
derlenip yayınlanır. Yeni bir modülün nasıl kurulacağını öğrenmek için başvurulacak dosyalar:
|
||||||
|
|
||||||
- `ListFormSeeder_Saas.cs`, `ListFormSeeder_Administration.cs` — ListForm + alan tanımları
|
- `ListFormSeeder_Saas.cs`, `ListFormSeeder_Administration.cs`, `ListFormSeeder_Hr.cs` — menü
|
||||||
|
modülüne göre ayrılmış ListForm + alan tanımları (İK ekranları `ListFormSeeder_Hr.cs`'te)
|
||||||
- `WizardDataSeeder.cs`, `CrudDataSeeder.cs` — aşağıdaki
|
- `WizardDataSeeder.cs`, `CrudDataSeeder.cs` — aşağıdaki
|
||||||
runtime seed dosyalarını okuyup uygulayan seeder'lar
|
runtime seed dosyalarını okuyup uygulayan seeder'lar
|
||||||
- `ListFormSeedDataApplier`, `CrudEndpointSeedApplier` (`Domain/Data/`) — uygulama kuralının tek
|
- `ListFormSeedDataApplier`, `CrudEndpointSeedApplier` (`Domain/Data/`) — uygulama kuralının tek
|
||||||
|
|
@ -1971,6 +1996,8 @@ configs/seeds/
|
||||||
│ │ # Abp.Identity.Permission{Groups,s}.json — yetki tanımları
|
│ │ # Abp.Identity.Permission{Groups,s}.json — yetki tanımları
|
||||||
│ │ # App.Definitions.{CountryGroup,Country,City,District}.json — adres zinciri
|
│ │ # App.Definitions.{CountryGroup,Country,City,District}.json — adres zinciri
|
||||||
│ │ # App.Definitions.{Currency,ContactTitle,AiBot}.json — para birimi, hitap, AI bot
|
│ │ # App.Definitions.{Currency,ContactTitle,AiBot}.json — para birimi, hitap, AI bot
|
||||||
|
│ │ # App.Hr.{SkillType,SkillLevel,Skill}.json — İK yetkinlik tanımları
|
||||||
|
│ │ # App.Hr.{Department,JobPosition}.json — İK departman → pozisyon (BranchId ile şubeye bağlı)
|
||||||
│ │ # App.Notifications.Notification{Templates,Types,Rules}.json — bildirim şablonu, tipi → kuralı
|
│ │ # App.Notifications.Notification{Templates,Types,Rules}.json — bildirim şablonu, tipi → kuralı
|
||||||
│ │ # App.Languages.{Language,LanguageText}.json — dil → metin (eksik LanguageKey metinle üretilir)
|
│ │ # App.Languages.{Language,LanguageText}.json — dil → metin (eksik LanguageKey metinle üretilir)
|
||||||
│ │ # App.SettingDefinitions.json, App.BackgroundWorkers.RecurringJobs.json — ayar tanımları, zamanlanmış işler
|
│ │ # App.SettingDefinitions.json, App.BackgroundWorkers.RecurringJobs.json — ayar tanımları, zamanlanmış işler
|
||||||
|
|
@ -2009,7 +2036,7 @@ configs/seeds/
|
||||||
- `route.constant.ts` içindeki `supplychain`, `maintenance`, `warehouse`, `projects`, `crm`,
|
- `route.constant.ts` içindeki `supplychain`, `maintenance`, `warehouse`, `projects`, `crm`,
|
||||||
`mrp`, `accounting` ve `hr` yol sabitleri **yol sözleşmesidir**; bu alanların ekranları fiziksel
|
`mrp`, `accounting` ve `hr` yol sabitleri **yol sözleşmesidir**; bu alanların ekranları fiziksel
|
||||||
React sayfaları olarak değil, ListForm konfigürasyonu ile üretilir. `hr` altında yalnızca
|
React sayfaları olarak değil, ListForm konfigürasyonu ile üretilir. `hr` altında yalnızca
|
||||||
organizasyon şeması (`OrgChart.tsx`) fiziksel bir view'dır.
|
organizasyon şeması (`OrgChart.tsx`, İK menüsü `App.Hr.OrgChart`) fiziksel bir view'dır.
|
||||||
- Depodaki `appsettings*.json` ve deployment dokümanları geliştirme değerleri/örnek kimlik
|
- Depodaki `appsettings*.json` ve deployment dokümanları geliştirme değerleri/örnek kimlik
|
||||||
bilgileri içerir; üretim öncesi tümü değiştirilmelidir.
|
bilgileri içerir; üretim öncesi tümü değiştirilmelidir.
|
||||||
- SQL View Designer tek yönlüdür (model → T-SQL). Elle yazılmış ya da tasarımcının kanonik
|
- SQL View Designer tek yönlüdür (model → T-SQL). Elle yazılmış ya da tasarımcının kanonik
|
||||||
|
|
|
||||||
|
|
@ -267,6 +267,27 @@ public static class LookupQueryValues
|
||||||
$"WHERE \"IsDeleted\" = 'false' " +
|
$"WHERE \"IsDeleted\" = 'false' " +
|
||||||
$"ORDER BY \"Name\";";
|
$"ORDER BY \"Name\";";
|
||||||
|
|
||||||
|
// Lookup sorgusu ekranın tenant filtresinden geçmez; kiracı kırılımı token ile sorguda yazılır.
|
||||||
|
public static string TenantBranchValues =
|
||||||
|
$"SELECT " +
|
||||||
|
$"\"Id\" AS \"Key\", " +
|
||||||
|
$"\"Name\" AS \"Name\" " +
|
||||||
|
$"FROM \"{TableNameResolver.GetFullTableName(nameof(TableNameEnum.Branch))}\" " +
|
||||||
|
$"WHERE " +
|
||||||
|
$"\"TenantId\" = '{DefaultValues.TenantId}' " +
|
||||||
|
$"AND \"IsDeleted\" = 'false' " +
|
||||||
|
$"ORDER BY \"Name\";";
|
||||||
|
|
||||||
|
public static string BranchDepartmentValues =
|
||||||
|
$"SELECT " +
|
||||||
|
$"\"Id\" AS \"Key\", " +
|
||||||
|
$"\"Name\" AS \"Name\" " +
|
||||||
|
$"FROM \"{TableNameResolver.GetFullTableName(nameof(TableNameEnum.Department))}\" " +
|
||||||
|
$"WHERE " +
|
||||||
|
$"(\"BranchId\" = @param0 OR @param0 IS NULL) " +
|
||||||
|
$"AND \"IsDeleted\" = 'false' " +
|
||||||
|
$"ORDER BY \"Name\";";
|
||||||
|
|
||||||
public static string JobPositionValues =
|
public static string JobPositionValues =
|
||||||
$"SELECT " +
|
$"SELECT " +
|
||||||
$"\"Id\" AS \"Key\", " +
|
$"\"Id\" AS \"Key\", " +
|
||||||
|
|
|
||||||
|
|
@ -2003,6 +2003,332 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Sequence
|
||||||
|
listFormName = AppCodes.Definitions.Sequence;
|
||||||
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
{
|
||||||
|
var listForm = await _listFormRepository.InsertAsync(
|
||||||
|
new ListForm()
|
||||||
|
{
|
||||||
|
ListFormType = ListFormTypeEnum.List,
|
||||||
|
PageSize = 10,
|
||||||
|
ExportJson = DefaultExportJson,
|
||||||
|
IsSubForm = false,
|
||||||
|
ShowNote = false,
|
||||||
|
LayoutJson = DefaultLayoutJson(),
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
ListFormCode = listFormName,
|
||||||
|
Name = listFormName,
|
||||||
|
Title = listFormName,
|
||||||
|
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
||||||
|
IsTenant = true,
|
||||||
|
IsBranch = false,
|
||||||
|
IsOrganizationUnit = false,
|
||||||
|
Description = $"{listFormName}.Description",
|
||||||
|
SelectCommandType = SelectCommandTypeEnum.Table,
|
||||||
|
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Sequence)),
|
||||||
|
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
||||||
|
SeedSyncInsert = false,
|
||||||
|
SeedSyncUpdate = false,
|
||||||
|
SeedSyncDelete = false,
|
||||||
|
KeyFieldName = "Id",
|
||||||
|
KeyFieldDbSourceType = DbType.Guid,
|
||||||
|
DefaultFilter = DefaultFilterJson,
|
||||||
|
SortMode = GridOptions.SortModeSingle,
|
||||||
|
FilterRowJson = DefaultFilterRowJson(),
|
||||||
|
HeaderFilterJson = DefaultHeaderFilterJson(),
|
||||||
|
SearchPanelJson = DefaultSearchPanelJson(),
|
||||||
|
GroupPanelJson = DefaultGroupPanelJson(),
|
||||||
|
SelectionJson = DefaultSelectionSingleJson,
|
||||||
|
ColumnOptionJson = DefaultColumnOptionJson(),
|
||||||
|
PermissionJson = DefaultPermissionJson(listFormName),
|
||||||
|
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Sequence)),
|
||||||
|
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(),
|
||||||
|
PagerOptionJson = DefaultPagerOptionJson,
|
||||||
|
EditingOptionJson = DefaultEditingOptionJson(listFormName, 700, 500, true, true, true, true, false),
|
||||||
|
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
||||||
|
{
|
||||||
|
new() {
|
||||||
|
Order = 1, ColCount = 2, ColSpan = 1, ItemType = "group" },
|
||||||
|
}),
|
||||||
|
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(),
|
||||||
|
FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] {
|
||||||
|
new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value },
|
||||||
|
new() { FieldName = "PaddingSize", FieldDbType = DbType.Int16, Value = "5", CustomValueType = FieldCustomValueTypeEnum.Value },
|
||||||
|
new() { FieldName = "IncrementStep", FieldDbType = DbType.Int16, Value = "1", CustomValueType = FieldCustomValueTypeEnum.Value },
|
||||||
|
new() { FieldName = "StartNumber", FieldDbType = DbType.Int16, Value = "1", CustomValueType = FieldCustomValueTypeEnum.Value },
|
||||||
|
new() { FieldName = "FormatTemplate", FieldDbType = DbType.String, Value = "{Prefix}{Number}{Suffix}", CustomValueType = FieldCustomValueTypeEnum.Value },
|
||||||
|
new() { FieldName = "ResetPeriod", FieldDbType = DbType.Int16, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value },
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
#region Sequence Fields
|
||||||
|
await _listFormFieldRepository.InsertManyAsync([
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Guid,
|
||||||
|
FieldName = "Id",
|
||||||
|
CaptionName = "App.Listform.ListformField.Id",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 1,
|
||||||
|
Visible = false,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Name",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 1,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.Name",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 2,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
SortIndex = 1,
|
||||||
|
SortDirection = GridColumnOptions.SortOrderAsc,
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Prefix",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 3,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.Prefix",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 3,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Suffix",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 4,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.Suffix",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 4,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Boolean,
|
||||||
|
FieldName = "IsActive",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 2,
|
||||||
|
EditorType2 = EditorTypes.dxCheckBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.IsActive",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 5,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
Alignment = "center",
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Int32,
|
||||||
|
FieldName = "PaddingSize",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 5,
|
||||||
|
EditorType2 = EditorTypes.dxNumberBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.PaddingSize",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 6,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Int32,
|
||||||
|
FieldName = "IncrementStep",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 6,
|
||||||
|
EditorType2 = EditorTypes.dxNumberBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.IncrementStep",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 7,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Int32,
|
||||||
|
FieldName = "NextNumber",
|
||||||
|
CaptionName = "App.Listform.ListformField.NextNumber",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 8,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Int32,
|
||||||
|
FieldName = "ResetPeriod",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 7,
|
||||||
|
EditorType2 = EditorTypes.dxSelectBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
EditorOptions = EditorOptions.ShowClearButton(),
|
||||||
|
CaptionName = "App.Listform.ListformField.ResetPeriod",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 9,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
LookupJson = JsonSerializer.Serialize(new LookupDto
|
||||||
|
{
|
||||||
|
DataSourceType = UiLookupDataSourceTypeEnum.StaticData,
|
||||||
|
DisplayExpr = "name",
|
||||||
|
ValueExpr = "key",
|
||||||
|
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
|
||||||
|
new() { Key=0, Name="App.StaticLookup.None" },
|
||||||
|
new() { Key=1, Name="App.StaticLookup.Yearly"},
|
||||||
|
new() { Key=2, Name="App.StaticLookup.Monthly"},
|
||||||
|
new() { Key=3, Name="App.StaticLookup.Daily"},
|
||||||
|
new() { Key=4, Name="App.StaticLookup.Hourly"},
|
||||||
|
new() { Key=5, Name="App.StaticLookup.Minutely"},
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Int32,
|
||||||
|
FieldName = "StartNumber",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 8,
|
||||||
|
EditorType2 = EditorTypes.dxNumberBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.StartNumber",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 10,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "LastPeriodKey",
|
||||||
|
CaptionName = "App.Listform.ListformField.LastPeriodKey",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 11,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "FormatTemplate",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 9,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 2,
|
||||||
|
CaptionName = "App.Listform.ListformField.FormatTemplate",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 12,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
PlaceHolder="{Prefix}-{yyyy}{MM}{dd}-{Number}-{Suffix}",
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region WorkHour
|
#region WorkHour
|
||||||
listFormName = AppCodes.Restrictions.WorkHour;
|
listFormName = AppCodes.Restrictions.WorkHour;
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
|
@ -2644,284 +2970,6 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Department
|
|
||||||
listFormName = AppCodes.Definitions.Department;
|
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
|
||||||
{
|
|
||||||
var listForm = await _listFormRepository.InsertAsync(
|
|
||||||
new ListForm()
|
|
||||||
{
|
|
||||||
ListFormType = ListFormTypeEnum.List,
|
|
||||||
PageSize = 10,
|
|
||||||
ExportJson = DefaultExportJson,
|
|
||||||
IsSubForm = false,
|
|
||||||
ShowNote = false,
|
|
||||||
LayoutJson = DefaultLayoutJson("tree"),
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
ListFormCode = listFormName,
|
|
||||||
Name = listFormName,
|
|
||||||
Title = listFormName,
|
|
||||||
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
|
||||||
IsTenant = true,
|
|
||||||
IsBranch = false,
|
|
||||||
IsOrganizationUnit = false,
|
|
||||||
Description = $"{listFormName}.Description",
|
|
||||||
SelectCommandType = SelectCommandTypeEnum.Table,
|
|
||||||
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Department)),
|
|
||||||
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
|
||||||
SeedSyncInsert = false,
|
|
||||||
SeedSyncUpdate = false,
|
|
||||||
SeedSyncDelete = false,
|
|
||||||
KeyFieldName = "Id",
|
|
||||||
KeyFieldDbSourceType = DbType.Guid,
|
|
||||||
DefaultFilter = DefaultFilterJson,
|
|
||||||
SortMode = GridOptions.SortModeSingle,
|
|
||||||
FilterRowJson = DefaultFilterRowJson(),
|
|
||||||
HeaderFilterJson = DefaultHeaderFilterJson(),
|
|
||||||
SearchPanelJson = DefaultSearchPanelJson(),
|
|
||||||
GroupPanelJson = DefaultGroupPanelJson(),
|
|
||||||
SelectionJson = DefaultSelectionSingleJson,
|
|
||||||
ColumnOptionJson = DefaultColumnOptionJson(),
|
|
||||||
PermissionJson = DefaultPermissionJson(listFormName),
|
|
||||||
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Department)),
|
|
||||||
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(),
|
|
||||||
PagerOptionJson = DefaultPagerOptionJson,
|
|
||||||
TreeOptionJson = DefaultTreeOptionJson("Id", "ParentId", true),
|
|
||||||
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(),
|
|
||||||
EditingOptionJson = DefaultEditingOptionJson(listFormName, 400, 500, true, true, true, true, false),
|
|
||||||
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
|
||||||
{
|
|
||||||
new() {
|
|
||||||
Order = 1, ColCount = 1, ColSpan = 1, ItemType = "group" },
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
#region Department Fields
|
|
||||||
await _listFormFieldRepository.InsertManyAsync([
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Guid,
|
|
||||||
FieldName = "Id",
|
|
||||||
CaptionName = "App.Listform.ListformField.Id",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 1,
|
|
||||||
Visible = false,
|
|
||||||
IsActive = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Name",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 1,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.Name",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 2,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
SortIndex = 1,
|
|
||||||
SortDirection = GridColumnOptions.SortOrderAsc,
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Guid,
|
|
||||||
FieldName = "ParentId",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 2,
|
|
||||||
EditorType2 = EditorTypes.dxSelectBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
EditorOptions = EditorOptions.ShowClearButton(),
|
|
||||||
CaptionName = "App.Listform.ListformField.ParentId",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 3,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
AllowSearch = true,
|
|
||||||
LookupJson = JsonSerializer.Serialize(new LookupDto {
|
|
||||||
DataSourceType = UiLookupDataSourceTypeEnum.Query,
|
|
||||||
DisplayExpr = "Name",
|
|
||||||
ValueExpr = "Key",
|
|
||||||
LookupQuery = LookupQueryValues.DepartmentValues,
|
|
||||||
}),
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region JobPosition
|
|
||||||
listFormName = AppCodes.Definitions.JobPosition;
|
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
|
||||||
{
|
|
||||||
var listForm = await _listFormRepository.InsertAsync(
|
|
||||||
new ListForm()
|
|
||||||
{
|
|
||||||
ListFormType = ListFormTypeEnum.List,
|
|
||||||
PageSize = 10,
|
|
||||||
ExportJson = DefaultExportJson,
|
|
||||||
IsSubForm = false,
|
|
||||||
ShowNote = false,
|
|
||||||
LayoutJson = DefaultLayoutJson("tree"),
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
ListFormCode = listFormName,
|
|
||||||
Name = listFormName,
|
|
||||||
Title = listFormName,
|
|
||||||
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
|
||||||
IsTenant = true,
|
|
||||||
IsBranch = false,
|
|
||||||
IsOrganizationUnit = false,
|
|
||||||
Description = $"{listFormName}.Description",
|
|
||||||
SelectCommandType = SelectCommandTypeEnum.Table,
|
|
||||||
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.JobPosition)),
|
|
||||||
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
|
||||||
SeedSyncInsert = false,
|
|
||||||
SeedSyncUpdate = false,
|
|
||||||
SeedSyncDelete = false,
|
|
||||||
KeyFieldName = "Id",
|
|
||||||
KeyFieldDbSourceType = DbType.Guid,
|
|
||||||
DefaultFilter = DefaultFilterJson,
|
|
||||||
SortMode = GridOptions.SortModeSingle,
|
|
||||||
FilterRowJson = DefaultFilterRowJson(),
|
|
||||||
HeaderFilterJson = DefaultHeaderFilterJson(),
|
|
||||||
SearchPanelJson = DefaultSearchPanelJson(),
|
|
||||||
GroupPanelJson = DefaultGroupPanelJson(),
|
|
||||||
SelectionJson = DefaultSelectionSingleJson,
|
|
||||||
ColumnOptionJson = DefaultColumnOptionJson(),
|
|
||||||
PermissionJson = DefaultPermissionJson(listFormName),
|
|
||||||
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.JobPosition)),
|
|
||||||
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(),
|
|
||||||
PagerOptionJson = DefaultPagerOptionJson,
|
|
||||||
TreeOptionJson = DefaultTreeOptionJson("Id", "ParentId", true),
|
|
||||||
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(),
|
|
||||||
EditingOptionJson = DefaultEditingOptionJson(listFormName, 400, 350, true, true, true, true, false),
|
|
||||||
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
|
||||||
{
|
|
||||||
new() {
|
|
||||||
Order = 1, ColCount = 1, ColSpan = 1, ItemType = "group" },
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
#region JobPosition Fields
|
|
||||||
await _listFormFieldRepository.InsertManyAsync([
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Guid,
|
|
||||||
FieldName = "Id",
|
|
||||||
CaptionName = "App.Listform.ListformField.Id",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 1,
|
|
||||||
Visible = false,
|
|
||||||
IsActive = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Name",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 2,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.Name",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 2,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
SortIndex = 1,
|
|
||||||
SortDirection = GridColumnOptions.SortOrderAsc,
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Guid,
|
|
||||||
FieldName = "ParentId",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 3,
|
|
||||||
EditorType2 = EditorTypes.dxSelectBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
EditorOptions = EditorOptions.ShowClearButton(),
|
|
||||||
CaptionName = "App.Listform.ListformField.ParentId",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 3,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
AllowSearch = true,
|
|
||||||
LookupJson = JsonSerializer.Serialize(new LookupDto {
|
|
||||||
DataSourceType = UiLookupDataSourceTypeEnum.Query,
|
|
||||||
DisplayExpr = "Name",
|
|
||||||
ValueExpr = "Key",
|
|
||||||
LookupQuery = LookupQueryValues.JobPositionFullValues,
|
|
||||||
CascadeRelationField = "DepartmentId",
|
|
||||||
CascadeFilterOperator="=",
|
|
||||||
CascadeParentFields = "DepartmentId",
|
|
||||||
}),
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Guid,
|
|
||||||
FieldName = "DepartmentId",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 1,
|
|
||||||
EditorType2 = EditorTypes.dxSelectBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
EditorOptions = EditorOptions.ShowClearButton(),
|
|
||||||
CaptionName = "App.Listform.ListformField.Department",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 4,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
AllowSearch = true,
|
|
||||||
LookupJson = JsonSerializer.Serialize(new LookupDto {
|
|
||||||
DataSourceType = UiLookupDataSourceTypeEnum.Query,
|
|
||||||
DisplayExpr = "Name",
|
|
||||||
ValueExpr = "Key",
|
|
||||||
LookupQuery = LookupQueryValues.DepartmentValues,
|
|
||||||
CascadeEmptyFields = "ParentId"
|
|
||||||
}),
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Announcement
|
#region Announcement
|
||||||
listFormName = AppCodes.Intranet.Announcement;
|
listFormName = AppCodes.Intranet.Announcement;
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,769 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Sozsoft.Languages.Languages;
|
||||||
|
using Sozsoft.Platform.Editors;
|
||||||
|
using Sozsoft.Platform.Entities;
|
||||||
|
using Sozsoft.Platform.Enums;
|
||||||
|
using Sozsoft.Platform.ListForms;
|
||||||
|
using Sozsoft.Platform.Queries;
|
||||||
|
using Volo.Abp.Data;
|
||||||
|
using Volo.Abp.DependencyInjection;
|
||||||
|
using Volo.Abp.Domain.Repositories;
|
||||||
|
using static Sozsoft.Platform.PlatformConsts;
|
||||||
|
using static Sozsoft.Platform.PlatformSeeder.ListFormSeeder_DefaultJsons;
|
||||||
|
using AppCodes = Sozsoft.Platform.Data.Seeds.SeedConsts.AppCodes;
|
||||||
|
|
||||||
|
namespace Sozsoft.Platform.Data.Seeds;
|
||||||
|
|
||||||
|
public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency
|
||||||
|
{
|
||||||
|
private readonly IRepository<ListForm, Guid> _listFormRepository;
|
||||||
|
private readonly IRepository<ListFormField, Guid> _listFormFieldRepository;
|
||||||
|
|
||||||
|
public ListFormSeeder_Hr(
|
||||||
|
IRepository<ListForm, Guid> listFormRepository,
|
||||||
|
IRepository<ListFormField, Guid> listFormFieldRepository)
|
||||||
|
{
|
||||||
|
_listFormRepository = listFormRepository;
|
||||||
|
_listFormFieldRepository = listFormFieldRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SeedAsync(DataSeedContext context)
|
||||||
|
{
|
||||||
|
var listFormName = String.Empty;
|
||||||
|
|
||||||
|
#region SkillType
|
||||||
|
listFormName = AppCodes.Hr.SkillType;
|
||||||
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
{
|
||||||
|
var listForm = await _listFormRepository.InsertAsync(
|
||||||
|
new ListForm
|
||||||
|
{
|
||||||
|
ListFormType = ListFormTypeEnum.List,
|
||||||
|
PageSize = 10,
|
||||||
|
ExportJson = DefaultExportJson,
|
||||||
|
IsSubForm = false,
|
||||||
|
ShowNote = true,
|
||||||
|
LayoutJson = DefaultLayoutJson(),
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
ListFormCode = listFormName,
|
||||||
|
Name = listFormName,
|
||||||
|
Title = listFormName,
|
||||||
|
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
||||||
|
IsTenant = false,
|
||||||
|
IsBranch = false,
|
||||||
|
IsOrganizationUnit = false,
|
||||||
|
Description = $"{listFormName}.Description",
|
||||||
|
SelectCommandType = SelectCommandTypeEnum.Table,
|
||||||
|
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.SkillType)),
|
||||||
|
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
||||||
|
SeedSyncInsert = false,
|
||||||
|
SeedSyncUpdate = false,
|
||||||
|
SeedSyncDelete = false,
|
||||||
|
KeyFieldName = "Id",
|
||||||
|
KeyFieldDbSourceType = DbType.String,
|
||||||
|
DefaultFilter = DefaultFilterJson,
|
||||||
|
SortMode = GridOptions.SortModeSingle,
|
||||||
|
FilterRowJson = DefaultFilterRowJson(),
|
||||||
|
HeaderFilterJson = DefaultHeaderFilterJson(),
|
||||||
|
SearchPanelJson = DefaultSearchPanelJson(),
|
||||||
|
GroupPanelJson = DefaultGroupPanelJson(),
|
||||||
|
SelectionJson = DefaultSelectionSingleJson,
|
||||||
|
ColumnOptionJson = DefaultColumnOptionJson(),
|
||||||
|
PermissionJson = DefaultPermissionJson(listFormName),
|
||||||
|
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.SkillType)),
|
||||||
|
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(DbType.String),
|
||||||
|
PagerOptionJson = DefaultPagerOptionJson,
|
||||||
|
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(DbType.String, "Name"),
|
||||||
|
EditingOptionJson = DefaultEditingOptionJson(listFormName, 400, 200, true, true, true, true, false, true),
|
||||||
|
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
||||||
|
{
|
||||||
|
new() {
|
||||||
|
Order = 1, ColCount = 1, ColSpan = 1, ItemType = "group" },
|
||||||
|
}),
|
||||||
|
SubFormsJson = JsonSerializer.Serialize(new List<dynamic>() {
|
||||||
|
new {
|
||||||
|
TabType = ListFormTabTypeEnum.List,
|
||||||
|
TabTitle = AppCodes.Hr.SkillLevel,
|
||||||
|
Code = AppCodes.Hr.SkillLevel,
|
||||||
|
Relation = new List<dynamic>() {
|
||||||
|
new {
|
||||||
|
ParentFieldName = "Id",
|
||||||
|
DbType = DbType.String,
|
||||||
|
ChildFieldName = "SkillTypeId"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new {
|
||||||
|
TabType = ListFormTabTypeEnum.List,
|
||||||
|
TabTitle = AppCodes.Hr.Skill,
|
||||||
|
Code = AppCodes.Hr.Skill,
|
||||||
|
Relation = new List<dynamic>() {
|
||||||
|
new {
|
||||||
|
ParentFieldName = "Id",
|
||||||
|
DbType = DbType.String,
|
||||||
|
ChildFieldName = "SkillTypeId"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, autoSave: true);
|
||||||
|
|
||||||
|
#region SkillType Fields
|
||||||
|
await _listFormFieldRepository.InsertManyAsync([
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Id",
|
||||||
|
CaptionName = "App.Listform.ListformField.Id",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 1,
|
||||||
|
Visible = false,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson,
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Name",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 1,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.Name",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 2,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson,
|
||||||
|
}
|
||||||
|
], autoSave: true);
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Skill Level
|
||||||
|
listFormName = AppCodes.Hr.SkillLevel;
|
||||||
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
{
|
||||||
|
var listForm = await _listFormRepository.InsertAsync(
|
||||||
|
new ListForm()
|
||||||
|
{
|
||||||
|
ListFormType = ListFormTypeEnum.List,
|
||||||
|
PageSize = 10,
|
||||||
|
ExportJson = DefaultExportJson,
|
||||||
|
IsSubForm = true,
|
||||||
|
ShowNote = false,
|
||||||
|
LayoutJson = DefaultLayoutJson(),
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
ListFormCode = listFormName,
|
||||||
|
Name = listFormName,
|
||||||
|
Title = listFormName,
|
||||||
|
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
||||||
|
IsTenant = false,
|
||||||
|
IsBranch = false,
|
||||||
|
IsOrganizationUnit = false,
|
||||||
|
Description = $"{listFormName}.Description",
|
||||||
|
SelectCommandType = SelectCommandTypeEnum.Table,
|
||||||
|
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.SkillLevel)),
|
||||||
|
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
||||||
|
SeedSyncInsert = false,
|
||||||
|
SeedSyncUpdate = false,
|
||||||
|
SeedSyncDelete = false,
|
||||||
|
KeyFieldName = "Id",
|
||||||
|
KeyFieldDbSourceType = DbType.String,
|
||||||
|
DefaultFilter = DefaultFilterJson,
|
||||||
|
SortMode = GridOptions.SortModeSingle,
|
||||||
|
FilterRowJson = DefaultFilterRowJson(),
|
||||||
|
HeaderFilterJson = DefaultHeaderFilterJson(),
|
||||||
|
SearchPanelJson = DefaultSearchPanelJson(),
|
||||||
|
GroupPanelJson = DefaultGroupPanelJson(),
|
||||||
|
SelectionJson = DefaultSelectionSingleJson,
|
||||||
|
ColumnOptionJson = DefaultColumnOptionJson(),
|
||||||
|
PermissionJson = DefaultPermissionJson(listFormName),
|
||||||
|
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.SkillLevel)),
|
||||||
|
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(DbType.String),
|
||||||
|
PagerOptionJson = DefaultPagerOptionJson,
|
||||||
|
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(DbType.String, "Name"),
|
||||||
|
EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 450, true, true, true, true, false),
|
||||||
|
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>() {
|
||||||
|
new() { Order=1, ColCount=1, ColSpan=1, ItemType="group" },
|
||||||
|
}),
|
||||||
|
FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] {
|
||||||
|
new() { FieldName = "IsDefault", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value }
|
||||||
|
}),
|
||||||
|
}, autoSave: true
|
||||||
|
);
|
||||||
|
|
||||||
|
#region Skill Level Fields
|
||||||
|
await _listFormFieldRepository.InsertManyAsync([
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Id",
|
||||||
|
CaptionName = "App.Listform.ListformField.Id",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 1,
|
||||||
|
Visible = false,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
SortIndex = 0,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Name",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 1,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.Name",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 2,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
SortIndex = 1,
|
||||||
|
SortDirection = GridColumnOptions.SortOrderAsc,
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Int32,
|
||||||
|
FieldName = "Progress",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 2,
|
||||||
|
EditorType2 = EditorTypes.dxSlider,
|
||||||
|
ColSpan = 1,
|
||||||
|
EditorOptions = EditorOptions.Slider(),
|
||||||
|
CaptionName = "App.Listform.ListformField.Progress",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 3,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Boolean,
|
||||||
|
FieldName = "IsDefault",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 3,
|
||||||
|
EditorType2 = EditorTypes.dxCheckBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "Abp.Mailing.Default",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 4,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "SkillTypeId",
|
||||||
|
CaptionName = "App.Listform.ListformField.SkillTypeId",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 5,
|
||||||
|
Visible = false,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
], autoSave: true);
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Skill
|
||||||
|
listFormName = AppCodes.Hr.Skill;
|
||||||
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
{
|
||||||
|
var listForm = await _listFormRepository.InsertAsync(
|
||||||
|
new ListForm()
|
||||||
|
{
|
||||||
|
ListFormType = ListFormTypeEnum.List,
|
||||||
|
PageSize = 10,
|
||||||
|
ExportJson = DefaultExportJson,
|
||||||
|
IsSubForm = true,
|
||||||
|
ShowNote = false,
|
||||||
|
LayoutJson = DefaultLayoutJson(),
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
ListFormCode = listFormName,
|
||||||
|
Name = listFormName,
|
||||||
|
Title = listFormName,
|
||||||
|
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
||||||
|
IsTenant = false,
|
||||||
|
IsBranch = false,
|
||||||
|
IsOrganizationUnit = false,
|
||||||
|
Description = $"{listFormName}.Description",
|
||||||
|
SelectCommandType = SelectCommandTypeEnum.Table,
|
||||||
|
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Skill)),
|
||||||
|
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
||||||
|
SeedSyncInsert = false,
|
||||||
|
SeedSyncUpdate = false,
|
||||||
|
SeedSyncDelete = false,
|
||||||
|
KeyFieldName = "Id",
|
||||||
|
KeyFieldDbSourceType = DbType.String,
|
||||||
|
DefaultFilter = DefaultFilterJson,
|
||||||
|
SortMode = GridOptions.SortModeSingle,
|
||||||
|
FilterRowJson = DefaultFilterRowJson(),
|
||||||
|
HeaderFilterJson = DefaultHeaderFilterJson(),
|
||||||
|
SearchPanelJson = DefaultSearchPanelJson(),
|
||||||
|
GroupPanelJson = DefaultGroupPanelJson(),
|
||||||
|
SelectionJson = DefaultSelectionSingleJson,
|
||||||
|
ColumnOptionJson = DefaultColumnOptionJson(),
|
||||||
|
PermissionJson = DefaultPermissionJson(listFormName),
|
||||||
|
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Skill)),
|
||||||
|
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(DbType.String),
|
||||||
|
PagerOptionJson = DefaultPagerOptionJson,
|
||||||
|
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(DbType.String, "Name"),
|
||||||
|
EditingOptionJson = DefaultEditingOptionJson(AppCodes.Hr.SkillLevel, 500, 250, true, true, true, true, false),
|
||||||
|
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>() {
|
||||||
|
new() { Order=1, ColCount=1, ColSpan=1, ItemType="group" },
|
||||||
|
}),
|
||||||
|
}, autoSave: true
|
||||||
|
);
|
||||||
|
|
||||||
|
#region Skill Fields
|
||||||
|
await _listFormFieldRepository.InsertManyAsync([
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Id",
|
||||||
|
CaptionName = "App.Listform.ListformField.Id",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 1,
|
||||||
|
Visible = false,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
SortIndex = 0,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Name",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 1,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.Name",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 2,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
SortIndex = 1,
|
||||||
|
SortDirection = GridColumnOptions.SortOrderAsc,
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "SkillTypeId",
|
||||||
|
CaptionName = "App.Listform.ListformField.SkillTypeId",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 3,
|
||||||
|
Visible = false,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
], autoSave: true);
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Department
|
||||||
|
listFormName = AppCodes.Hr.Department;
|
||||||
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
{
|
||||||
|
var listForm = await _listFormRepository.InsertAsync(
|
||||||
|
new ListForm()
|
||||||
|
{
|
||||||
|
ListFormType = ListFormTypeEnum.List,
|
||||||
|
PageSize = 10,
|
||||||
|
ExportJson = DefaultExportJson,
|
||||||
|
IsSubForm = false,
|
||||||
|
ShowNote = false,
|
||||||
|
LayoutJson = DefaultLayoutJson("tree"),
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
ListFormCode = listFormName,
|
||||||
|
Name = listFormName,
|
||||||
|
Title = listFormName,
|
||||||
|
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
||||||
|
IsTenant = true,
|
||||||
|
IsBranch = false,
|
||||||
|
IsOrganizationUnit = false,
|
||||||
|
Description = $"{listFormName}.Description",
|
||||||
|
SelectCommandType = SelectCommandTypeEnum.Table,
|
||||||
|
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Department)),
|
||||||
|
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
||||||
|
SeedSyncInsert = false,
|
||||||
|
SeedSyncUpdate = false,
|
||||||
|
SeedSyncDelete = false,
|
||||||
|
KeyFieldName = "Id",
|
||||||
|
KeyFieldDbSourceType = DbType.Guid,
|
||||||
|
DefaultFilter = DefaultFilterJson,
|
||||||
|
SortMode = GridOptions.SortModeSingle,
|
||||||
|
FilterRowJson = DefaultFilterRowJson(),
|
||||||
|
HeaderFilterJson = DefaultHeaderFilterJson(),
|
||||||
|
SearchPanelJson = DefaultSearchPanelJson(),
|
||||||
|
GroupPanelJson = DefaultGroupPanelJson(),
|
||||||
|
SelectionJson = DefaultSelectionSingleJson,
|
||||||
|
ColumnOptionJson = DefaultColumnOptionJson(),
|
||||||
|
PermissionJson = DefaultPermissionJson(listFormName),
|
||||||
|
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Department)),
|
||||||
|
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(),
|
||||||
|
PagerOptionJson = DefaultPagerOptionJson,
|
||||||
|
TreeOptionJson = DefaultTreeOptionJson("Id", "ParentId", true),
|
||||||
|
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(),
|
||||||
|
EditingOptionJson = DefaultEditingOptionJson(listFormName, 400, 500, true, true, true, true, false),
|
||||||
|
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
||||||
|
{
|
||||||
|
new() {
|
||||||
|
Order = 1, ColCount = 1, ColSpan = 1, ItemType = "group" },
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
#region Department Fields
|
||||||
|
await _listFormFieldRepository.InsertManyAsync([
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Guid,
|
||||||
|
FieldName = "Id",
|
||||||
|
CaptionName = "App.Listform.ListformField.Id",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 1,
|
||||||
|
Visible = false,
|
||||||
|
IsActive = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Guid,
|
||||||
|
FieldName = "BranchId",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 1,
|
||||||
|
EditorType2 = EditorTypes.dxSelectBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.BranchId",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 2,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
AllowSearch = true,
|
||||||
|
LookupJson = JsonSerializer.Serialize(new LookupDto {
|
||||||
|
DataSourceType = UiLookupDataSourceTypeEnum.Query,
|
||||||
|
DisplayExpr = "Name",
|
||||||
|
ValueExpr = "Key",
|
||||||
|
LookupQuery = LookupQueryValues.TenantBranchValues,
|
||||||
|
CascadeEmptyFields = "ParentId"
|
||||||
|
}),
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Name",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 2,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.Name",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 3,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
SortIndex = 1,
|
||||||
|
SortDirection = GridColumnOptions.SortOrderAsc,
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Guid,
|
||||||
|
FieldName = "ParentId",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 3,
|
||||||
|
EditorType2 = EditorTypes.dxSelectBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
EditorOptions = EditorOptions.ShowClearButton(),
|
||||||
|
CaptionName = "App.Listform.ListformField.ParentId",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 4,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
AllowSearch = true,
|
||||||
|
LookupJson = JsonSerializer.Serialize(new LookupDto {
|
||||||
|
DataSourceType = UiLookupDataSourceTypeEnum.Query,
|
||||||
|
DisplayExpr = "Name",
|
||||||
|
ValueExpr = "Key",
|
||||||
|
LookupQuery = LookupQueryValues.BranchDepartmentValues,
|
||||||
|
CascadeRelationField = "BranchId",
|
||||||
|
CascadeFilterOperator="=",
|
||||||
|
CascadeParentFields = "BranchId",
|
||||||
|
}),
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region JobPosition
|
||||||
|
listFormName = AppCodes.Hr.JobPosition;
|
||||||
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
{
|
||||||
|
var listForm = await _listFormRepository.InsertAsync(
|
||||||
|
new ListForm()
|
||||||
|
{
|
||||||
|
ListFormType = ListFormTypeEnum.List,
|
||||||
|
PageSize = 10,
|
||||||
|
ExportJson = DefaultExportJson,
|
||||||
|
IsSubForm = false,
|
||||||
|
ShowNote = false,
|
||||||
|
LayoutJson = DefaultLayoutJson("tree"),
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
ListFormCode = listFormName,
|
||||||
|
Name = listFormName,
|
||||||
|
Title = listFormName,
|
||||||
|
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
||||||
|
IsTenant = true,
|
||||||
|
IsBranch = false,
|
||||||
|
IsOrganizationUnit = false,
|
||||||
|
Description = $"{listFormName}.Description",
|
||||||
|
SelectCommandType = SelectCommandTypeEnum.Table,
|
||||||
|
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.JobPosition)),
|
||||||
|
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
||||||
|
SeedSyncInsert = false,
|
||||||
|
SeedSyncUpdate = false,
|
||||||
|
SeedSyncDelete = false,
|
||||||
|
KeyFieldName = "Id",
|
||||||
|
KeyFieldDbSourceType = DbType.Guid,
|
||||||
|
DefaultFilter = DefaultFilterJson,
|
||||||
|
SortMode = GridOptions.SortModeSingle,
|
||||||
|
FilterRowJson = DefaultFilterRowJson(),
|
||||||
|
HeaderFilterJson = DefaultHeaderFilterJson(),
|
||||||
|
SearchPanelJson = DefaultSearchPanelJson(),
|
||||||
|
GroupPanelJson = DefaultGroupPanelJson(),
|
||||||
|
SelectionJson = DefaultSelectionSingleJson,
|
||||||
|
ColumnOptionJson = DefaultColumnOptionJson(),
|
||||||
|
PermissionJson = DefaultPermissionJson(listFormName),
|
||||||
|
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.JobPosition)),
|
||||||
|
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(),
|
||||||
|
PagerOptionJson = DefaultPagerOptionJson,
|
||||||
|
TreeOptionJson = DefaultTreeOptionJson("Id", "ParentId", true),
|
||||||
|
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(),
|
||||||
|
EditingOptionJson = DefaultEditingOptionJson(listFormName, 400, 350, true, true, true, true, false),
|
||||||
|
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
||||||
|
{
|
||||||
|
new() {
|
||||||
|
Order = 1, ColCount = 1, ColSpan = 1, ItemType = "group" },
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
#region JobPosition Fields
|
||||||
|
await _listFormFieldRepository.InsertManyAsync([
|
||||||
|
new() {
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Guid,
|
||||||
|
FieldName = "Id",
|
||||||
|
CaptionName = "App.Listform.ListformField.Id",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 1,
|
||||||
|
Visible = false,
|
||||||
|
IsActive = true,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Guid,
|
||||||
|
FieldName = "BranchId",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 1,
|
||||||
|
EditorType2 = EditorTypes.dxSelectBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.BranchId",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 2,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
AllowSearch = true,
|
||||||
|
LookupJson = JsonSerializer.Serialize(new LookupDto {
|
||||||
|
DataSourceType = UiLookupDataSourceTypeEnum.Query,
|
||||||
|
DisplayExpr = "Name",
|
||||||
|
ValueExpr = "Key",
|
||||||
|
LookupQuery = LookupQueryValues.TenantBranchValues,
|
||||||
|
CascadeEmptyFields = "DepartmentId,ParentId"
|
||||||
|
}),
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "Name",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 3,
|
||||||
|
EditorType2 = EditorTypes.dxTextBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
CaptionName = "App.Listform.ListformField.Name",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 3,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
SortIndex = 1,
|
||||||
|
SortDirection = GridColumnOptions.SortOrderAsc,
|
||||||
|
AllowSearch = true,
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Guid,
|
||||||
|
FieldName = "ParentId",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 4,
|
||||||
|
EditorType2 = EditorTypes.dxSelectBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
EditorOptions = EditorOptions.ShowClearButton(),
|
||||||
|
CaptionName = "App.Listform.ListformField.ParentId",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 4,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
AllowSearch = true,
|
||||||
|
LookupJson = JsonSerializer.Serialize(new LookupDto {
|
||||||
|
DataSourceType = UiLookupDataSourceTypeEnum.Query,
|
||||||
|
DisplayExpr = "Name",
|
||||||
|
ValueExpr = "Key",
|
||||||
|
LookupQuery = LookupQueryValues.JobPositionFullValues,
|
||||||
|
CascadeRelationField = "DepartmentId",
|
||||||
|
CascadeFilterOperator="=",
|
||||||
|
CascadeParentFields = "DepartmentId",
|
||||||
|
}),
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.Guid,
|
||||||
|
FieldName = "DepartmentId",
|
||||||
|
EditGroupOrderNo = 1,
|
||||||
|
EditOrderNo = 2,
|
||||||
|
EditorType2 = EditorTypes.dxSelectBox,
|
||||||
|
ColSpan = 1,
|
||||||
|
EditorOptions = EditorOptions.ShowClearButton(),
|
||||||
|
CaptionName = "App.Listform.ListformField.Department",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 5,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
AllowSearch = true,
|
||||||
|
LookupJson = JsonSerializer.Serialize(new LookupDto {
|
||||||
|
DataSourceType = UiLookupDataSourceTypeEnum.Query,
|
||||||
|
DisplayExpr = "Name",
|
||||||
|
ValueExpr = "Key",
|
||||||
|
LookupQuery = LookupQueryValues.BranchDepartmentValues,
|
||||||
|
CascadeRelationField = "BranchId",
|
||||||
|
CascadeFilterOperator="=",
|
||||||
|
CascadeParentFields = "BranchId",
|
||||||
|
CascadeEmptyFields = "ParentId"
|
||||||
|
}),
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
PivotSettingsJson = DefaultPivotSettingsJson
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2841,723 +2841,6 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Sequence
|
|
||||||
listFormName = AppCodes.Definitions.Sequence;
|
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
|
||||||
{
|
|
||||||
var listForm = await _listFormRepository.InsertAsync(
|
|
||||||
new ListForm()
|
|
||||||
{
|
|
||||||
ListFormType = ListFormTypeEnum.List,
|
|
||||||
PageSize = 10,
|
|
||||||
ExportJson = DefaultExportJson,
|
|
||||||
IsSubForm = false,
|
|
||||||
ShowNote = false,
|
|
||||||
LayoutJson = DefaultLayoutJson(),
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
ListFormCode = listFormName,
|
|
||||||
Name = listFormName,
|
|
||||||
Title = listFormName,
|
|
||||||
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
|
||||||
IsTenant = false,
|
|
||||||
IsBranch = false,
|
|
||||||
IsOrganizationUnit = false,
|
|
||||||
Description = $"{listFormName}.Description",
|
|
||||||
SelectCommandType = SelectCommandTypeEnum.Table,
|
|
||||||
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Sequence)),
|
|
||||||
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
|
||||||
SeedSyncInsert = false,
|
|
||||||
SeedSyncUpdate = false,
|
|
||||||
SeedSyncDelete = false,
|
|
||||||
KeyFieldName = "Id",
|
|
||||||
KeyFieldDbSourceType = DbType.Guid,
|
|
||||||
DefaultFilter = DefaultFilterJson,
|
|
||||||
SortMode = GridOptions.SortModeSingle,
|
|
||||||
FilterRowJson = DefaultFilterRowJson(),
|
|
||||||
HeaderFilterJson = DefaultHeaderFilterJson(),
|
|
||||||
SearchPanelJson = DefaultSearchPanelJson(),
|
|
||||||
GroupPanelJson = DefaultGroupPanelJson(),
|
|
||||||
SelectionJson = DefaultSelectionSingleJson,
|
|
||||||
ColumnOptionJson = DefaultColumnOptionJson(),
|
|
||||||
PermissionJson = DefaultPermissionJson(listFormName),
|
|
||||||
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Sequence)),
|
|
||||||
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(),
|
|
||||||
PagerOptionJson = DefaultPagerOptionJson,
|
|
||||||
EditingOptionJson = DefaultEditingOptionJson(listFormName, 700, 500, true, true, true, true, false),
|
|
||||||
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
|
||||||
{
|
|
||||||
new() {
|
|
||||||
Order = 1, ColCount = 2, ColSpan = 1, ItemType = "group" },
|
|
||||||
}),
|
|
||||||
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(),
|
|
||||||
FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] {
|
|
||||||
new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value },
|
|
||||||
new() { FieldName = "PaddingSize", FieldDbType = DbType.Int16, Value = "5", CustomValueType = FieldCustomValueTypeEnum.Value },
|
|
||||||
new() { FieldName = "IncrementStep", FieldDbType = DbType.Int16, Value = "1", CustomValueType = FieldCustomValueTypeEnum.Value },
|
|
||||||
new() { FieldName = "StartNumber", FieldDbType = DbType.Int16, Value = "1", CustomValueType = FieldCustomValueTypeEnum.Value },
|
|
||||||
new() { FieldName = "FormatTemplate", FieldDbType = DbType.String, Value = "{Prefix}{Number}{Suffix}", CustomValueType = FieldCustomValueTypeEnum.Value },
|
|
||||||
new() { FieldName = "ResetPeriod", FieldDbType = DbType.Int16, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value },
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
#region Sequence Fields
|
|
||||||
await _listFormFieldRepository.InsertManyAsync([
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Guid,
|
|
||||||
FieldName = "Id",
|
|
||||||
CaptionName = "App.Listform.ListformField.Id",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 1,
|
|
||||||
Visible = false,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Name",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 1,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.Name",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 2,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
SortIndex = 1,
|
|
||||||
SortDirection = GridColumnOptions.SortOrderAsc,
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Prefix",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 3,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.Prefix",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 3,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Suffix",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 4,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.Suffix",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 4,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Boolean,
|
|
||||||
FieldName = "IsActive",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 2,
|
|
||||||
EditorType2 = EditorTypes.dxCheckBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.IsActive",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 5,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
Alignment = "center",
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Int32,
|
|
||||||
FieldName = "PaddingSize",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 5,
|
|
||||||
EditorType2 = EditorTypes.dxNumberBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.PaddingSize",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 6,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Int32,
|
|
||||||
FieldName = "IncrementStep",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 6,
|
|
||||||
EditorType2 = EditorTypes.dxNumberBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.IncrementStep",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 7,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Int32,
|
|
||||||
FieldName = "NextNumber",
|
|
||||||
CaptionName = "App.Listform.ListformField.NextNumber",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 8,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Int32,
|
|
||||||
FieldName = "ResetPeriod",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 7,
|
|
||||||
EditorType2 = EditorTypes.dxSelectBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
EditorOptions = EditorOptions.ShowClearButton(),
|
|
||||||
CaptionName = "App.Listform.ListformField.ResetPeriod",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 9,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
LookupJson = JsonSerializer.Serialize(new LookupDto
|
|
||||||
{
|
|
||||||
DataSourceType = UiLookupDataSourceTypeEnum.StaticData,
|
|
||||||
DisplayExpr = "name",
|
|
||||||
ValueExpr = "key",
|
|
||||||
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
|
|
||||||
new() { Key=0, Name="App.StaticLookup.None" },
|
|
||||||
new() { Key=1, Name="App.StaticLookup.Yearly"},
|
|
||||||
new() { Key=2, Name="App.StaticLookup.Monthly"},
|
|
||||||
new() { Key=3, Name="App.StaticLookup.Daily"},
|
|
||||||
new() { Key=4, Name="App.StaticLookup.Hourly"},
|
|
||||||
new() { Key=5, Name="App.StaticLookup.Minutely"},
|
|
||||||
}),
|
|
||||||
}),
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Int32,
|
|
||||||
FieldName = "StartNumber",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 8,
|
|
||||||
EditorType2 = EditorTypes.dxNumberBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.StartNumber",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 10,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "LastPeriodKey",
|
|
||||||
CaptionName = "App.Listform.ListformField.LastPeriodKey",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 11,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "FormatTemplate",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 9,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 2,
|
|
||||||
CaptionName = "App.Listform.ListformField.FormatTemplate",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 12,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
PlaceHolder="{Prefix}-{yyyy}{MM}{dd}-{Number}-{Suffix}",
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region SkillType
|
|
||||||
listFormName = AppCodes.Definitions.SkillType;
|
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
|
||||||
{
|
|
||||||
var listForm = await _listFormRepository.InsertAsync(
|
|
||||||
new ListForm
|
|
||||||
{
|
|
||||||
ListFormType = ListFormTypeEnum.List,
|
|
||||||
PageSize = 10,
|
|
||||||
ExportJson = DefaultExportJson,
|
|
||||||
IsSubForm = false,
|
|
||||||
ShowNote = true,
|
|
||||||
LayoutJson = DefaultLayoutJson(),
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
ListFormCode = listFormName,
|
|
||||||
Name = listFormName,
|
|
||||||
Title = listFormName,
|
|
||||||
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
|
||||||
IsTenant = false,
|
|
||||||
IsBranch = false,
|
|
||||||
IsOrganizationUnit = false,
|
|
||||||
Description = $"{listFormName}.Description",
|
|
||||||
SelectCommandType = SelectCommandTypeEnum.Table,
|
|
||||||
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.SkillType)),
|
|
||||||
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
|
||||||
SeedSyncInsert = false,
|
|
||||||
SeedSyncUpdate = false,
|
|
||||||
SeedSyncDelete = false,
|
|
||||||
KeyFieldName = "Id",
|
|
||||||
KeyFieldDbSourceType = DbType.String,
|
|
||||||
DefaultFilter = DefaultFilterJson,
|
|
||||||
SortMode = GridOptions.SortModeSingle,
|
|
||||||
FilterRowJson = DefaultFilterRowJson(),
|
|
||||||
HeaderFilterJson = DefaultHeaderFilterJson(),
|
|
||||||
SearchPanelJson = DefaultSearchPanelJson(),
|
|
||||||
GroupPanelJson = DefaultGroupPanelJson(),
|
|
||||||
SelectionJson = DefaultSelectionSingleJson,
|
|
||||||
ColumnOptionJson = DefaultColumnOptionJson(),
|
|
||||||
PermissionJson = DefaultPermissionJson(listFormName),
|
|
||||||
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.SkillType)),
|
|
||||||
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(DbType.String),
|
|
||||||
PagerOptionJson = DefaultPagerOptionJson,
|
|
||||||
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(DbType.String, "Name"),
|
|
||||||
EditingOptionJson = DefaultEditingOptionJson(listFormName, 400, 200, true, true, true, true, false, true),
|
|
||||||
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
|
||||||
{
|
|
||||||
new() {
|
|
||||||
Order = 1, ColCount = 1, ColSpan = 1, ItemType = "group" },
|
|
||||||
}),
|
|
||||||
SubFormsJson = JsonSerializer.Serialize(new List<dynamic>() {
|
|
||||||
new {
|
|
||||||
TabType = ListFormTabTypeEnum.List,
|
|
||||||
TabTitle = AppCodes.Definitions.SkillLevel,
|
|
||||||
Code = AppCodes.Definitions.SkillLevel,
|
|
||||||
Relation = new List<dynamic>() {
|
|
||||||
new {
|
|
||||||
ParentFieldName = "Id",
|
|
||||||
DbType = DbType.String,
|
|
||||||
ChildFieldName = "SkillTypeId"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new {
|
|
||||||
TabType = ListFormTabTypeEnum.List,
|
|
||||||
TabTitle = AppCodes.Definitions.Skill,
|
|
||||||
Code = AppCodes.Definitions.Skill,
|
|
||||||
Relation = new List<dynamic>() {
|
|
||||||
new {
|
|
||||||
ParentFieldName = "Id",
|
|
||||||
DbType = DbType.String,
|
|
||||||
ChildFieldName = "SkillTypeId"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}, autoSave: true);
|
|
||||||
|
|
||||||
#region SkillType Fields
|
|
||||||
await _listFormFieldRepository.InsertManyAsync([
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Id",
|
|
||||||
CaptionName = "App.Listform.ListformField.Id",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 1,
|
|
||||||
Visible = false,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson,
|
|
||||||
},
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Name",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 1,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.Name",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 2,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson,
|
|
||||||
}
|
|
||||||
], autoSave: true);
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Skill Level
|
|
||||||
listFormName = AppCodes.Definitions.SkillLevel;
|
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
|
||||||
{
|
|
||||||
var listForm = await _listFormRepository.InsertAsync(
|
|
||||||
new ListForm()
|
|
||||||
{
|
|
||||||
ListFormType = ListFormTypeEnum.List,
|
|
||||||
PageSize = 10,
|
|
||||||
ExportJson = DefaultExportJson,
|
|
||||||
IsSubForm = true,
|
|
||||||
ShowNote = false,
|
|
||||||
LayoutJson = DefaultLayoutJson(),
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
ListFormCode = listFormName,
|
|
||||||
Name = listFormName,
|
|
||||||
Title = listFormName,
|
|
||||||
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
|
||||||
IsTenant = false,
|
|
||||||
IsBranch = false,
|
|
||||||
IsOrganizationUnit = false,
|
|
||||||
Description = $"{listFormName}.Description",
|
|
||||||
SelectCommandType = SelectCommandTypeEnum.Table,
|
|
||||||
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.SkillLevel)),
|
|
||||||
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
|
||||||
SeedSyncInsert = false,
|
|
||||||
SeedSyncUpdate = false,
|
|
||||||
SeedSyncDelete = false,
|
|
||||||
KeyFieldName = "Id",
|
|
||||||
KeyFieldDbSourceType = DbType.String,
|
|
||||||
DefaultFilter = DefaultFilterJson,
|
|
||||||
SortMode = GridOptions.SortModeSingle,
|
|
||||||
FilterRowJson = DefaultFilterRowJson(),
|
|
||||||
HeaderFilterJson = DefaultHeaderFilterJson(),
|
|
||||||
SearchPanelJson = DefaultSearchPanelJson(),
|
|
||||||
GroupPanelJson = DefaultGroupPanelJson(),
|
|
||||||
SelectionJson = DefaultSelectionSingleJson,
|
|
||||||
ColumnOptionJson = DefaultColumnOptionJson(),
|
|
||||||
PermissionJson = DefaultPermissionJson(listFormName),
|
|
||||||
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.SkillLevel)),
|
|
||||||
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(DbType.String),
|
|
||||||
PagerOptionJson = DefaultPagerOptionJson,
|
|
||||||
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(DbType.String, "Name"),
|
|
||||||
EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 450, true, true, true, true, false),
|
|
||||||
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>() {
|
|
||||||
new() { Order=1, ColCount=1, ColSpan=1, ItemType="group" },
|
|
||||||
}),
|
|
||||||
FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] {
|
|
||||||
new() { FieldName = "IsDefault", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value }
|
|
||||||
}),
|
|
||||||
}, autoSave: true
|
|
||||||
);
|
|
||||||
|
|
||||||
#region Skill Level Fields
|
|
||||||
await _listFormFieldRepository.InsertManyAsync([
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Id",
|
|
||||||
CaptionName = "App.Listform.ListformField.Id",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 1,
|
|
||||||
Visible = false,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
SortIndex = 0,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Name",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 1,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.Name",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 2,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
SortIndex = 1,
|
|
||||||
SortDirection = GridColumnOptions.SortOrderAsc,
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Int32,
|
|
||||||
FieldName = "Progress",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 2,
|
|
||||||
EditorType2 = EditorTypes.dxSlider,
|
|
||||||
ColSpan = 1,
|
|
||||||
EditorOptions = EditorOptions.Slider(),
|
|
||||||
CaptionName = "App.Listform.ListformField.Progress",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 3,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.Boolean,
|
|
||||||
FieldName = "IsDefault",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 3,
|
|
||||||
EditorType2 = EditorTypes.dxCheckBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "Abp.Mailing.Default",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 4,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "SkillTypeId",
|
|
||||||
CaptionName = "App.Listform.ListformField.SkillTypeId",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 5,
|
|
||||||
Visible = false,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
], autoSave: true);
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Skill
|
|
||||||
listFormName = AppCodes.Definitions.Skill;
|
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
|
||||||
{
|
|
||||||
var listForm = await _listFormRepository.InsertAsync(
|
|
||||||
new ListForm()
|
|
||||||
{
|
|
||||||
ListFormType = ListFormTypeEnum.List,
|
|
||||||
PageSize = 10,
|
|
||||||
ExportJson = DefaultExportJson,
|
|
||||||
IsSubForm = true,
|
|
||||||
ShowNote = false,
|
|
||||||
LayoutJson = DefaultLayoutJson(),
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
ListFormCode = listFormName,
|
|
||||||
Name = listFormName,
|
|
||||||
Title = listFormName,
|
|
||||||
DataSourceCode = SeedConsts.DataSources.DefaultCode,
|
|
||||||
IsTenant = false,
|
|
||||||
IsBranch = false,
|
|
||||||
IsOrganizationUnit = false,
|
|
||||||
Description = $"{listFormName}.Description",
|
|
||||||
SelectCommandType = SelectCommandTypeEnum.Table,
|
|
||||||
SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Skill)),
|
|
||||||
SeedFilePath = SeedPathResolver.GetDataFilePath(listFormName),
|
|
||||||
SeedSyncInsert = false,
|
|
||||||
SeedSyncUpdate = false,
|
|
||||||
SeedSyncDelete = false,
|
|
||||||
KeyFieldName = "Id",
|
|
||||||
KeyFieldDbSourceType = DbType.String,
|
|
||||||
DefaultFilter = DefaultFilterJson,
|
|
||||||
SortMode = GridOptions.SortModeSingle,
|
|
||||||
FilterRowJson = DefaultFilterRowJson(),
|
|
||||||
HeaderFilterJson = DefaultHeaderFilterJson(),
|
|
||||||
SearchPanelJson = DefaultSearchPanelJson(),
|
|
||||||
GroupPanelJson = DefaultGroupPanelJson(),
|
|
||||||
SelectionJson = DefaultSelectionSingleJson,
|
|
||||||
ColumnOptionJson = DefaultColumnOptionJson(),
|
|
||||||
PermissionJson = DefaultPermissionJson(listFormName),
|
|
||||||
DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Skill)),
|
|
||||||
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(DbType.String),
|
|
||||||
PagerOptionJson = DefaultPagerOptionJson,
|
|
||||||
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(DbType.String, "Name"),
|
|
||||||
EditingOptionJson = DefaultEditingOptionJson(AppCodes.Definitions.SkillLevel, 500, 250, true, true, true, true, false),
|
|
||||||
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>() {
|
|
||||||
new() { Order=1, ColCount=1, ColSpan=1, ItemType="group" },
|
|
||||||
}),
|
|
||||||
}, autoSave: true
|
|
||||||
);
|
|
||||||
|
|
||||||
#region Skill Fields
|
|
||||||
await _listFormFieldRepository.InsertManyAsync([
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Id",
|
|
||||||
CaptionName = "App.Listform.ListformField.Id",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 1,
|
|
||||||
Visible = false,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
SortIndex = 0,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "Name",
|
|
||||||
EditGroupOrderNo = 1,
|
|
||||||
EditOrderNo = 1,
|
|
||||||
EditorType2 = EditorTypes.dxTextBox,
|
|
||||||
ColSpan = 1,
|
|
||||||
CaptionName = "App.Listform.ListformField.Name",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 2,
|
|
||||||
Visible = true,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
SortIndex = 1,
|
|
||||||
SortDirection = GridColumnOptions.SortOrderAsc,
|
|
||||||
AllowSearch = true,
|
|
||||||
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
new() {
|
|
||||||
ListFormCode = listForm.ListFormCode,
|
|
||||||
CultureName = LanguageCodes.En,
|
|
||||||
SourceDbType = DbType.String,
|
|
||||||
FieldName = "SkillTypeId",
|
|
||||||
CaptionName = "App.Listform.ListformField.SkillTypeId",
|
|
||||||
Width = 0,
|
|
||||||
ListOrderNo = 3,
|
|
||||||
Visible = false,
|
|
||||||
IsActive = true,
|
|
||||||
|
|
||||||
AllowSearch = true,
|
|
||||||
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
|
||||||
PivotSettingsJson = DefaultPivotSettingsJson
|
|
||||||
},
|
|
||||||
], autoSave: true);
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region SettingDefinition
|
#region SettingDefinition
|
||||||
listFormName = AppCodes.SettingDefinitions;
|
listFormName = AppCodes.SettingDefinitions;
|
||||||
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName))
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,9 @@ public class PlatformIdentityDataSeeder : IdentityDataSeeder
|
||||||
var defaultBranch = await _branchRepository.FirstOrDefaultAsync(b => b.Code == branchCode);
|
var defaultBranch = await _branchRepository.FirstOrDefaultAsync(b => b.Code == branchCode);
|
||||||
if (defaultBranch == null)
|
if (defaultBranch == null)
|
||||||
{
|
{
|
||||||
var branchId = GuidGenerator.Create();
|
var branchId = tenantId == null && !CurrentTenant.IsAvailable
|
||||||
|
? PlatformConsts.Branches.BranchIdDefaultValue
|
||||||
|
: GuidGenerator.Create();
|
||||||
defaultBranch = await _branchRepository.InsertAsync(new Branch(branchId)
|
defaultBranch = await _branchRepository.InsertAsync(new Branch(branchId)
|
||||||
{
|
{
|
||||||
Code = branchCode,
|
Code = branchCode,
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ public enum MenuPrefix
|
||||||
{
|
{
|
||||||
Sas,
|
Sas,
|
||||||
Administration,
|
Administration,
|
||||||
|
Hr,
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MenuPrefixExtensions
|
public static class MenuPrefixExtensions
|
||||||
|
|
@ -16,6 +17,7 @@ public static class MenuPrefixExtensions
|
||||||
{
|
{
|
||||||
MenuPrefix.Sas => "Sas",
|
MenuPrefix.Sas => "Sas",
|
||||||
MenuPrefix.Administration => "Adm",
|
MenuPrefix.Administration => "Adm",
|
||||||
|
MenuPrefix.Hr => "Hr",
|
||||||
_ => throw new ArgumentOutOfRangeException(nameof(menu), menu, null)
|
_ => throw new ArgumentOutOfRangeException(nameof(menu), menu, null)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@ public static class PlatformConsts
|
||||||
|
|
||||||
public static class Branches
|
public static class Branches
|
||||||
{
|
{
|
||||||
|
// Host şubesinin kimliği sabittir; seed edilen departman/pozisyon satırları BranchId ile ona bağlanır.
|
||||||
|
public static readonly Guid BranchIdDefaultValue = Guid.Parse("1c125bf3-3ffd-4445-a270-1bc43ac3f61c");
|
||||||
public const string BranchCode = "Sozsoft";
|
public const string BranchCode = "Sozsoft";
|
||||||
public const string BranchName = "Sozsoft Branch";
|
public const string BranchName = "Sozsoft Branch";
|
||||||
public const long BranchVknTckn = 52849619172;
|
public const long BranchVknTckn = 52849619172;
|
||||||
|
|
@ -419,12 +421,20 @@ public static class PlatformConsts
|
||||||
public const string Country = Default + ".Country";
|
public const string Country = Default + ".Country";
|
||||||
public const string City = Default + ".City";
|
public const string City = Default + ".City";
|
||||||
public const string District = Default + ".District";
|
public const string District = Default + ".District";
|
||||||
public const string SkillType = Default + ".SkillType";
|
|
||||||
public const string UomCategory = Default + ".UomCategory";
|
public const string UomCategory = Default + ".UomCategory";
|
||||||
|
|
||||||
public const string Sector = Default + ".Sector";
|
public const string Sector = Default + ".Sector";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Hr
|
||||||
|
{
|
||||||
|
public const string Default = Prefix.App + ".Hr";
|
||||||
|
|
||||||
|
public const string Definitions = Default + ".Definitions";
|
||||||
|
public const string SkillType = Default + ".SkillType";
|
||||||
public const string Department = Default + ".Department";
|
public const string Department = Default + ".Department";
|
||||||
public const string JobPosition = Default + ".JobPosition";
|
public const string JobPosition = Default + ".JobPosition";
|
||||||
|
public const string OrgChart = Default + ".OrgChart";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Restrictions
|
public static class Restrictions
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,9 @@ public static class TableNameResolver
|
||||||
{ nameof(TableNameEnum.Country), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.Country), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
||||||
{ nameof(TableNameEnum.City), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.City), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
||||||
{ nameof(TableNameEnum.District), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.District), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
||||||
{ nameof(TableNameEnum.SkillType), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.SkillType), (TablePrefix.PlatformByName, MenuPrefix.Hr) },
|
||||||
{ nameof(TableNameEnum.Skill), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.Skill), (TablePrefix.PlatformByName, MenuPrefix.Hr) },
|
||||||
{ nameof(TableNameEnum.SkillLevel), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.SkillLevel), (TablePrefix.PlatformByName, MenuPrefix.Hr) },
|
||||||
{ nameof(TableNameEnum.UomCategory), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.UomCategory), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
||||||
{ nameof(TableNameEnum.Uom), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.Uom), (TablePrefix.PlatformByName, MenuPrefix.Sas) },
|
||||||
{ nameof(TableNameEnum.Branch), (TablePrefix.TenantByName, MenuPrefix.Sas) },
|
{ nameof(TableNameEnum.Branch), (TablePrefix.TenantByName, MenuPrefix.Sas) },
|
||||||
|
|
@ -70,8 +70,8 @@ public static class TableNameResolver
|
||||||
|
|
||||||
// 🔹 ADMINISTRATION TABLOLARI
|
// 🔹 ADMINISTRATION TABLOLARI
|
||||||
{ nameof(TableNameEnum.Sector), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
{ nameof(TableNameEnum.Sector), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
||||||
{ nameof(TableNameEnum.Department), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
{ nameof(TableNameEnum.Department), (TablePrefix.TenantByName, MenuPrefix.Hr) },
|
||||||
{ nameof(TableNameEnum.JobPosition), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
{ nameof(TableNameEnum.JobPosition), (TablePrefix.TenantByName, MenuPrefix.Hr) },
|
||||||
{ nameof(TableNameEnum.WorkHour), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
{ nameof(TableNameEnum.WorkHour), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
||||||
{ nameof(TableNameEnum.IpRestriction), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
{ nameof(TableNameEnum.IpRestriction), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
||||||
{ nameof(TableNameEnum.Note), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
{ nameof(TableNameEnum.Note), (TablePrefix.TenantByName, MenuPrefix.Administration) },
|
||||||
|
|
|
||||||
|
|
@ -364,15 +364,23 @@ public static class SeedConsts
|
||||||
public const string Country = Default + ".Country";
|
public const string Country = Default + ".Country";
|
||||||
public const string City = Default + ".City";
|
public const string City = Default + ".City";
|
||||||
public const string District = Default + ".District";
|
public const string District = Default + ".District";
|
||||||
public const string SkillType = Default + ".SkillType";
|
|
||||||
public const string SkillLevel = Default + ".SkillLevel";
|
|
||||||
public const string Skill = Default + ".Skill";
|
|
||||||
public const string UomCategory = Default + ".UomCategory";
|
public const string UomCategory = Default + ".UomCategory";
|
||||||
public const string Uom = Default + ".Uom";
|
public const string Uom = Default + ".Uom";
|
||||||
|
|
||||||
public const string Sector = Default + ".Sector";
|
public const string Sector = Default + ".Sector";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Hr
|
||||||
|
{
|
||||||
|
public const string Default = Prefix.App + ".Hr";
|
||||||
|
|
||||||
|
public const string Definitions = Default + ".Definitions";
|
||||||
|
public const string SkillType = Default + ".SkillType";
|
||||||
|
public const string SkillLevel = Default + ".SkillLevel";
|
||||||
|
public const string Skill = Default + ".Skill";
|
||||||
public const string Department = Default + ".Department";
|
public const string Department = Default + ".Department";
|
||||||
public const string JobPosition = Default + ".JobPosition";
|
public const string JobPosition = Default + ".JobPosition";
|
||||||
|
public const string OrgChart = Default + ".OrgChart";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Restrictions
|
public static class Restrictions
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ public class Department : FullAuditedEntity<Guid>, IMultiTenant
|
||||||
{
|
{
|
||||||
public Guid? TenantId { get; set; }
|
public Guid? TenantId { get; set; }
|
||||||
|
|
||||||
|
public Guid BranchId { get; set; }
|
||||||
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public Guid? ParentId { get; set; }
|
public Guid? ParentId { get; set; }
|
||||||
|
|
@ -8,6 +8,8 @@ public class JobPosition : FullAuditedEntity<Guid>, IMultiTenant
|
||||||
{
|
{
|
||||||
public Guid? TenantId { get; set; }
|
public Guid? TenantId { get; set; }
|
||||||
|
|
||||||
|
public Guid BranchId { get; set; }
|
||||||
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public Guid DepartmentId { get; set; }
|
public Guid DepartmentId { get; set; }
|
||||||
|
|
@ -967,7 +967,7 @@ public class PlatformDbContext :
|
||||||
|
|
||||||
b.Property(x => x.Name).IsRequired().HasMaxLength(64);
|
b.Property(x => x.Name).IsRequired().HasMaxLength(64);
|
||||||
|
|
||||||
b.HasIndex(x => new { x.TenantId, x.Name }).IsUnique().HasFilter("[IsDeleted] = 0");
|
b.HasIndex(x => new { x.TenantId, x.BranchId, x.Name }).IsUnique().HasFilter("[IsDeleted] = 0");
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.Entity<JobPosition>(b =>
|
builder.Entity<JobPosition>(b =>
|
||||||
|
|
|
||||||
|
|
@ -2319,6 +2319,9 @@ namespace Sozsoft.Platform.Migrations
|
||||||
b.Property<Guid>("Id")
|
b.Property<Guid>("Id")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<Guid>("BranchId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("datetime2")
|
.HasColumnType("datetime2")
|
||||||
.HasColumnName("CreationTime");
|
.HasColumnName("CreationTime");
|
||||||
|
|
@ -2363,11 +2366,11 @@ namespace Sozsoft.Platform.Migrations
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("TenantId", "Name")
|
b.HasIndex("TenantId", "BranchId", "Name")
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Adm_T_Department", (string)null);
|
b.ToTable("Hr_T_Department", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.DevRequest", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.DevRequest", b =>
|
||||||
|
|
@ -3199,6 +3202,9 @@ namespace Sozsoft.Platform.Migrations
|
||||||
b.Property<Guid>("Id")
|
b.Property<Guid>("Id")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<Guid>("BranchId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("datetime2")
|
.HasColumnType("datetime2")
|
||||||
.HasColumnName("CreationTime");
|
.HasColumnName("CreationTime");
|
||||||
|
|
@ -3252,7 +3258,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Adm_T_JobPosition", (string)null);
|
b.ToTable("Hr_T_JobPosition", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.ListForm", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.ListForm", b =>
|
||||||
|
|
@ -5191,7 +5197,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Sas_H_Skill", (string)null);
|
b.ToTable("Hr_H_Skill", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.SkillLevel", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.SkillLevel", b =>
|
||||||
|
|
@ -5256,7 +5262,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Sas_H_SkillLevel", (string)null);
|
b.ToTable("Hr_H_SkillLevel", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.SkillType", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.SkillType", b =>
|
||||||
|
|
@ -5306,7 +5312,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Sas_H_SkillType", (string)null);
|
b.ToTable("Hr_H_SkillType", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.SocialComment", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.SocialComment", b =>
|
||||||
|
|
|
||||||
|
|
@ -543,11 +543,12 @@ namespace Sozsoft.Platform.Migrations
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Adm_T_Department",
|
name: "Hr_T_Department",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||||
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
||||||
|
BranchId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||||
Name = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
Name = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
ParentId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
ParentId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
||||||
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||||
|
|
@ -560,7 +561,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_Adm_T_Department", x => x.Id);
|
table.PrimaryKey("PK_Hr_T_Department", x => x.Id);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
|
|
@ -1756,7 +1757,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Sas_H_SkillType",
|
name: "Hr_H_SkillType",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
||||||
|
|
@ -1771,7 +1772,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_Sas_H_SkillType", x => x.Id);
|
table.PrimaryKey("PK_Hr_H_SkillType", x => x.Id);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
|
|
@ -2211,11 +2212,12 @@ namespace Sozsoft.Platform.Migrations
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Adm_T_JobPosition",
|
name: "Hr_T_JobPosition",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||||
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
||||||
|
BranchId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||||
Name = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
Name = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
||||||
DepartmentId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
DepartmentId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||||
ParentId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
ParentId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
||||||
|
|
@ -2229,11 +2231,11 @@ namespace Sozsoft.Platform.Migrations
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_Adm_T_JobPosition", x => x.Id);
|
table.PrimaryKey("PK_Hr_T_JobPosition", x => x.Id);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_Adm_T_JobPosition_Adm_T_Department_DepartmentId",
|
name: "FK_Hr_T_JobPosition_Hr_T_Department_DepartmentId",
|
||||||
column: x => x.DepartmentId,
|
column: x => x.DepartmentId,
|
||||||
principalTable: "Adm_T_Department",
|
principalTable: "Hr_T_Department",
|
||||||
principalColumn: "Id",
|
principalColumn: "Id",
|
||||||
onDelete: ReferentialAction.Restrict);
|
onDelete: ReferentialAction.Restrict);
|
||||||
});
|
});
|
||||||
|
|
@ -3031,7 +3033,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Sas_H_Skill",
|
name: "Hr_H_Skill",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
||||||
|
|
@ -3047,17 +3049,17 @@ namespace Sozsoft.Platform.Migrations
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_Sas_H_Skill", x => x.Id);
|
table.PrimaryKey("PK_Hr_H_Skill", x => x.Id);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_Sas_H_Skill_Sas_H_SkillType_SkillTypeId",
|
name: "FK_Hr_H_Skill_Hr_H_SkillType_SkillTypeId",
|
||||||
column: x => x.SkillTypeId,
|
column: x => x.SkillTypeId,
|
||||||
principalTable: "Sas_H_SkillType",
|
principalTable: "Hr_H_SkillType",
|
||||||
principalColumn: "Id",
|
principalColumn: "Id",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Sas_H_SkillLevel",
|
name: "Hr_H_SkillLevel",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
Id = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
||||||
|
|
@ -3075,11 +3077,11 @@ namespace Sozsoft.Platform.Migrations
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_Sas_H_SkillLevel", x => x.Id);
|
table.PrimaryKey("PK_Hr_H_SkillLevel", x => x.Id);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_Sas_H_SkillLevel_Sas_H_SkillType_SkillTypeId",
|
name: "FK_Hr_H_SkillLevel_Hr_H_SkillType_SkillTypeId",
|
||||||
column: x => x.SkillTypeId,
|
column: x => x.SkillTypeId,
|
||||||
principalTable: "Sas_H_SkillType",
|
principalTable: "Hr_H_SkillType",
|
||||||
principalColumn: "Id",
|
principalColumn: "Id",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
@ -3801,9 +3803,9 @@ namespace Sozsoft.Platform.Migrations
|
||||||
filter: "[IsDeleted] = 0");
|
filter: "[IsDeleted] = 0");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Adm_T_Department_TenantId_Name",
|
name: "IX_Hr_T_Department_TenantId_BranchId_Name",
|
||||||
table: "Adm_T_Department",
|
table: "Hr_T_Department",
|
||||||
columns: new[] { "TenantId", "Name" },
|
columns: new[] { "TenantId", "BranchId", "Name" },
|
||||||
unique: true,
|
unique: true,
|
||||||
filter: "[IsDeleted] = 0");
|
filter: "[IsDeleted] = 0");
|
||||||
|
|
||||||
|
|
@ -3858,13 +3860,13 @@ namespace Sozsoft.Platform.Migrations
|
||||||
filter: "[IsDeleted] = 0");
|
filter: "[IsDeleted] = 0");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Adm_T_JobPosition_DepartmentId",
|
name: "IX_Hr_T_JobPosition_DepartmentId",
|
||||||
table: "Adm_T_JobPosition",
|
table: "Hr_T_JobPosition",
|
||||||
column: "DepartmentId");
|
column: "DepartmentId");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Adm_T_JobPosition_TenantId_Name_DepartmentId",
|
name: "IX_Hr_T_JobPosition_TenantId_Name_DepartmentId",
|
||||||
table: "Adm_T_JobPosition",
|
table: "Hr_T_JobPosition",
|
||||||
columns: new[] { "TenantId", "Name", "DepartmentId" },
|
columns: new[] { "TenantId", "Name", "DepartmentId" },
|
||||||
unique: true,
|
unique: true,
|
||||||
filter: "[IsDeleted] = 0");
|
filter: "[IsDeleted] = 0");
|
||||||
|
|
@ -4331,22 +4333,22 @@ namespace Sozsoft.Platform.Migrations
|
||||||
filter: "[IsDeleted] = 0");
|
filter: "[IsDeleted] = 0");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Sas_H_Skill_SkillTypeId_Name",
|
name: "IX_Hr_H_Skill_SkillTypeId_Name",
|
||||||
table: "Sas_H_Skill",
|
table: "Hr_H_Skill",
|
||||||
columns: new[] { "SkillTypeId", "Name" },
|
columns: new[] { "SkillTypeId", "Name" },
|
||||||
unique: true,
|
unique: true,
|
||||||
filter: "[IsDeleted] = 0");
|
filter: "[IsDeleted] = 0");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Sas_H_SkillLevel_SkillTypeId_Name",
|
name: "IX_Hr_H_SkillLevel_SkillTypeId_Name",
|
||||||
table: "Sas_H_SkillLevel",
|
table: "Hr_H_SkillLevel",
|
||||||
columns: new[] { "SkillTypeId", "Name" },
|
columns: new[] { "SkillTypeId", "Name" },
|
||||||
unique: true,
|
unique: true,
|
||||||
filter: "[IsDeleted] = 0");
|
filter: "[IsDeleted] = 0");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Sas_H_SkillType_Name",
|
name: "IX_Hr_H_SkillType_Name",
|
||||||
table: "Sas_H_SkillType",
|
table: "Hr_H_SkillType",
|
||||||
column: "Name",
|
column: "Name",
|
||||||
unique: true,
|
unique: true,
|
||||||
filter: "[IsDeleted] = 0");
|
filter: "[IsDeleted] = 0");
|
||||||
|
|
@ -4510,7 +4512,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
name: "Adm_T_IpRestriction");
|
name: "Adm_T_IpRestriction");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Adm_T_JobPosition");
|
name: "Hr_T_JobPosition");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Adm_T_MessengerConversationMessage");
|
name: "Adm_T_MessengerConversationMessage");
|
||||||
|
|
@ -4660,10 +4662,10 @@ namespace Sozsoft.Platform.Migrations
|
||||||
name: "Sas_H_SettingDefinition");
|
name: "Sas_H_SettingDefinition");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Sas_H_Skill");
|
name: "Hr_H_Skill");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Sas_H_SkillLevel");
|
name: "Hr_H_SkillLevel");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Sas_H_Uom");
|
name: "Sas_H_Uom");
|
||||||
|
|
@ -4705,7 +4707,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
name: "Adm_T_Event");
|
name: "Adm_T_Event");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Adm_T_Department");
|
name: "Hr_T_Department");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Adm_T_MessengerConversation");
|
name: "Adm_T_MessengerConversation");
|
||||||
|
|
@ -4756,7 +4758,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
name: "Sas_H_Order");
|
name: "Sas_H_Order");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Sas_H_SkillType");
|
name: "Hr_H_SkillType");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Sas_H_UomCategory");
|
name: "Sas_H_UomCategory");
|
||||||
|
|
|
||||||
|
|
@ -2316,6 +2316,9 @@ namespace Sozsoft.Platform.Migrations
|
||||||
b.Property<Guid>("Id")
|
b.Property<Guid>("Id")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<Guid>("BranchId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("datetime2")
|
.HasColumnType("datetime2")
|
||||||
.HasColumnName("CreationTime");
|
.HasColumnName("CreationTime");
|
||||||
|
|
@ -2360,11 +2363,11 @@ namespace Sozsoft.Platform.Migrations
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("TenantId", "Name")
|
b.HasIndex("TenantId", "BranchId", "Name")
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Adm_T_Department", (string)null);
|
b.ToTable("Hr_T_Department", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.DevRequest", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.DevRequest", b =>
|
||||||
|
|
@ -3196,6 +3199,9 @@ namespace Sozsoft.Platform.Migrations
|
||||||
b.Property<Guid>("Id")
|
b.Property<Guid>("Id")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<Guid>("BranchId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("datetime2")
|
.HasColumnType("datetime2")
|
||||||
.HasColumnName("CreationTime");
|
.HasColumnName("CreationTime");
|
||||||
|
|
@ -3249,7 +3255,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Adm_T_JobPosition", (string)null);
|
b.ToTable("Hr_T_JobPosition", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.ListForm", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.ListForm", b =>
|
||||||
|
|
@ -5188,7 +5194,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Sas_H_Skill", (string)null);
|
b.ToTable("Hr_H_Skill", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.SkillLevel", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.SkillLevel", b =>
|
||||||
|
|
@ -5253,7 +5259,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Sas_H_SkillLevel", (string)null);
|
b.ToTable("Hr_H_SkillLevel", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.SkillType", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.SkillType", b =>
|
||||||
|
|
@ -5303,7 +5309,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[IsDeleted] = 0");
|
.HasFilter("[IsDeleted] = 0");
|
||||||
|
|
||||||
b.ToTable("Sas_H_SkillType", (string)null);
|
b.ToTable("Hr_H_SkillType", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Sozsoft.Platform.Entities.SocialComment", b =>
|
modelBuilder.Entity("Sozsoft.Platform.Entities.SocialComment", b =>
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,9 @@ public class TenantIdentityDataSeeder : IdentityDataSeeder
|
||||||
var defaultBranch = await _branchRepository.FirstOrDefaultAsync(b => b.Code == branchCode);
|
var defaultBranch = await _branchRepository.FirstOrDefaultAsync(b => b.Code == branchCode);
|
||||||
if (defaultBranch == null)
|
if (defaultBranch == null)
|
||||||
{
|
{
|
||||||
var branchId = GuidGenerator.Create();
|
var branchId = tenantId == null && !CurrentTenant.IsAvailable
|
||||||
|
? PlatformConsts.Branches.BranchIdDefaultValue
|
||||||
|
: GuidGenerator.Create();
|
||||||
defaultBranch = await _branchRepository.InsertAsync(new Branch(branchId)
|
defaultBranch = await _branchRepository.InsertAsync(new Branch(branchId)
|
||||||
{
|
{
|
||||||
Code = branchCode,
|
Code = branchCode,
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ These sections encode expectations the user will **not** repeat in every prompt.
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Platform davranışı, karar sırası, çıktı sözleşmesi | `.github/instructions/ai.instructions.md` |
|
| Platform davranışı, karar sırası, çıktı sözleşmesi | `.github/instructions/ai.instructions.md` |
|
||||||
| **Artefakt üretimi**: seed şemaları, enum değerleri, çalışan örnekler | `.github/instructions/lowcode.instructions.md` |
|
| **Artefakt üretimi**: seed şemaları, enum değerleri, çalışan örnekler | `.github/instructions/lowcode.instructions.md` |
|
||||||
| **Yetenek envanteri**: JSON kolonlarının alan alan sözleşmesi, grafik/pivot/tasarımcı/mail modülü, Saas + Administration menüsündeki hazır ekranlar | `.github/instructions/lowcode-reference.instructions.md` |
|
| **Yetenek envanteri**: JSON kolonlarının alan alan sözleşmesi, grafik/pivot/tasarımcı/mail modülü, Saas + Administration + İK menüsündeki hazır ekranlar | `.github/instructions/lowcode-reference.instructions.md` |
|
||||||
| `api/` kod standardı (sürüm, nullable, ölü kod, modern C#, ABP katmanları) | `.github/instructions/dotnet.instructions.md` |
|
| `api/` kod standardı (sürüm, nullable, ölü kod, modern C#, ABP katmanları) | `.github/instructions/dotnet.instructions.md` |
|
||||||
| Modül/liste ekleme prosedürü, seeder dosya sorumlulukları | `.github/instructions/list.instructions.md` |
|
| Modül/liste ekleme prosedürü, seeder dosya sorumlulukları | `.github/instructions/list.instructions.md` |
|
||||||
| Ne nerede yaşıyor, hangi ekran ne yapıyor | `README.md` |
|
| Ne nerede yaşıyor, hangi ekran ne yapıyor | `README.md` |
|
||||||
|
|
@ -399,6 +399,13 @@ Bir çelişki varsa sıra: `ai.instructions.md` → `dotnet.instructions.md` →
|
||||||
kaydın `LastModificationTime`/`CreationTime` değerinden yeniyse güncellenir/silinir. Migrate
|
kaydın `LastModificationTime`/`CreationTime` değerinden yeniyse güncellenir/silinir. Migrate
|
||||||
kullanıcının runtime revizyonunu ezmez. Yeni bir seeder yazarken bu kuralı taklit et: **migrate
|
kullanıcının runtime revizyonunu ezmez. Yeni bir seeder yazarken bu kuralı taklit et: **migrate
|
||||||
varsayılanı eklemektir, ezmek değil.**
|
varsayılanı eklemektir, ezmek değil.**
|
||||||
|
- **Modül = menü = tablo öneki = yetki kökü** → kök menüler `Sas` (`App.Saas`), `Adm`
|
||||||
|
(`App.Administration`), `Hr` (`App.Hr`, İK) ve `Pub` modüllerindedir. Bir ekranı modüller arası
|
||||||
|
taşımak birlikte yapılır: `TableNameResolver` (`MenuPrefix`) + `AppCodes` (Seed/Platform) +
|
||||||
|
`ListFormSeeder_{Saas,Administration,Hr}.cs` + `data/{ListFormCode}.json` adı + menü/yetki/dil
|
||||||
|
satırları + route `Authority`. Yetki `Modules` değeri: Saas/Administration `Sas|Adm`, İK `Sas|Hr`
|
||||||
|
(`Sas` host, `Adm`/`Hr` kiracı görünürlüğü). İK departman/pozisyon `BranchId` zorunludur; seed
|
||||||
|
satırı host şubesine (`PlatformConsts.Branches.BranchIdDefaultValue`) bağlanır.
|
||||||
- **Menü ağacı ve yetkiler** → `configs/seeds/host/data/App.Menus.{Routes,Module,Menu}.json` ve
|
- **Menü ağacı ve yetkiler** → `configs/seeds/host/data/App.Menus.{Routes,Module,Menu}.json` ve
|
||||||
`Abp.Identity.Permission{Groups,s}.json`; platformun kendi menü/yetki kayıtları da diğer liste
|
`Abp.Identity.Permission{Groups,s}.json`; platformun kendi menü/yetki kayıtları da diğer liste
|
||||||
verisiyle aynı mekanizmadan (`ListFormSeedDataApplier`) geçer, ayrı bir seeder yoktur. `Order`
|
verisiyle aynı mekanizmadan (`ListFormSeedDataApplier`) geçer, ayrı bir seeder yoktur. `Order`
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,11 @@
|
||||||
"Name": "App.Administration",
|
"Name": "App.Administration",
|
||||||
"DisplayName": "App.Administration",
|
"DisplayName": "App.Administration",
|
||||||
"Order": 2
|
"Order": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "App.Hr",
|
||||||
|
"DisplayName": "App.Hr",
|
||||||
|
"Order": 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -504,202 +504,12 @@
|
||||||
"MultiTenancySide": 2,
|
"MultiTenancySide": 2,
|
||||||
"Modules": "Sas|Adm"
|
"Modules": "Sas|Adm"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillType",
|
|
||||||
"ParentName": "App.Saas.Definitions",
|
|
||||||
"DisplayName": "App.Definitions.SkillType",
|
|
||||||
"Order": 9,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillType.Create",
|
|
||||||
"ParentName": "App.Definitions.SkillType",
|
|
||||||
"DisplayName": "App.Platform.Create",
|
|
||||||
"Order": 1,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillType.Update",
|
|
||||||
"ParentName": "App.Definitions.SkillType",
|
|
||||||
"DisplayName": "App.Platform.Update",
|
|
||||||
"Order": 2,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillType.Delete",
|
|
||||||
"ParentName": "App.Definitions.SkillType",
|
|
||||||
"DisplayName": "App.Platform.Delete",
|
|
||||||
"Order": 3,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillType.Export",
|
|
||||||
"ParentName": "App.Definitions.SkillType",
|
|
||||||
"DisplayName": "Export",
|
|
||||||
"Order": 4,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillType.Import",
|
|
||||||
"ParentName": "App.Definitions.SkillType",
|
|
||||||
"DisplayName": "Import",
|
|
||||||
"Order": 5,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillType.Note",
|
|
||||||
"ParentName": "App.Definitions.SkillType",
|
|
||||||
"DisplayName": "Note",
|
|
||||||
"Order": 6,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillLevel",
|
|
||||||
"ParentName": "App.Saas.Definitions",
|
|
||||||
"DisplayName": "App.Definitions.SkillLevel",
|
|
||||||
"Order": 10,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillLevel.Create",
|
|
||||||
"ParentName": "App.Definitions.SkillLevel",
|
|
||||||
"DisplayName": "App.Platform.Create",
|
|
||||||
"Order": 1,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillLevel.Update",
|
|
||||||
"ParentName": "App.Definitions.SkillLevel",
|
|
||||||
"DisplayName": "App.Platform.Update",
|
|
||||||
"Order": 2,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillLevel.Delete",
|
|
||||||
"ParentName": "App.Definitions.SkillLevel",
|
|
||||||
"DisplayName": "App.Platform.Delete",
|
|
||||||
"Order": 3,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillLevel.Export",
|
|
||||||
"ParentName": "App.Definitions.SkillLevel",
|
|
||||||
"DisplayName": "Export",
|
|
||||||
"Order": 4,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.SkillLevel.Import",
|
|
||||||
"ParentName": "App.Definitions.SkillLevel",
|
|
||||||
"DisplayName": "Import",
|
|
||||||
"Order": 5,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Skill",
|
|
||||||
"ParentName": "App.Saas.Definitions",
|
|
||||||
"DisplayName": "App.Definitions.Skill",
|
|
||||||
"Order": 11,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Skill.Create",
|
|
||||||
"ParentName": "App.Definitions.Skill",
|
|
||||||
"DisplayName": "App.Platform.Create",
|
|
||||||
"Order": 1,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Skill.Update",
|
|
||||||
"ParentName": "App.Definitions.Skill",
|
|
||||||
"DisplayName": "App.Platform.Update",
|
|
||||||
"Order": 2,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Skill.Delete",
|
|
||||||
"ParentName": "App.Definitions.Skill",
|
|
||||||
"DisplayName": "App.Platform.Delete",
|
|
||||||
"Order": 3,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Skill.Export",
|
|
||||||
"ParentName": "App.Definitions.Skill",
|
|
||||||
"DisplayName": "Export",
|
|
||||||
"Order": 4,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Skill.Import",
|
|
||||||
"ParentName": "App.Definitions.Skill",
|
|
||||||
"DisplayName": "Import",
|
|
||||||
"Order": 5,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"GroupName": "App.Saas",
|
"GroupName": "App.Saas",
|
||||||
"Name": "App.Definitions.UomCategory",
|
"Name": "App.Definitions.UomCategory",
|
||||||
"ParentName": "App.Saas.Definitions",
|
"ParentName": "App.Saas.Definitions",
|
||||||
"DisplayName": "App.Definitions.UomCategory",
|
"DisplayName": "App.Definitions.UomCategory",
|
||||||
"Order": 12,
|
"Order": 9,
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
"MultiTenancySide": 2,
|
"MultiTenancySide": 2,
|
||||||
"Modules": "Sas|Adm"
|
"Modules": "Sas|Adm"
|
||||||
|
|
@ -769,7 +579,7 @@
|
||||||
"Name": "App.Definitions.Uom",
|
"Name": "App.Definitions.Uom",
|
||||||
"ParentName": "App.Saas.Definitions",
|
"ParentName": "App.Saas.Definitions",
|
||||||
"DisplayName": "App.Definitions.Uom",
|
"DisplayName": "App.Definitions.Uom",
|
||||||
"Order": 13,
|
"Order": 10,
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
"MultiTenancySide": 2,
|
"MultiTenancySide": 2,
|
||||||
"Modules": "Sas|Adm"
|
"Modules": "Sas|Adm"
|
||||||
|
|
@ -824,66 +634,6 @@
|
||||||
"MultiTenancySide": 2,
|
"MultiTenancySide": 2,
|
||||||
"Modules": "Sas|Adm"
|
"Modules": "Sas|Adm"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Sequence",
|
|
||||||
"ParentName": "App.Saas.Definitions",
|
|
||||||
"DisplayName": "App.Definitions.Sequence",
|
|
||||||
"Order": 14,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Sequence.Create",
|
|
||||||
"ParentName": "App.Definitions.Sequence",
|
|
||||||
"DisplayName": "App.Platform.Create",
|
|
||||||
"Order": 1,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Sequence.Update",
|
|
||||||
"ParentName": "App.Definitions.Sequence",
|
|
||||||
"DisplayName": "App.Platform.Update",
|
|
||||||
"Order": 2,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Sequence.Delete",
|
|
||||||
"ParentName": "App.Definitions.Sequence",
|
|
||||||
"DisplayName": "App.Platform.Delete",
|
|
||||||
"Order": 3,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Sequence.Export",
|
|
||||||
"ParentName": "App.Definitions.Sequence",
|
|
||||||
"DisplayName": "Export",
|
|
||||||
"Order": 4,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Saas",
|
|
||||||
"Name": "App.Definitions.Sequence.Import",
|
|
||||||
"ParentName": "App.Definitions.Sequence",
|
|
||||||
"DisplayName": "Import",
|
|
||||||
"Order": 5,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 2,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"GroupName": "App.Saas",
|
"GroupName": "App.Saas",
|
||||||
"Name": "App.Public",
|
"Name": "App.Public",
|
||||||
|
|
@ -3096,9 +2846,9 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"GroupName": "App.Administration",
|
"GroupName": "App.Administration",
|
||||||
"Name": "App.Definitions.Department",
|
"Name": "App.Definitions.Sequence",
|
||||||
"ParentName": "App.Administration.Definitions",
|
"ParentName": "App.Administration.Definitions",
|
||||||
"DisplayName": "App.Definitions.Department",
|
"DisplayName": "App.Definitions.Sequence",
|
||||||
"Order": 2,
|
"Order": 2,
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
"MultiTenancySide": 3,
|
"MultiTenancySide": 3,
|
||||||
|
|
@ -3106,8 +2856,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"GroupName": "App.Administration",
|
"GroupName": "App.Administration",
|
||||||
"Name": "App.Definitions.Department.Create",
|
"Name": "App.Definitions.Sequence.Create",
|
||||||
"ParentName": "App.Definitions.Department",
|
"ParentName": "App.Definitions.Sequence",
|
||||||
"DisplayName": "App.Platform.Create",
|
"DisplayName": "App.Platform.Create",
|
||||||
"Order": 1,
|
"Order": 1,
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
|
|
@ -3116,8 +2866,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"GroupName": "App.Administration",
|
"GroupName": "App.Administration",
|
||||||
"Name": "App.Definitions.Department.Update",
|
"Name": "App.Definitions.Sequence.Update",
|
||||||
"ParentName": "App.Definitions.Department",
|
"ParentName": "App.Definitions.Sequence",
|
||||||
"DisplayName": "App.Platform.Update",
|
"DisplayName": "App.Platform.Update",
|
||||||
"Order": 2,
|
"Order": 2,
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
|
|
@ -3126,8 +2876,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"GroupName": "App.Administration",
|
"GroupName": "App.Administration",
|
||||||
"Name": "App.Definitions.Department.Delete",
|
"Name": "App.Definitions.Sequence.Delete",
|
||||||
"ParentName": "App.Definitions.Department",
|
"ParentName": "App.Definitions.Sequence",
|
||||||
"DisplayName": "App.Platform.Delete",
|
"DisplayName": "App.Platform.Delete",
|
||||||
"Order": 3,
|
"Order": 3,
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
|
|
@ -3136,8 +2886,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"GroupName": "App.Administration",
|
"GroupName": "App.Administration",
|
||||||
"Name": "App.Definitions.Department.Export",
|
"Name": "App.Definitions.Sequence.Export",
|
||||||
"ParentName": "App.Definitions.Department",
|
"ParentName": "App.Definitions.Sequence",
|
||||||
"DisplayName": "Export",
|
"DisplayName": "Export",
|
||||||
"Order": 4,
|
"Order": 4,
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
|
|
@ -3146,84 +2896,14 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"GroupName": "App.Administration",
|
"GroupName": "App.Administration",
|
||||||
"Name": "App.Definitions.Department.Import",
|
"Name": "App.Definitions.Sequence.Import",
|
||||||
"ParentName": "App.Definitions.Department",
|
"ParentName": "App.Definitions.Sequence",
|
||||||
"DisplayName": "Import",
|
"DisplayName": "Import",
|
||||||
"Order": 5,
|
"Order": 5,
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
"MultiTenancySide": 3,
|
"MultiTenancySide": 3,
|
||||||
"Modules": "Sas|Adm"
|
"Modules": "Sas|Adm"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"GroupName": "App.Administration",
|
|
||||||
"Name": "App.Definitions.JobPosition",
|
|
||||||
"ParentName": "App.Administration.Definitions",
|
|
||||||
"DisplayName": "App.Definitions.JobPosition",
|
|
||||||
"Order": 3,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 3,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Administration",
|
|
||||||
"Name": "App.Definitions.JobPosition.Create",
|
|
||||||
"ParentName": "App.Definitions.JobPosition",
|
|
||||||
"DisplayName": "App.Platform.Create",
|
|
||||||
"Order": 1,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 3,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Administration",
|
|
||||||
"Name": "App.Definitions.JobPosition.Update",
|
|
||||||
"ParentName": "App.Definitions.JobPosition",
|
|
||||||
"DisplayName": "App.Platform.Update",
|
|
||||||
"Order": 2,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 3,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Administration",
|
|
||||||
"Name": "App.Definitions.JobPosition.Delete",
|
|
||||||
"ParentName": "App.Definitions.JobPosition",
|
|
||||||
"DisplayName": "App.Platform.Delete",
|
|
||||||
"Order": 3,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 3,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Administration",
|
|
||||||
"Name": "App.Definitions.JobPosition.Export",
|
|
||||||
"ParentName": "App.Definitions.JobPosition",
|
|
||||||
"DisplayName": "Export",
|
|
||||||
"Order": 4,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 3,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Administration",
|
|
||||||
"Name": "App.Definitions.JobPosition.Import",
|
|
||||||
"ParentName": "App.Definitions.JobPosition",
|
|
||||||
"DisplayName": "Import",
|
|
||||||
"Order": 5,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 3,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"GroupName": "App.Administration",
|
|
||||||
"Name": "App.Definitions.OrgChart",
|
|
||||||
"ParentName": "App.Administration.Definitions",
|
|
||||||
"DisplayName": "App.Definitions.OrgChart",
|
|
||||||
"Order": 4,
|
|
||||||
"IsEnabled": true,
|
|
||||||
"MultiTenancySide": 3,
|
|
||||||
"Modules": "Sas|Adm"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"GroupName": "App.Administration",
|
"GroupName": "App.Administration",
|
||||||
"Name": "App.Licence",
|
"Name": "App.Licence",
|
||||||
|
|
@ -5983,6 +5663,336 @@
|
||||||
"IsEnabled": true,
|
"IsEnabled": true,
|
||||||
"MultiTenancySide": 3,
|
"MultiTenancySide": 3,
|
||||||
"Modules": "Sas|Adm"
|
"Modules": "Sas|Adm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Definitions",
|
||||||
|
"ParentName": null,
|
||||||
|
"DisplayName": "App.Platform.Definitions",
|
||||||
|
"Order": 1,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillType",
|
||||||
|
"ParentName": "App.Hr.Definitions",
|
||||||
|
"DisplayName": "App.Hr.SkillType",
|
||||||
|
"Order": 1,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillType.Create",
|
||||||
|
"ParentName": "App.Hr.SkillType",
|
||||||
|
"DisplayName": "App.Platform.Create",
|
||||||
|
"Order": 1,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillType.Update",
|
||||||
|
"ParentName": "App.Hr.SkillType",
|
||||||
|
"DisplayName": "App.Platform.Update",
|
||||||
|
"Order": 2,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillType.Delete",
|
||||||
|
"ParentName": "App.Hr.SkillType",
|
||||||
|
"DisplayName": "App.Platform.Delete",
|
||||||
|
"Order": 3,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillType.Export",
|
||||||
|
"ParentName": "App.Hr.SkillType",
|
||||||
|
"DisplayName": "Export",
|
||||||
|
"Order": 4,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillType.Import",
|
||||||
|
"ParentName": "App.Hr.SkillType",
|
||||||
|
"DisplayName": "Import",
|
||||||
|
"Order": 5,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillType.Note",
|
||||||
|
"ParentName": "App.Hr.SkillType",
|
||||||
|
"DisplayName": "Note",
|
||||||
|
"Order": 6,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillLevel",
|
||||||
|
"ParentName": "App.Hr.Definitions",
|
||||||
|
"DisplayName": "App.Hr.SkillLevel",
|
||||||
|
"Order": 2,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillLevel.Create",
|
||||||
|
"ParentName": "App.Hr.SkillLevel",
|
||||||
|
"DisplayName": "App.Platform.Create",
|
||||||
|
"Order": 1,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillLevel.Update",
|
||||||
|
"ParentName": "App.Hr.SkillLevel",
|
||||||
|
"DisplayName": "App.Platform.Update",
|
||||||
|
"Order": 2,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillLevel.Delete",
|
||||||
|
"ParentName": "App.Hr.SkillLevel",
|
||||||
|
"DisplayName": "App.Platform.Delete",
|
||||||
|
"Order": 3,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillLevel.Export",
|
||||||
|
"ParentName": "App.Hr.SkillLevel",
|
||||||
|
"DisplayName": "Export",
|
||||||
|
"Order": 4,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.SkillLevel.Import",
|
||||||
|
"ParentName": "App.Hr.SkillLevel",
|
||||||
|
"DisplayName": "Import",
|
||||||
|
"Order": 5,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Skill",
|
||||||
|
"ParentName": "App.Hr.Definitions",
|
||||||
|
"DisplayName": "App.Hr.Skill",
|
||||||
|
"Order": 3,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Skill.Create",
|
||||||
|
"ParentName": "App.Hr.Skill",
|
||||||
|
"DisplayName": "App.Platform.Create",
|
||||||
|
"Order": 1,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Skill.Update",
|
||||||
|
"ParentName": "App.Hr.Skill",
|
||||||
|
"DisplayName": "App.Platform.Update",
|
||||||
|
"Order": 2,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Skill.Delete",
|
||||||
|
"ParentName": "App.Hr.Skill",
|
||||||
|
"DisplayName": "App.Platform.Delete",
|
||||||
|
"Order": 3,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Skill.Export",
|
||||||
|
"ParentName": "App.Hr.Skill",
|
||||||
|
"DisplayName": "Export",
|
||||||
|
"Order": 4,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Skill.Import",
|
||||||
|
"ParentName": "App.Hr.Skill",
|
||||||
|
"DisplayName": "Import",
|
||||||
|
"Order": 5,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 2,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Department",
|
||||||
|
"ParentName": "App.Hr.Definitions",
|
||||||
|
"DisplayName": "App.Hr.Department",
|
||||||
|
"Order": 4,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Department.Create",
|
||||||
|
"ParentName": "App.Hr.Department",
|
||||||
|
"DisplayName": "App.Platform.Create",
|
||||||
|
"Order": 1,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Department.Update",
|
||||||
|
"ParentName": "App.Hr.Department",
|
||||||
|
"DisplayName": "App.Platform.Update",
|
||||||
|
"Order": 2,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Department.Delete",
|
||||||
|
"ParentName": "App.Hr.Department",
|
||||||
|
"DisplayName": "App.Platform.Delete",
|
||||||
|
"Order": 3,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Department.Export",
|
||||||
|
"ParentName": "App.Hr.Department",
|
||||||
|
"DisplayName": "Export",
|
||||||
|
"Order": 4,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.Department.Import",
|
||||||
|
"ParentName": "App.Hr.Department",
|
||||||
|
"DisplayName": "Import",
|
||||||
|
"Order": 5,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.JobPosition",
|
||||||
|
"ParentName": "App.Hr.Definitions",
|
||||||
|
"DisplayName": "App.Hr.JobPosition",
|
||||||
|
"Order": 5,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.JobPosition.Create",
|
||||||
|
"ParentName": "App.Hr.JobPosition",
|
||||||
|
"DisplayName": "App.Platform.Create",
|
||||||
|
"Order": 1,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.JobPosition.Update",
|
||||||
|
"ParentName": "App.Hr.JobPosition",
|
||||||
|
"DisplayName": "App.Platform.Update",
|
||||||
|
"Order": 2,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.JobPosition.Delete",
|
||||||
|
"ParentName": "App.Hr.JobPosition",
|
||||||
|
"DisplayName": "App.Platform.Delete",
|
||||||
|
"Order": 3,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.JobPosition.Export",
|
||||||
|
"ParentName": "App.Hr.JobPosition",
|
||||||
|
"DisplayName": "Export",
|
||||||
|
"Order": 4,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.JobPosition.Import",
|
||||||
|
"ParentName": "App.Hr.JobPosition",
|
||||||
|
"DisplayName": "Import",
|
||||||
|
"Order": 5,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"GroupName": "App.Hr",
|
||||||
|
"Name": "App.Hr.OrgChart",
|
||||||
|
"ParentName": null,
|
||||||
|
"DisplayName": "App.Hr.OrgChart",
|
||||||
|
"Order": 2,
|
||||||
|
"IsEnabled": true,
|
||||||
|
"MultiTenancySide": 3,
|
||||||
|
"Modules": "Sas|Hr"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,42 @@
|
||||||
{
|
{
|
||||||
"ListFormCode": "App.Definitions.Department",
|
"ListFormCode": "App.Hr.Department",
|
||||||
"KeyFieldName": "Id",
|
"KeyFieldName": "Id",
|
||||||
"GeneratedAt": "2026-09-04T00:00:00Z",
|
"GeneratedAt": "2026-09-04T00:00:00Z",
|
||||||
"Order": 10,
|
"Order": 10,
|
||||||
"Rows": [
|
"Rows": [
|
||||||
{
|
{
|
||||||
"Id": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f",
|
"Id": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Yönetim",
|
"Name": "Yönetim",
|
||||||
"ParentId": null
|
"ParentId": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "2c1743a3-91b7-4b57-a6c8-7d8e9f0a1b2c",
|
"Id": "2c1743a3-91b7-4b57-a6c8-7d8e9f0a1b2c",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Üretim",
|
"Name": "Üretim",
|
||||||
"ParentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f"
|
"ParentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "987bcab0-1b92-4a4e-8d7f-3c2b1a0f9e8d",
|
"Id": "987bcab0-1b92-4a4e-8d7f-3c2b1a0f9e8d",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Satış",
|
"Name": "Satış",
|
||||||
"ParentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f"
|
"ParentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "05b048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
"Id": "05b048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Finans",
|
"Name": "Finans",
|
||||||
"ParentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f"
|
"ParentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "051048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
"Id": "051048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Muhasebe",
|
"Name": "Muhasebe",
|
||||||
"ParentId": "05b048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d"
|
"ParentId": "05b048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "3cd38ab3-7e6f-4b8d-9c0a-5f4e3d2c1b0a",
|
"Id": "3cd38ab3-7e6f-4b8d-9c0a-5f4e3d2c1b0a",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Bilgi İşlem",
|
"Name": "Bilgi İşlem",
|
||||||
"ParentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f"
|
"ParentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f"
|
||||||
}
|
}
|
||||||
|
|
@ -1,53 +1,61 @@
|
||||||
{
|
{
|
||||||
"ListFormCode": "App.Definitions.JobPosition",
|
"ListFormCode": "App.Hr.JobPosition",
|
||||||
"KeyFieldName": "Id",
|
"KeyFieldName": "Id",
|
||||||
"GeneratedAt": "2026-09-04T00:00:00Z",
|
"GeneratedAt": "2026-09-04T00:00:00Z",
|
||||||
"Order": 20,
|
"Order": 20,
|
||||||
"Rows": [
|
"Rows": [
|
||||||
{
|
{
|
||||||
"Id": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60",
|
"Id": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Genel Müdür",
|
"Name": "Genel Müdür",
|
||||||
"DepartmentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f",
|
"DepartmentId": "8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f",
|
||||||
"ParentId": null
|
"ParentId": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "b7c8d9e0-f1a2-4b3c-8d9e-0f1a2b3c4d2e",
|
"Id": "b7c8d9e0-f1a2-4b3c-8d9e-0f1a2b3c4d2e",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Bilgi İşlem Müdürü",
|
"Name": "Bilgi İşlem Müdürü",
|
||||||
"DepartmentId": "3cd38ab3-7e6f-4b8d-9c0a-5f4e3d2c1b0a",
|
"DepartmentId": "3cd38ab3-7e6f-4b8d-9c0a-5f4e3d2c1b0a",
|
||||||
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "b7c8d9e0-f1b2-4b3c-1d9e-0f1a2b3c4d2e",
|
"Id": "b7c8d9e0-f1b2-4b3c-1d9e-0f1a2b3c4d2e",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "İhracat Müdürü",
|
"Name": "İhracat Müdürü",
|
||||||
"DepartmentId": "987bcab0-1b92-4a4e-8d7f-3c2b1a0f9e8d",
|
"DepartmentId": "987bcab0-1b92-4a4e-8d7f-3c2b1a0f9e8d",
|
||||||
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "b2c8d9e0-f1b2-4b3c-1d9e-0f1a2b3c4d2e",
|
"Id": "b2c8d9e0-f1b2-4b3c-1d9e-0f1a2b3c4d2e",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "İç Piyasa Müdürü",
|
"Name": "İç Piyasa Müdürü",
|
||||||
"DepartmentId": "987bcab0-1b92-4a4e-8d7f-3c2b1a0f9e8d",
|
"DepartmentId": "987bcab0-1b92-4a4e-8d7f-3c2b1a0f9e8d",
|
||||||
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "b2c8d9e0-f1b2-2b3c-1d9e-0f1a2b3c4d2e",
|
"Id": "b2c8d9e0-f1b2-2b3c-1d9e-0f1a2b3c4d2e",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Üretim Müdürü",
|
"Name": "Üretim Müdürü",
|
||||||
"DepartmentId": "2c1743a3-91b7-4b57-a6c8-7d8e9f0a1b2c",
|
"DepartmentId": "2c1743a3-91b7-4b57-a6c8-7d8e9f0a1b2c",
|
||||||
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "b7c8d9e0-f1a2-4b3c-1d9e-0f1a2b3c4d2e",
|
"Id": "b7c8d9e0-f1a2-4b3c-1d9e-0f1a2b3c4d2e",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Finans Müdürü",
|
"Name": "Finans Müdürü",
|
||||||
"DepartmentId": "05b048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
"DepartmentId": "05b048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
||||||
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
"ParentId": "d1f7c6a2-3b4e-4c8d-9f0a-1b2c3d4e5f60"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "b7c8d9e0-f1a2-4b3c-8d9e-0f1a2b3c4d5e",
|
"Id": "b7c8d9e0-f1a2-4b3c-8d9e-0f1a2b3c4d5e",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Muhasebe Müdürü",
|
"Name": "Muhasebe Müdürü",
|
||||||
"DepartmentId": "051048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
"DepartmentId": "051048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
||||||
"ParentId": "b7c8d9e0-f1a2-4b3c-1d9e-0f1a2b3c4d2e"
|
"ParentId": "b7c8d9e0-f1a2-4b3c-1d9e-0f1a2b3c4d2e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "c3d4e5f6-a7b8-4c9d-8e0f-1a2b3c4d5e6f",
|
"Id": "c3d4e5f6-a7b8-4c9d-8e0f-1a2b3c4d5e6f",
|
||||||
|
"BranchId": "1c125bf3-3ffd-4445-a270-1bc43ac3f61c",
|
||||||
"Name": "Muhasebe Şefi",
|
"Name": "Muhasebe Şefi",
|
||||||
"DepartmentId": "051048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
"DepartmentId": "051048d7-2f44-4f9d-b5a1-6e7f8a9b0c1d",
|
||||||
"ParentId": "b7c8d9e0-f1a2-4b3c-8d9e-0f1a2b3c4d5e"
|
"ParentId": "b7c8d9e0-f1a2-4b3c-8d9e-0f1a2b3c4d5e"
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"ListFormCode": "App.Definitions.Skill",
|
"ListFormCode": "App.Hr.Skill",
|
||||||
"KeyFieldName": "Id",
|
"KeyFieldName": "Id",
|
||||||
"GeneratedAt": "2026-09-04T00:00:00Z",
|
"GeneratedAt": "2026-09-04T00:00:00Z",
|
||||||
"Order": 20,
|
"Order": 20,
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"ListFormCode": "App.Definitions.SkillLevel",
|
"ListFormCode": "App.Hr.SkillLevel",
|
||||||
"KeyFieldName": "Id",
|
"KeyFieldName": "Id",
|
||||||
"GeneratedAt": "2026-09-04T00:00:00Z",
|
"GeneratedAt": "2026-09-04T00:00:00Z",
|
||||||
"Order": 20,
|
"Order": 20,
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"ListFormCode": "App.Definitions.SkillType",
|
"ListFormCode": "App.Hr.SkillType",
|
||||||
"KeyFieldName": "Id",
|
"KeyFieldName": "Id",
|
||||||
"GeneratedAt": "2026-09-04T00:00:00Z",
|
"GeneratedAt": "2026-09-04T00:00:00Z",
|
||||||
"Order": 10,
|
"Order": 10,
|
||||||
|
|
@ -60,6 +60,20 @@
|
||||||
"Key": "App.Administration",
|
"Key": "App.Administration",
|
||||||
"Value": "Yönetim"
|
"Value": "Yönetim"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Id": "7fa1d955-61a5-52cc-9616-dd914209a9ba",
|
||||||
|
"CultureName": "en",
|
||||||
|
"ResourceName": "Platform",
|
||||||
|
"Key": "App.Hr",
|
||||||
|
"Value": "Human Resources"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": "e65ba682-ab89-578b-aed5-e643483fee9b",
|
||||||
|
"CultureName": "tr",
|
||||||
|
"ResourceName": "Platform",
|
||||||
|
"Key": "App.Hr",
|
||||||
|
"Value": "İnsan Kaynakları"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Id": "b0b6e354-09a3-5e03-a0f8-95094b44ce15",
|
"Id": "b0b6e354-09a3-5e03-a0f8-95094b44ce15",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
|
|
@ -2175,17 +2189,17 @@
|
||||||
"Value": "Diziler"
|
"Value": "Diziler"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "73f84074-c2c1-5876-8310-b80abe7ba620",
|
"Id": "48d6fa3b-3209-569f-bcf9-b4265c696bb2",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.OrgChart",
|
"Key": "App.Hr.OrgChart",
|
||||||
"Value": "Organization Chart"
|
"Value": "Organization Chart"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "f11481bd-f5d7-559c-952d-8a3877e181b7",
|
"Id": "7ec675c3-af4e-5021-aca0-527c5f2ae4cf",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.OrgChart",
|
"Key": "App.Hr.OrgChart",
|
||||||
"Value": "Organizasyon Şeması"
|
"Value": "Organizasyon Şeması"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -15125,33 +15139,19 @@
|
||||||
"Value": "Sektörler"
|
"Value": "Sektörler"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "14bca818-01e2-58fa-816d-d73b0c6a01b3",
|
"Id": "07223a76-40ab-5338-a427-fb3b2b051bd6",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.Department",
|
"Key": "App.Hr.Department",
|
||||||
"Value": "Departments"
|
"Value": "Departments"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "0c0778aa-bb99-55e2-8974-1345bd758269",
|
"Id": "5fc7cf2d-b22c-55cd-aa20-dd4b247a255f",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.Department",
|
"Key": "App.Hr.Department",
|
||||||
"Value": "Departmanlar"
|
"Value": "Departmanlar"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Id": "e0087775-0049-56a0-9530-bfb61b26d557",
|
|
||||||
"CultureName": "en",
|
|
||||||
"ResourceName": "Platform",
|
|
||||||
"Key": "App.Definitions.JobPosition",
|
|
||||||
"Value": "Job Positions"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Id": "0f3b0438-2a04-5c52-9e3e-dbf109e21cdb",
|
|
||||||
"CultureName": "tr",
|
|
||||||
"ResourceName": "Platform",
|
|
||||||
"Key": "App.Definitions.JobPosition",
|
|
||||||
"Value": "Pozisyonlar"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Id": "935c7115-38b4-501e-8b43-6975a0ad494a",
|
"Id": "935c7115-38b4-501e-8b43-6975a0ad494a",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
|
|
@ -15251,45 +15251,45 @@
|
||||||
"Value": "İlçeler"
|
"Value": "İlçeler"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "680b4c15-97e4-54e6-b740-7479628be5c0",
|
"Id": "e5e1ee56-7ff7-59f1-8f32-cee8fc364f00",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.SkillType",
|
"Key": "App.Hr.SkillType",
|
||||||
"Value": "Skill Types"
|
"Value": "Skill Types"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "76818b6a-9ec3-5f0b-ab31-ef107a9e4c55",
|
"Id": "3a3c2332-a7af-5af0-abc7-abcb5c7deb0a",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.SkillType",
|
"Key": "App.Hr.SkillType",
|
||||||
"Value": "Yetenek Tipleri"
|
"Value": "Yetenek Tipleri"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "efe7788c-f908-5833-b29e-e7a7014e9c9c",
|
"Id": "0696290d-9fa8-511d-9855-1d44845a8a31",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.SkillLevel",
|
"Key": "App.Hr.SkillLevel",
|
||||||
"Value": "Skill Levels"
|
"Value": "Skill Levels"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "6b3c9bb6-1fd2-5221-b82a-e48f692d2c1a",
|
"Id": "adce2569-5d54-5ae1-a0ee-20c763c767b6",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.SkillLevel",
|
"Key": "App.Hr.SkillLevel",
|
||||||
"Value": "Yetenek Seviyeleri"
|
"Value": "Yetenek Seviyeleri"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "2104c315-062f-5692-bd5c-6ffc5103d21a",
|
"Id": "91cf56ac-8180-5d6a-8a10-61bad98b374a",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.Skill",
|
"Key": "App.Hr.Skill",
|
||||||
"Value": "Skill"
|
"Value": "Skill"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "bf784899-34a4-5ab6-890d-f47201027e3c",
|
"Id": "b85270b2-b134-5d85-8b04-2d2ac76b9bc1",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.Skill",
|
"Key": "App.Hr.Skill",
|
||||||
"Value": "Yetenek"
|
"Value": "Yetenek"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -24096,7 +24096,7 @@
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Hr.JobPosition",
|
"Key": "App.Hr.JobPosition",
|
||||||
"Value": "İş Pozisyonları"
|
"Value": "Pozisyonlar"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "69cd57e0-ba2a-5714-882d-18fa0944823b",
|
"Id": "69cd57e0-ba2a-5714-882d-18fa0944823b",
|
||||||
|
|
@ -65553,46 +65553,46 @@
|
||||||
"Value": "Numaratör — belge numarası tanımları. Tablo: Adm_T_Sequence · tenant kapsamlı · liste ekranı.\nKullanım: otomatik numara alacak her belge türü için bir satır açılır (sipariş, fatura, iş emri, talep). Numara kayıt sırasında sunucuda üretilir; eş zamanlı kullanımda boşluk veya tekrar oluşmaz.\nAlanlar:\n• Name → ekrandan referans verilen anahtar; numaratör bu değerle seçilir\n• Prefix, Suffix → numaranın önüne ve arkasına eklenen sabit metin (SIP-, /2026)\n• PaddingSize → numaranın sıfırla doldurulacağı genişlik; 5 değeri 00042 üretir\n• StartNumber → sayacın başlayacağı numara\n• NextNumber → üretilecek sonraki numara; platform bu değeri artırır\n• IncrementStep → artış miktarı, normalde 1\n• ResetPeriod → sayacın ne zaman sıfırlanacağı: hiç / yıllık / aylık / günlük\n• LastPeriodKey → en son hangi dönemde sıfırlandığı; platform mevcut dönemle karşılaştırır ve gerekiyorsa sıfırlar\n• FormatTemplate → çıktı kalıbı; ön ek, numara ve dönem bilgisinin dizilişi buraya yazılır\n• IsActive → pasif numaratör numara üretmez, ekran elle değere düşer\nNasıl bağlanır: hedef ekranda alanın varsayılan değer tanımına CustomValueType = 5 (Sequence) seçilir ve bu satırın Name değeri yazılır. Numara için script veya SQL yazılmaz.\nDikkat: canlı sistemde NextNumber elle değiştirilmez — belgelerin numara sürekliliği bozulur ve aynı numaradan iki belge oluşur. Numaralandırma yeniden başlayacaksa farklı ön ekle yeni numaratör tanımla."
|
"Value": "Numaratör — belge numarası tanımları. Tablo: Adm_T_Sequence · tenant kapsamlı · liste ekranı.\nKullanım: otomatik numara alacak her belge türü için bir satır açılır (sipariş, fatura, iş emri, talep). Numara kayıt sırasında sunucuda üretilir; eş zamanlı kullanımda boşluk veya tekrar oluşmaz.\nAlanlar:\n• Name → ekrandan referans verilen anahtar; numaratör bu değerle seçilir\n• Prefix, Suffix → numaranın önüne ve arkasına eklenen sabit metin (SIP-, /2026)\n• PaddingSize → numaranın sıfırla doldurulacağı genişlik; 5 değeri 00042 üretir\n• StartNumber → sayacın başlayacağı numara\n• NextNumber → üretilecek sonraki numara; platform bu değeri artırır\n• IncrementStep → artış miktarı, normalde 1\n• ResetPeriod → sayacın ne zaman sıfırlanacağı: hiç / yıllık / aylık / günlük\n• LastPeriodKey → en son hangi dönemde sıfırlandığı; platform mevcut dönemle karşılaştırır ve gerekiyorsa sıfırlar\n• FormatTemplate → çıktı kalıbı; ön ek, numara ve dönem bilgisinin dizilişi buraya yazılır\n• IsActive → pasif numaratör numara üretmez, ekran elle değere düşer\nNasıl bağlanır: hedef ekranda alanın varsayılan değer tanımına CustomValueType = 5 (Sequence) seçilir ve bu satırın Name değeri yazılır. Numara için script veya SQL yazılmaz.\nDikkat: canlı sistemde NextNumber elle değiştirilmez — belgelerin numara sürekliliği bozulur ve aynı numaradan iki belge oluşur. Numaralandırma yeniden başlayacaksa farklı ön ekle yeni numaratör tanımla."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "834e29da-9f96-58f8-a7bd-931d5d731fc5",
|
"Id": "f5b596ee-4b25-579f-9aaa-39f3072d1a5d",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.SkillType.Description",
|
"Key": "App.Hr.SkillType.Description",
|
||||||
"Value": "Skill Type — the top level of the competence tree. Table: Sas_H_SkillType · host scope · list screen; skills and levels are entered on the sub-tabs.\nUsage: competences are collected under a type (technical, language, certificate, behavioural). The type determines both the grouping of skills and the level scale, because the level rows are also bound to a skill type.\nFields:\n• Name → type name\n• SkillTypeId → shown on the sub-tabs; the type the skill/level is bound to\nSub-tabs: Skill (the competences of the type) and Skill Level (the scale valid for the type).\nWhy it matters: this screen is also the reference for the self-referencing sub-form pattern — when you need a screen whose sub-records live in a related table and are filtered by the parent record, take this definition."
|
"Value": "Skill Type — the top level of the competence tree. Table: Hr_H_SkillType · host scope · list screen; skills and levels are entered on the sub-tabs.\nUsage: competences are collected under a type (technical, language, certificate, behavioural). The type determines both the grouping of skills and the level scale, because the level rows are also bound to a skill type.\nFields:\n• Name → type name\n• SkillTypeId → shown on the sub-tabs; the type the skill/level is bound to\nSub-tabs: Skill (the competences of the type) and Skill Level (the scale valid for the type).\nWhy it matters: this screen is also the reference for the self-referencing sub-form pattern — when you need a screen whose sub-records live in a related table and are filtered by the parent record, take this definition."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "eb61d268-1e14-5763-b63b-d06b14f5cbab",
|
"Id": "c38cbe3c-e3d4-5c43-a3bb-c8b2a14d37b7",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.SkillType.Description",
|
"Key": "App.Hr.SkillType.Description",
|
||||||
"Value": "Yetkinlik Türü — yetkinlik ağacının en üst seviyesi. Tablo: Sas_H_SkillType · host kapsamlı · liste ekranı; yetkinlikler ve seviyeler alt sekmelerden girilir.\nKullanım: yetkinlikler bir tür altında toplanır (teknik, dil, sertifika, davranışsal). Tür hem yetkinliklerin gruplamasını hem de seviye ölçeğini belirler; çünkü seviye satırları da bir yetkinlik türüne bağlıdır.\nAlanlar:\n• Name → tür adı\n• SkillTypeId → alt sekmelerde görünür; yetkinliğin/seviyenin bağlı olduğu tür\nAlt sekmeler: Yetkinlik (türün yetkinlikleri) ve Yetkinlik Seviyesi (tür için geçerli ölçek).\nNeden önemli: bu ekran aynı zamanda kendi kendine ebeveyn olan alt form kalıbının referansıdır — alt kayıtları ilişkili bir tabloda duran ve ana kayda göre süzülen bir ekran gerektiğinde bu tanım alınır."
|
"Value": "Yetkinlik Türü — yetkinlik ağacının en üst seviyesi. Tablo: Hr_H_SkillType · host kapsamlı · liste ekranı; yetkinlikler ve seviyeler alt sekmelerden girilir.\nKullanım: yetkinlikler bir tür altında toplanır (teknik, dil, sertifika, davranışsal). Tür hem yetkinliklerin gruplamasını hem de seviye ölçeğini belirler; çünkü seviye satırları da bir yetkinlik türüne bağlıdır.\nAlanlar:\n• Name → tür adı\n• SkillTypeId → alt sekmelerde görünür; yetkinliğin/seviyenin bağlı olduğu tür\nAlt sekmeler: Yetkinlik (türün yetkinlikleri) ve Yetkinlik Seviyesi (tür için geçerli ölçek).\nNeden önemli: bu ekran aynı zamanda kendi kendine ebeveyn olan alt form kalıbının referansıdır — alt kayıtları ilişkili bir tabloda duran ve ana kayda göre süzülen bir ekran gerektiğinde bu tanım alınır."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "c028559e-7cc6-5f74-9407-a17707ac2f6a",
|
"Id": "146db4a7-43ec-538d-8720-f5dd767f47ac",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.SkillLevel.Description",
|
"Key": "App.Hr.SkillLevel.Description",
|
||||||
"Value": "Skill Level — competence levels. Table: Sas_H_SkillLevel · host scope · list screen; each level is bound to a skill type.\nUsage: the scale used when a competence is assigned to a person (beginner, intermediate, advanced, expert). Because the scale is defined per type, a language skill and a technical skill may use different levels.\nFields:\n• Name → level name\n• SkillTypeId → the skill type the level is valid for\n• Progress → the numeric equivalent of the level (0-100); progress bars, sorting and gap analysis in reports use this value\n• IsDefault → the level automatically selected when a new competence is assigned\nCaution: keep the Progress values consistent within a type; comparison across different types is only meaningful over Progress."
|
"Value": "Skill Level — competence levels. Table: Hr_H_SkillLevel · host scope · list screen; each level is bound to a skill type.\nUsage: the scale used when a competence is assigned to a person (beginner, intermediate, advanced, expert). Because the scale is defined per type, a language skill and a technical skill may use different levels.\nFields:\n• Name → level name\n• SkillTypeId → the skill type the level is valid for\n• Progress → the numeric equivalent of the level (0-100); progress bars, sorting and gap analysis in reports use this value\n• IsDefault → the level automatically selected when a new competence is assigned\nCaution: keep the Progress values consistent within a type; comparison across different types is only meaningful over Progress."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "ac04f818-098e-571a-98c1-89914542171e",
|
"Id": "eb584c9c-5443-57a4-80f0-6f2e6607a6c8",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.SkillLevel.Description",
|
"Key": "App.Hr.SkillLevel.Description",
|
||||||
"Value": "Yetkinlik Seviyesi — yetkinlik seviyeleri. Tablo: Sas_H_SkillLevel · host kapsamlı · liste ekranı; her seviye bir yetkinlik türüne bağlıdır.\nKullanım: bir yetkinlik kişiye atanırken kullanılan ölçek (başlangıç, orta, ileri, uzman). Ölçek türe göre tanımlandığı için dil yetkinliği ile teknik yetkinlik farklı seviyeler kullanabilir.\nAlanlar:\n• Name → seviye adı\n• SkillTypeId → seviyenin geçerli olduğu yetkinlik türü\n• Progress → seviyenin sayısal karşılığı (0-100); ilerleme çubukları, sıralama ve raporlardaki boşluk analizi bu değeri kullanır\n• IsDefault → yeni yetkinlik atandığında otomatik seçilen seviye\nDikkat: Progress değerlerini tür içinde tutarlı tut; farklı türler arasında karşılaştırma yalnızca Progress üzerinden anlamlıdır."
|
"Value": "Yetkinlik Seviyesi — yetkinlik seviyeleri. Tablo: Hr_H_SkillLevel · host kapsamlı · liste ekranı; her seviye bir yetkinlik türüne bağlıdır.\nKullanım: bir yetkinlik kişiye atanırken kullanılan ölçek (başlangıç, orta, ileri, uzman). Ölçek türe göre tanımlandığı için dil yetkinliği ile teknik yetkinlik farklı seviyeler kullanabilir.\nAlanlar:\n• Name → seviye adı\n• SkillTypeId → seviyenin geçerli olduğu yetkinlik türü\n• Progress → seviyenin sayısal karşılığı (0-100); ilerleme çubukları, sıralama ve raporlardaki boşluk analizi bu değeri kullanır\n• IsDefault → yeni yetkinlik atandığında otomatik seçilen seviye\nDikkat: Progress değerlerini tür içinde tutarlı tut; farklı türler arasında karşılaştırma yalnızca Progress üzerinden anlamlıdır."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "1341d32a-f115-51ec-87e5-71c0ea8d0cce",
|
"Id": "6ab49c34-5a3e-58fb-a7a7-5fc3aacbe4c8",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.Skill.Description",
|
"Key": "App.Hr.Skill.Description",
|
||||||
"Value": "Skill — competence definitions. Table: Sas_H_Skill · host scope · list screen; each skill belongs to a skill type.\nUsage: the lookup source for person/position competence matching. Together with the skill level it forms the 'who knows what, at which level' data set; the competence requirement of a job position and the competence of a person are compared over the same list.\nFields:\n• Name → competence name (C#, English, Forklift Licence, Presentation)\n• SkillTypeId → the type it belongs to; the level scale is also determined by this type\nCaution: define the competence at one level of detail. Both 'Software' and 'C# 12' in the same list makes the matching meaningless."
|
"Value": "Skill — competence definitions. Table: Hr_H_Skill · host scope · list screen; each skill belongs to a skill type.\nUsage: the lookup source for person/position competence matching. Together with the skill level it forms the 'who knows what, at which level' data set; the competence requirement of a job position and the competence of a person are compared over the same list.\nFields:\n• Name → competence name (C#, English, Forklift Licence, Presentation)\n• SkillTypeId → the type it belongs to; the level scale is also determined by this type\nCaution: define the competence at one level of detail. Both 'Software' and 'C# 12' in the same list makes the matching meaningless."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "b37e898e-96c7-5208-9135-1fe977425497",
|
"Id": "52515367-0184-5e6b-93d8-e4438031834d",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.Skill.Description",
|
"Key": "App.Hr.Skill.Description",
|
||||||
"Value": "Yetkinlik — yetkinlik tanımları. Tablo: Sas_H_Skill · host kapsamlı · liste ekranı; her yetkinlik bir yetkinlik türüne bağlıdır.\nKullanım: kişi/pozisyon yetkinlik eşleştirmelerinin lookup kaynağı. Yetkinlik seviyesi ile birlikte 'kim neyi hangi seviyede biliyor' veri setini oluşturur; bir görevin gerektirdiği yetkinlik ile kişinin yetkinliği aynı liste üzerinden karşılaştırılır.\nAlanlar:\n• Name → yetkinlik adı (C#, İngilizce, Forklift Ehliyeti, Sunum)\n• SkillTypeId → bağlı olduğu tür; seviye ölçeği de bu türe göre belirlenir\nDikkat: yetkinliği tek bir detay seviyesinde tanımla. Aynı listede hem 'Yazılım' hem 'C# 12' bulunması eşleştirmeyi anlamsızlaştırır."
|
"Value": "Yetkinlik — yetkinlik tanımları. Tablo: Hr_H_Skill · host kapsamlı · liste ekranı; her yetkinlik bir yetkinlik türüne bağlıdır.\nKullanım: kişi/pozisyon yetkinlik eşleştirmelerinin lookup kaynağı. Yetkinlik seviyesi ile birlikte 'kim neyi hangi seviyede biliyor' veri setini oluşturur; bir görevin gerektirdiği yetkinlik ile kişinin yetkinliği aynı liste üzerinden karşılaştırılır.\nAlanlar:\n• Name → yetkinlik adı (C#, İngilizce, Forklift Ehliyeti, Sunum)\n• SkillTypeId → bağlı olduğu tür; seviye ölçeği de bu türe göre belirlenir\nDikkat: yetkinliği tek bir detay seviyesinde tanımla. Aynı listede hem 'Yazılım' hem 'C# 12' bulunması eşleştirmeyi anlamsızlaştırır."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "82ab37e7-4c7d-5163-ab26-4ac2fb150262",
|
"Id": "82ab37e7-4c7d-5163-ab26-4ac2fb150262",
|
||||||
|
|
@ -66085,32 +66085,32 @@
|
||||||
"Value": "Oturumlar — açık oturumlar. Tablo: AbpSessions · tenant kapsamlı (IsTenant = true) · liste ekranı.\nKullanım: hangi kullanıcı hangi cihaz ve adresten, ne zamandan beri oturum açmış. Satırdaki aksiyon oturumu düşürür (UiEvalService.ApiKickUser) ve kullanıcı anında çıkarılır.\nAlanlar:\n• UserId → oturumun sahibi\n• SessionId → benzersiz oturum kimliği\n• Device, DeviceInfo → cihaz türü ve ayrıntısı (tarayıcı, işletim sistemi)\n• ClientId → hangi uygulamadan girildiği (web, mobil, dış entegrasyon)\n• IpAddresses → oturum boyunca kullanılan adresler; birden çok adres değişen ağ demektir\n• SignedIn → oturumun açıldığı an; oturumun yaşı buradan ölçülür\nDikkat: oturumu düşürmek hesabı kapatmaz — kullanıcı aynı bilgilerle yeniden girer. Erişimin gerçekten kapanması gerekiyorsa kullanıcıyı da pasife al. Süresi geçmiş oturumları SessionCleanupWorker işi otomatik temizler."
|
"Value": "Oturumlar — açık oturumlar. Tablo: AbpSessions · tenant kapsamlı (IsTenant = true) · liste ekranı.\nKullanım: hangi kullanıcı hangi cihaz ve adresten, ne zamandan beri oturum açmış. Satırdaki aksiyon oturumu düşürür (UiEvalService.ApiKickUser) ve kullanıcı anında çıkarılır.\nAlanlar:\n• UserId → oturumun sahibi\n• SessionId → benzersiz oturum kimliği\n• Device, DeviceInfo → cihaz türü ve ayrıntısı (tarayıcı, işletim sistemi)\n• ClientId → hangi uygulamadan girildiği (web, mobil, dış entegrasyon)\n• IpAddresses → oturum boyunca kullanılan adresler; birden çok adres değişen ağ demektir\n• SignedIn → oturumun açıldığı an; oturumun yaşı buradan ölçülür\nDikkat: oturumu düşürmek hesabı kapatmaz — kullanıcı aynı bilgilerle yeniden girer. Erişimin gerçekten kapanması gerekiyorsa kullanıcıyı da pasife al. Süresi geçmiş oturumları SessionCleanupWorker işi otomatik temizler."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "4b4ad587-1325-59fa-86f3-fb8e30f15386",
|
"Id": "e8a7eaa2-3551-5ca1-a865-e0adf1f8681a",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.Department.Description",
|
"Key": "App.Hr.Department.Description",
|
||||||
"Value": "Department — department definitions. Table: Adm_T_Department · tenant scope · tree layout.\nUsage: the department lookup of personnel, approval and assignment screens. It is the reference for the TreeList layout — when a hierarchical list is needed, take the TreeOptionJson of this screen.\nFields:\n• Name → department name\n• ParentId → the parent department; the tree is formed over this field. A root department leaves it empty\nThe same data is shown as an organization chart on Definitions › Org Chart (/admin/organization); job positions are bound to departments through DepartmentId.\nCaution: moving a department moves its children as well and a circular parent reference is not allowed. Do not delete a department carrying personnel records — deactivate it or move the records first."
|
"Value": "Department — department definitions. Table: Hr_T_Department · tenant scope · tree layout.\nUsage: the department lookup of personnel, approval and assignment screens. It is the reference for the TreeList layout — when a hierarchical list is needed, take the TreeOptionJson of this screen.\nFields:\n• BranchId → the branch the department belongs to; the first column of the list\n• Name → department name\n• ParentId → the parent department; the lookup is filtered to the selected branch's departments and the tree is formed over this field. A root department leaves it empty\nThe same data is shown as an organization chart on HR › Org Chart (/admin/organization); job positions are bound to departments through DepartmentId.\nCaution: moving a department moves its children as well and a circular parent reference is not allowed. Do not delete a department carrying personnel records — deactivate it or move the records first."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "3c56eb7c-c981-584d-9bf6-be02a146ae6f",
|
"Id": "8cd11bc5-e5d5-5ffa-952d-06fa4a27730c",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.Department.Description",
|
"Key": "App.Hr.Department.Description",
|
||||||
"Value": "Departman — departman tanımları. Tablo: Adm_T_Department · tenant kapsamlı · ağaç düzeni.\nKullanım: personel, onay ve atama ekranlarının departman lookup'ı. TreeList düzeninin referansıdır — hiyerarşik liste gerektiğinde bu ekranın TreeOptionJson tanımı alınır.\nAlanlar:\n• Name → departman adı\n• ParentId → üst departman; ağaç bu alan üzerinden kurulur. Kök departmanda boş bırakılır\nAynı veri Tanımlar › Organizasyon Şeması (/admin/organization) ekranında şema olarak gösterilir; görevler DepartmentId ile departmanlara bağlanır.\nDikkat: departman taşındığında alt kırılımları da taşınır ve döngüsel üst kayıt tanımına izin verilmez. Personel kaydı taşıyan departmanı silme — pasife al ya da önce kayıtları taşı."
|
"Value": "Departman — departman tanımları. Tablo: Hr_T_Department · tenant kapsamlı · ağaç düzeni.\nKullanım: personel, onay ve atama ekranlarının departman lookup'ı. TreeList düzeninin referansıdır — hiyerarşik liste gerektiğinde bu ekranın TreeOptionJson tanımı alınır.\nAlanlar:\n• BranchId → departmanın bağlı olduğu şube; listenin ilk sütunu\n• Name → departman adı\n• ParentId → üst departman; lookup seçili şubenin departmanlarına süzülür, ağaç bu alan üzerinden kurulur. Kök departmanda boş bırakılır\nAynı veri İK › Organizasyon Şeması (/admin/organization) ekranında şema olarak gösterilir; görevler DepartmentId ile departmanlara bağlanır.\nDikkat: departman taşındığında alt kırılımları da taşınır ve döngüsel üst kayıt tanımına izin verilmez. Personel kaydı taşıyan departmanı silme — pasife al ya da önce kayıtları taşı."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "39ebd174-1eb9-5aa3-8f49-7bc6cda7d0c7",
|
"Id": "fa763478-08b1-5b2c-81fe-8e774de4c334",
|
||||||
"CultureName": "en",
|
"CultureName": "en",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.JobPosition.Description",
|
"Key": "App.Hr.JobPosition.Description",
|
||||||
"Value": "Job Position — position/title definitions. Table: Adm_T_JobPosition · tenant scope · tree layout.\nUsage: the position lookup of personnel records, approval flows and organization charts. It is the reference for the cascade pattern: the position lookup on a screen is filtered by the selected department.\nFields:\n• Name → position name\n• DepartmentId → the department it belongs to; the cascade filter runs over this field\n• ParentId → the position it reports to; the hierarchy of titles is formed over this field\nCaution: the position tree and the department tree are separate hierarchies — a position's parent may live in another department, which is exactly how a matrix organization is expressed. Do not delete a position assigned to a user; move the assignment first."
|
"Value": "Job Position — position/title definitions. Table: Hr_T_JobPosition · tenant scope · tree layout.\nUsage: the position lookup of personnel records, approval flows and organization charts. It is the reference for the cascade pattern: the position lookup on a screen is filtered by the selected department.\nFields:\n• BranchId → the branch the position belongs to; the first column of the list and the filter of the department lookup\n• Name → position name\n• DepartmentId → the department it belongs to; the cascade filter runs over this field\n• ParentId → the position it reports to; the hierarchy of titles is formed over this field\nCaution: the position tree and the department tree are separate hierarchies — a position's parent may live in another department, which is exactly how a matrix organization is expressed. Do not delete a position assigned to a user; move the assignment first."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "9c4bf5d6-9924-58cc-97dd-8952384da556",
|
"Id": "af77b29a-f9a5-5721-ba24-2c3096a9e8bf",
|
||||||
"CultureName": "tr",
|
"CultureName": "tr",
|
||||||
"ResourceName": "Platform",
|
"ResourceName": "Platform",
|
||||||
"Key": "App.Definitions.JobPosition.Description",
|
"Key": "App.Hr.JobPosition.Description",
|
||||||
"Value": "Görev — görev/unvan tanımları. Tablo: Adm_T_JobPosition · tenant kapsamlı · ağaç düzeni.\nKullanım: personel kayıtlarının, onay akışlarının ve organizasyon şemasının görev lookup'ı. Cascade kalıbının referansıdır: ekrandaki görev lookup'ı seçili departmana göre süzülür.\nAlanlar:\n• Name → görev adı\n• DepartmentId → bağlı olduğu departman; cascade filtresi bu alan üzerinden çalışır\n• ParentId → bağlı olduğu üst görev; unvan hiyerarşisi bu alan üzerinden kurulur\nDikkat: görev ağacı ile departman ağacı ayrı hiyerarşilerdir — bir görevin üstü başka departmanda olabilir; matris organizasyon tam olarak böyle ifade edilir. Kullanıcıya atanmış görevi silme; önce atamayı taşı."
|
"Value": "Görev — görev/unvan tanımları. Tablo: Hr_T_JobPosition · tenant kapsamlı · ağaç düzeni.\nKullanım: personel kayıtlarının, onay akışlarının ve organizasyon şemasının görev lookup'ı. Cascade kalıbının referansıdır: ekrandaki görev lookup'ı seçili departmana göre süzülür.\nAlanlar:\n• BranchId → pozisyonun bağlı olduğu şube; listenin ilk sütunu, departman lookup'ını süzer\n• Name → görev adı\n• DepartmentId → bağlı olduğu departman; cascade filtresi bu alan üzerinden çalışır\n• ParentId → bağlı olduğu üst görev; unvan hiyerarşisi bu alan üzerinden kurulur\nDikkat: görev ağacı ile departman ağacı ayrı hiyerarşilerdir — bir görevin üstü başka departmanda olabilir; matris organizasyon tam olarak böyle ifade edilir. Kullanıcıya atanmış görevi silme; önce atamayı taşı."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Id": "ae2c9dc2-9aca-54b2-bca2-d4aeddca73f2",
|
"Id": "ae2c9dc2-9aca-54b2-bca2-d4aeddca73f2",
|
||||||
|
|
|
||||||
|
|
@ -192,39 +192,17 @@
|
||||||
"IsDisabled": false,
|
"IsDisabled": false,
|
||||||
"ModuleId": "Sas"
|
"ModuleId": "Sas"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ParentCode": "App.Saas.Definitions",
|
|
||||||
"Code": "App.Definitions.SkillType",
|
|
||||||
"DisplayName": "App.Definitions.SkillType",
|
|
||||||
"Order": 9,
|
|
||||||
"Url": "/admin/list/App.Definitions.SkillType",
|
|
||||||
"Icon": "FcMindMap",
|
|
||||||
"RequiredPermissionName": "App.Definitions.SkillType",
|
|
||||||
"IsDisabled": false,
|
|
||||||
"ModuleId": "Sas"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ParentCode": "App.Saas.Definitions",
|
"ParentCode": "App.Saas.Definitions",
|
||||||
"Code": "App.Definitions.UomCategory",
|
"Code": "App.Definitions.UomCategory",
|
||||||
"DisplayName": "App.Definitions.UomCategory",
|
"DisplayName": "App.Definitions.UomCategory",
|
||||||
"Order": 10,
|
"Order": 9,
|
||||||
"Url": "/admin/list/App.Definitions.UomCategory",
|
"Url": "/admin/list/App.Definitions.UomCategory",
|
||||||
"Icon": "FcWorkflow",
|
"Icon": "FcWorkflow",
|
||||||
"RequiredPermissionName": "App.Definitions.UomCategory",
|
"RequiredPermissionName": "App.Definitions.UomCategory",
|
||||||
"IsDisabled": false,
|
"IsDisabled": false,
|
||||||
"ModuleId": "Sas"
|
"ModuleId": "Sas"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"ParentCode": "App.Saas.Definitions",
|
|
||||||
"Code": "App.Definitions.Sequence",
|
|
||||||
"DisplayName": "App.Definitions.Sequence",
|
|
||||||
"Order": 11,
|
|
||||||
"Url": "/admin/list/App.Definitions.Sequence",
|
|
||||||
"Icon": "FcNumericalSorting12",
|
|
||||||
"RequiredPermissionName": "App.Definitions.Sequence",
|
|
||||||
"IsDisabled": false,
|
|
||||||
"ModuleId": "Sas"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"ParentCode": "App.Saas",
|
"ParentCode": "App.Saas",
|
||||||
"Code": "App.Public",
|
"Code": "App.Public",
|
||||||
|
|
@ -678,34 +656,12 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ParentCode": "App.Administration.Definitions",
|
"ParentCode": "App.Administration.Definitions",
|
||||||
"Code": "App.Definitions.Department",
|
"Code": "App.Definitions.Sequence",
|
||||||
"DisplayName": "App.Definitions.Department",
|
"DisplayName": "App.Definitions.Sequence",
|
||||||
"Order": 2,
|
"Order": 2,
|
||||||
"Url": "/admin/list/App.Definitions.Department",
|
"Url": "/admin/list/App.Definitions.Sequence",
|
||||||
"Icon": "FcDepartment",
|
"Icon": "FcNumericalSorting12",
|
||||||
"RequiredPermissionName": "App.Definitions.Department",
|
"RequiredPermissionName": "App.Definitions.Sequence",
|
||||||
"IsDisabled": false,
|
|
||||||
"ModuleId": "Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ParentCode": "App.Administration.Definitions",
|
|
||||||
"Code": "App.Definitions.JobPosition",
|
|
||||||
"DisplayName": "App.Definitions.JobPosition",
|
|
||||||
"Order": 3,
|
|
||||||
"Url": "/admin/list/App.Definitions.JobPosition",
|
|
||||||
"Icon": "FcDebt",
|
|
||||||
"RequiredPermissionName": "App.Definitions.JobPosition",
|
|
||||||
"IsDisabled": false,
|
|
||||||
"ModuleId": "Adm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ParentCode": "App.Administration.Definitions",
|
|
||||||
"Code": "App.Definitions.OrgChart",
|
|
||||||
"DisplayName": "App.Definitions.OrgChart",
|
|
||||||
"Order": 4,
|
|
||||||
"Url": "/admin/organization",
|
|
||||||
"Icon": "FaSitemap",
|
|
||||||
"RequiredPermissionName": "App.Definitions.OrgChart",
|
|
||||||
"IsDisabled": false,
|
"IsDisabled": false,
|
||||||
"ModuleId": "Adm"
|
"ModuleId": "Adm"
|
||||||
},
|
},
|
||||||
|
|
@ -1082,6 +1038,72 @@
|
||||||
"RequiredPermissionName": "App.ForumManagement.Publish",
|
"RequiredPermissionName": "App.ForumManagement.Publish",
|
||||||
"IsDisabled": false,
|
"IsDisabled": false,
|
||||||
"ModuleId": "Adm"
|
"ModuleId": "Adm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ParentCode": null,
|
||||||
|
"Code": "App.Hr",
|
||||||
|
"DisplayName": "App.Hr",
|
||||||
|
"Order": 0,
|
||||||
|
"Url": null,
|
||||||
|
"Icon": "FcConferenceCall",
|
||||||
|
"RequiredPermissionName": null,
|
||||||
|
"IsDisabled": false,
|
||||||
|
"ModuleId": "Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ParentCode": "App.Hr",
|
||||||
|
"Code": "App.Hr.Definitions",
|
||||||
|
"DisplayName": "App.Platform.Definitions",
|
||||||
|
"Order": 1,
|
||||||
|
"Url": null,
|
||||||
|
"Icon": "FcFilingCabinet",
|
||||||
|
"RequiredPermissionName": null,
|
||||||
|
"IsDisabled": false,
|
||||||
|
"ModuleId": "Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ParentCode": "App.Hr.Definitions",
|
||||||
|
"Code": "App.Hr.SkillType",
|
||||||
|
"DisplayName": "App.Hr.SkillType",
|
||||||
|
"Order": 1,
|
||||||
|
"Url": "/admin/list/App.Hr.SkillType",
|
||||||
|
"Icon": "FcMindMap",
|
||||||
|
"RequiredPermissionName": "App.Hr.SkillType",
|
||||||
|
"IsDisabled": false,
|
||||||
|
"ModuleId": "Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ParentCode": "App.Hr.Definitions",
|
||||||
|
"Code": "App.Hr.Department",
|
||||||
|
"DisplayName": "App.Hr.Department",
|
||||||
|
"Order": 2,
|
||||||
|
"Url": "/admin/list/App.Hr.Department",
|
||||||
|
"Icon": "FcDepartment",
|
||||||
|
"RequiredPermissionName": "App.Hr.Department",
|
||||||
|
"IsDisabled": false,
|
||||||
|
"ModuleId": "Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ParentCode": "App.Hr.Definitions",
|
||||||
|
"Code": "App.Hr.JobPosition",
|
||||||
|
"DisplayName": "App.Hr.JobPosition",
|
||||||
|
"Order": 3,
|
||||||
|
"Url": "/admin/list/App.Hr.JobPosition",
|
||||||
|
"Icon": "FcDebt",
|
||||||
|
"RequiredPermissionName": "App.Hr.JobPosition",
|
||||||
|
"IsDisabled": false,
|
||||||
|
"ModuleId": "Hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ParentCode": "App.Hr",
|
||||||
|
"Code": "App.Hr.OrgChart",
|
||||||
|
"DisplayName": "App.Hr.OrgChart",
|
||||||
|
"Order": 2,
|
||||||
|
"Url": "/admin/organization",
|
||||||
|
"Icon": "FaSitemap",
|
||||||
|
"RequiredPermissionName": "App.Hr.OrgChart",
|
||||||
|
"IsDisabled": false,
|
||||||
|
"ModuleId": "Hr"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,10 @@
|
||||||
{
|
{
|
||||||
"Id": "Pub",
|
"Id": "Pub",
|
||||||
"Name": "Pub"
|
"Name": "Pub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": "Hr",
|
||||||
|
"Name": "Hr"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -562,7 +562,7 @@
|
||||||
"ComponentType": "normal",
|
"ComponentType": "normal",
|
||||||
"ComponentPath": "@/views/admin/hr/OrgChart",
|
"ComponentPath": "@/views/admin/hr/OrgChart",
|
||||||
"RouteType": "protected",
|
"RouteType": "protected",
|
||||||
"Authority": "App.Definitions.Department",
|
"Authority": "App.Hr.OrgChart",
|
||||||
"SeoTitle": null,
|
"SeoTitle": null,
|
||||||
"SeoDescription": null,
|
"SeoDescription": null,
|
||||||
"SeoKeywords": null,
|
"SeoKeywords": null,
|
||||||
|
|
|
||||||
|
|
@ -876,7 +876,7 @@ const OrgChart = () => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<PageTitle title={translate('::App.Definitions.OrgChart')} />
|
<PageTitle title={translate('::App.Hr.OrgChart')} />
|
||||||
|
|
||||||
<div className="flex flex-col h-full">
|
<div className="flex flex-col h-full">
|
||||||
{/* Toolbar */}
|
{/* Toolbar */}
|
||||||
|
|
@ -884,7 +884,7 @@ const OrgChart = () => {
|
||||||
<div className="flex items-center gap-3 min-w-0">
|
<div className="flex items-center gap-3 min-w-0">
|
||||||
{MenuIcon}
|
{MenuIcon}
|
||||||
<h4 className="text-sm font-medium truncate text-gray-900 dark:text-white">
|
<h4 className="text-sm font-medium truncate text-gray-900 dark:text-white">
|
||||||
{translate('::App.Definitions.OrgChart')}
|
{translate('::App.Hr.OrgChart')}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -902,7 +902,7 @@ const OrgChart = () => {
|
||||||
}`}
|
}`}
|
||||||
onClick={() => setMode('department')}
|
onClick={() => setMode('department')}
|
||||||
>
|
>
|
||||||
<span className="hidden sm:inline">{translate('::App.Definitions.Department')}</span>
|
<span className="hidden sm:inline">{translate('::App.Hr.Department')}</span>
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
variant="plain"
|
variant="plain"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue