From ba78863509dc2ddde7539b425ea097036b0f11bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96zt=C3=BCrk?= Date: Fri, 28 Nov 2025 00:00:02 +0300 Subject: [PATCH] Project Tasks --- .../LookUpQueryValues.cs | 31 +- .../Seeds/LanguagesData.json | 48 +- .../Seeds/ListFormSeeder_Hr.cs | 26 +- .../Seeds/ListFormSeeder_Project.cs | 765 +++++++++++++++--- .../Seeds/MenusData.json | 56 +- .../Seeds/PermissionsData.json | 218 +++-- .../Seeds/SeederUtils.cs | 6 + .../Enums/ListFormTabTypeEnum.cs | 1 + .../Enums/TableNameEnum.cs | 11 +- .../TableNameResolver.cs | 15 +- .../Erp.Platform.Domain/Data/SeedConsts.cs | 7 +- .../{ProjectCategory.cs => Category.cs} | 2 +- .../Entities/Tenant/Project/Project.cs | 12 +- .../Entities/Tenant/Project/ProjectPhase.cs | 6 +- .../Entities/Tenant/Project/ProjectRisk.cs | 10 +- .../Entities/Tenant/Project/ProjectTask.cs | 36 + .../Entities/Tenant/Project/ProjectTeam.cs | 19 + .../Entities/Tenant/Project/Risk.cs | 19 + .../Project/{ProjectTaskType.cs => Status.cs} | 4 +- .../Project/{ProjectType.cs => TaskType.cs} | 2 +- .../Project/{ProjectStatus.cs => Type.cs} | 2 +- .../EntityFrameworkCore/PlatformDbContext.cs | 137 +++- ....cs => 20251127201919_Initial.Designer.cs} | 702 +++++++++++----- ...0_Initial.cs => 20251127201919_Initial.cs} | 302 +++++-- .../PlatformDbContextModelSnapshot.cs | 700 +++++++++++----- .../Tenants/Seeds/TenantData.json | 89 +- .../Tenants/TenantDataSeeder.cs | 76 +- .../Tenants/TenantSeederDto.cs | 24 +- ui/src/proxy/form/models.ts | 1 + ui/src/views/admin/listForm/edit/options.ts | 1 + ui/src/views/form/SubForms.tsx | 10 + ui/src/views/intranet/Dashboard.tsx | 9 +- 32 files changed, 2597 insertions(+), 750 deletions(-) rename api/src/Erp.Platform.Domain/Entities/Tenant/Project/{ProjectCategory.cs => Category.cs} (84%) create mode 100644 api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTask.cs create mode 100644 api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTeam.cs create mode 100644 api/src/Erp.Platform.Domain/Entities/Tenant/Project/Risk.cs rename api/src/Erp.Platform.Domain/Entities/Tenant/Project/{ProjectTaskType.cs => Status.cs} (66%) rename api/src/Erp.Platform.Domain/Entities/Tenant/Project/{ProjectType.cs => TaskType.cs} (85%) rename api/src/Erp.Platform.Domain/Entities/Tenant/Project/{ProjectStatus.cs => Type.cs} (84%) rename api/src/Erp.Platform.EntityFrameworkCore/Migrations/{20251127112310_Initial.Designer.cs => 20251127201919_Initial.Designer.cs} (98%) rename api/src/Erp.Platform.EntityFrameworkCore/Migrations/{20251127112310_Initial.cs => 20251127201919_Initial.cs} (97%) diff --git a/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs b/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs index e13fa396..df44723e 100644 --- a/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs +++ b/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs @@ -27,6 +27,31 @@ public static class LookupQueryValues $"ORDER BY \"{DisplayExpr}\";" }); + public static string DefaultLookupQuery( + string TableName, + string ValueExpr, + string DisplayExpr, + bool isTable = true, + bool isDeleted = false) + { + return $"SELECT " + + $"\"{ValueExpr}\" AS \"Key\", " + + $"\"{DisplayExpr}\" AS \"Name\" " + + $"FROM \"{(isTable ? TableNameResolver.GetFullTableName($"{TableName}") : TableNameResolver.GetFullViewName($"{TableName}"))}\" " + + (!isDeleted ? "" : $"WHERE \"IsDeleted\" = 'false'") + + $"ORDER BY \"{DisplayExpr}\";"; + } + + public static string ProjectPhaseValues = + $"SELECT " + + $"\"Id\" AS \"Key\", " + + $"\"Name\" AS \"Name\" " + + $"FROM \"{FullNameTable(TableNameEnum.ProjectPhase)}\" " + + $"WHERE " + + $"(\"ProjectId\" = @param0 OR @param0 IS NULL) " + + $"AND \"IsDeleted\" = 'false' " + + $"ORDER BY \"Name\";"; + public static string TechnicalSkillsValues = $"SELECT " + $"\"Name\" AS \"Key\", " + @@ -210,7 +235,7 @@ public static class LookupQueryValues $"\"DisplayName\" AS \"Name\" " + $"FROM \"AbpOrganizationUnits\"" + $"WHERE \"Code\" LIKE '00001%' " + - $"ORDER BY \"DisplayName\""; + $"ORDER BY \"DisplayName\""; public static string WarehouseValues = $"SELECT " + @@ -218,7 +243,7 @@ public static class LookupQueryValues $"\"Name\" AS \"Name\" " + $"FROM \"{FullNameTable(TableNameEnum.Warehouse)}\" " + $"WHERE \"IsDeleted\" = 'false' " + - $"ORDER BY \"Name\";"; + $"ORDER BY \"Name\";"; public static string ZoneValues = $"SELECT " + @@ -239,5 +264,5 @@ public static class LookupQueryValues $"(\"WarehouseId\" = @param0 OR @param0 IS NULL) " + $"AND (\"ZoneId\" = @param1 OR @param1 IS NULL) " + $"AND \"IsDeleted\" = 'false' " + - $"ORDER BY \"Name\";"; + $"ORDER BY \"Name\";"; } diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json b/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json index 4e83480a..32003392 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json +++ b/api/src/Erp.Platform.DbMigrator/Seeds/LanguagesData.json @@ -9577,29 +9577,41 @@ "tr": "Stok Hareketleri", "en": "Stock Movements" }, + { + "resourceName": "Platform", + "key": "App.Project.Definitions", + "tr": "Tanımlamalar", + "en": "Definitions" + }, { "resourceName": "Platform", "key": "App.Project.Type", - "tr": "Proje Türleri", - "en": "Project Types" + "tr": "Türler", + "en": "Types" }, { "resourceName": "Platform", "key": "App.Project.Status", - "tr": "Proje Durumları", - "en": "Project Statuses" + "tr": "Durumlar", + "en": "Statuses" }, { "resourceName": "Platform", "key": "App.Project.Category", - "tr": "Proje Kategorileri", - "en": "Project Categories" + "tr": "Kategoriler", + "en": "Categories" }, { "resourceName": "Platform", "key": "App.Project.Risk", - "tr": "Proje Riskleri", - "en": "Project Risks" + "tr": "Riskler", + "en": "Risks" + }, + { + "resourceName": "Platform", + "key": "App.Project.TaskType", + "tr": "Görev Türleri", + "en": "Task Types" }, { "resourceName": "Platform", @@ -9609,15 +9621,27 @@ }, { "resourceName": "Platform", - "key": "App.Project.Phase", + "key": "App.Project.ProjectPhase", "tr": "Aşamalar", "en": "Phases" }, { "resourceName": "Platform", - "key": "App.Project.TaskType", - "tr": "Görev Türleri", - "en": "Task Types" + "key": "App.Project.ProjectTask", + "tr": "Görevler", + "en": "Tasks" + }, + { + "resourceName": "Platform", + "key": "App.Project.ProjectRisk", + "tr": "Proje Riskleri", + "en": "Project Risks" + }, + { + "resourceName": "Platform", + "key": "App.Project.ProjectTeam", + "tr": "Proje Ekipleri", + "en": "Project Teams" }, { "resourceName": "Platform", diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs index 3024f3b3..8f0baa4e 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Hr.cs @@ -1316,8 +1316,9 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 8, DataField = "BaseSalary", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxNumberBox, EditorOptions = EditorOptionValues.NumberStandartFormat }, new EditingFormItemDto { Order = 9, DataField = "Currency", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 10, DataField = "PayrollGroup", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 11, DataField = "BankAccountId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, - new EditingFormItemDto { Order = 12, DataField = "BadgeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 11, DataField = "BankId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, + new EditingFormItemDto { Order = 12, DataField = "IbanNumber", ColSpan = 1, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 13, DataField = "BadgeId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, ]}, new() { Order=4, Caption="Emergency", ColCount=1, ColSpan=1, ItemType="group", Items =[ @@ -1937,14 +1938,29 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, SourceDbType = DbType.Guid, - FieldName = "BankAccountId", + FieldName = "BankId", Width = 100, ListOrderNo = 33, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, - LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.BankAccount), "Id", "AccountNumber"), + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Bank), "Id", "Name"), + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "IbanNumber", + Width = 100, + ListOrderNo = 34, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), PivotSettingsJson = DefaultPivotSettingsJson @@ -1955,7 +1971,7 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency SourceDbType = DbType.Guid, FieldName = "BadgeId", Width = 100, - ListOrderNo = 34, + ListOrderNo = 35, Visible = true, IsActive = true, IsDeleted = false, diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Project.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Project.cs index 2157ded0..50b126a1 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Project.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Project.cs @@ -43,9 +43,10 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency public async Task SeedAsync(DataSeedContext context) { + var utils = new SeederUtils(_listFormRepository, _listFormFieldRepository); var listFormName = String.Empty; - #region Project Type + #region Type listFormName = AppCodes.Project.Type; if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) { @@ -66,7 +67,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency IsOrganizationUnit = false, Description = listFormName, SelectCommandType = SelectCommandTypeEnum.Table, - SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectType)), + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Type)), KeyFieldName = "Id", KeyFieldDbSourceType = DbType.Guid, DefaultFilter = DefaultFilterJson, @@ -78,7 +79,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency SelectionJson = DefaultSelectionSingleJson, ColumnOptionJson = DefaultColumnOptionJson, PermissionJson = DefaultPermissionJson(listFormName), - DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.ProjectType)), + DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Type)), DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, PagerOptionJson = DefaultPagerOptionJson, EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 300, true, true, true, true, false), @@ -168,7 +169,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency } #endregion - #region Project Status + #region Status listFormName = AppCodes.Project.Status; if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) { @@ -189,7 +190,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency IsOrganizationUnit = false, Description = listFormName, SelectCommandType = SelectCommandTypeEnum.Table, - SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectStatus)), + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Status)), KeyFieldName = "Id", KeyFieldDbSourceType = DbType.Guid, DefaultFilter = DefaultFilterJson, @@ -201,7 +202,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency SelectionJson = DefaultSelectionSingleJson, ColumnOptionJson = DefaultColumnOptionJson, PermissionJson = DefaultPermissionJson(listFormName), - DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.ProjectStatus)), + DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.Status)), DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, PagerOptionJson = DefaultPagerOptionJson, EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 300, true, true, true, true, false), @@ -291,6 +292,375 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency } #endregion + #region Risk + listFormName = AppCodes.Project.Risk; + if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) + { + var listForm = await _listFormRepository.InsertAsync( + new ListForm() + { + ListFormType = ListFormTypeEnum.List, + IsSubForm = false, + ShowNote = true, + LayoutJson = DefaultLayoutJson, + CultureName = LanguageCodes.En, + ListFormCode = listFormName, + Name = listFormName, + Title = listFormName, + DataSourceCode = SeedConsts.DataSources.DefaultCode, + IsTenant = true, + IsBranch = false, + IsOrganizationUnit = false, + Description = listFormName, + SelectCommandType = SelectCommandTypeEnum.Table, + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Risk)), + 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.Risk)), + DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, + PagerOptionJson = DefaultPagerOptionJson, + EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 300, true, true, true, true, false), + InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, + EditingFormJson = JsonSerializer.Serialize(new List() + { + new() { + Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ + new EditingFormItemDto { Order = 1, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 2, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 3, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, + ]} + }), + FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } + }), + } + ); + + #region Project Type Fields + await _listFormFieldRepository.InsertManyAsync([ + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "Id", + Width = 100, + ListOrderNo = 1, + Visible = false, + IsActive = true, + IsDeleted = false, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Name", + Width = 300, + ListOrderNo = 2, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + SortIndex = 1, + SortDirection = GridColumnOptions.SortOrderAsc, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Description", + Width = 500, + ListOrderNo = 3, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Boolean, + FieldName = "IsActive", + Width = 100, + ListOrderNo = 4, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + ]); + #endregion + } + #endregion + + #region Category + listFormName = AppCodes.Project.Category; + if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) + { + var listForm = await _listFormRepository.InsertAsync( + new ListForm() + { + ListFormType = ListFormTypeEnum.List, + IsSubForm = false, + ShowNote = true, + LayoutJson = DefaultLayoutJson, + CultureName = LanguageCodes.En, + ListFormCode = listFormName, + Name = listFormName, + Title = listFormName, + DataSourceCode = SeedConsts.DataSources.DefaultCode, + IsTenant = true, + IsBranch = false, + IsOrganizationUnit = false, + Description = listFormName, + SelectCommandType = SelectCommandTypeEnum.Table, + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.Category)), + 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.Category)), + DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, + PagerOptionJson = DefaultPagerOptionJson, + EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 300, true, true, true, true, false), + InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, + EditingFormJson = JsonSerializer.Serialize(new List() + { + new() { + Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ + new EditingFormItemDto { Order = 1, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 2, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 3, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, + ]} + }), + FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } + }), + } + ); + + #region Project Category Fields + await _listFormFieldRepository.InsertManyAsync([ + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "Id", + Width = 100, + ListOrderNo = 1, + Visible = false, + IsActive = true, + IsDeleted = false, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Name", + Width = 300, + ListOrderNo = 2, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + SortIndex = 1, + SortDirection = GridColumnOptions.SortOrderAsc, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Description", + Width = 500, + ListOrderNo = 3, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Boolean, + FieldName = "IsActive", + Width = 100, + ListOrderNo = 4, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + ]); + #endregion + } + #endregion + + #region Task Type + listFormName = AppCodes.Project.TaskType; + if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) + { + var listForm = await _listFormRepository.InsertAsync( + new ListForm() + { + ListFormType = ListFormTypeEnum.List, + IsSubForm = false, + ShowNote = true, + LayoutJson = DefaultLayoutJson, + CultureName = LanguageCodes.En, + ListFormCode = listFormName, + Name = listFormName, + Title = listFormName, + DataSourceCode = SeedConsts.DataSources.DefaultCode, + IsTenant = true, + IsBranch = false, + IsOrganizationUnit = false, + Description = listFormName, + SelectCommandType = SelectCommandTypeEnum.Table, + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.TaskType)), + 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.TaskType)), + DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, + PagerOptionJson = DefaultPagerOptionJson, + EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 300, true, true, true, true, false), + InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, + EditingFormJson = JsonSerializer.Serialize(new List() + { + new() { + Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ + new EditingFormItemDto { Order = 1, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 2, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, + new EditingFormItemDto { Order = 3, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, + ]} + }), + FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } + }), + } + ); + + #region Project Task Type Fields + await _listFormFieldRepository.InsertManyAsync([ + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "Id", + Width = 100, + ListOrderNo = 1, + Visible = false, + IsActive = true, + IsDeleted = false, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Name", + Width = 300, + ListOrderNo = 2, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + SortIndex = 1, + SortDirection = GridColumnOptions.SortOrderAsc, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Description", + Width = 500, + ListOrderNo = 3, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Boolean, + FieldName = "IsActive", + Width = 100, + ListOrderNo = 4, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + ]); + #endregion + } + #endregion + #region Projects listFormName = AppCodes.Project.Projects; if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) @@ -370,6 +740,16 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency new() { FieldName = "ActualCost", FieldDbType = DbType.Decimal, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } }), + CommandColumnJson = JsonSerializer.Serialize(new CommandColumnDto[] { + new() { + Hint = "Manage", + Text = "Manage", + UrlTarget = "_blank", + AuthName = listFormName, + Url = $"/admin/form/{SeederUtils.GetDefaultFormCodes(listFormName)}/@Id", + IsVisible = true, + }, + }), } ); @@ -435,7 +815,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency IsActive = true, IsDeleted = false, AllowSearch = true, - LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.ProjectType), "Id", "Name"), + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Type), "Id", "Name"), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -452,7 +832,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency IsActive = true, IsDeleted = false, AllowSearch = true, - LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.ProjectStatus), "Id", "Name"), + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Status), "Id", "Name"), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -688,16 +1068,16 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency #endregion } #endregion - + #region Project Risk - listFormName = AppCodes.Project.Risk; + listFormName = AppCodes.Project.ProjectRisk; if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) { var listForm = await _listFormRepository.InsertAsync( new ListForm() { ListFormType = ListFormTypeEnum.List, - IsSubForm = false, + IsSubForm = true, ShowNote = true, LayoutJson = DefaultLayoutJson, CultureName = LanguageCodes.En, @@ -731,18 +1111,13 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ - new EditingFormItemDto { Order = 1, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 3, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 1, DataField="RiskId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, ]} }), - FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } - }), - } + }, autoSave: true ); - #region Project Type Fields + #region Project Risk Fields await _listFormFieldRepository.InsertManyAsync([ new() { ListFormCode = listForm.ListFormCode, @@ -762,65 +1137,34 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency new() { ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, - SourceDbType = DbType.String, - FieldName = "Name", + SourceDbType = DbType.Guid, + FieldName = "RiskId", Width = 300, ListOrderNo = 2, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, - SortIndex = 1, - SortDirection = GridColumnOptions.SortOrderAsc, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Risk), "Id", "Name"), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), PivotSettingsJson = DefaultPivotSettingsJson }, - new() { - ListFormCode = listForm.ListFormCode, - CultureName = LanguageCodes.En, - SourceDbType = DbType.String, - FieldName = "Description", - Width = 500, - ListOrderNo = 3, - Visible = true, - IsActive = true, - IsDeleted = false, - AllowSearch = true, - ColumnCustomizationJson = DefaultColumnCustomizationJson, - PermissionJson = DefaultFieldPermissionJson(listForm.Name), - PivotSettingsJson = DefaultPivotSettingsJson - }, - new() { - ListFormCode = listForm.ListFormCode, - CultureName = LanguageCodes.En, - SourceDbType = DbType.Boolean, - FieldName = "IsActive", - Width = 100, - ListOrderNo = 4, - Visible = true, - IsActive = true, - IsDeleted = false, - AllowSearch = true, - ColumnCustomizationJson = DefaultColumnCustomizationJson, - PermissionJson = DefaultFieldPermissionJson(listForm.Name), - PivotSettingsJson = DefaultPivotSettingsJson - }, - ]); + ], autoSave: true); #endregion } #endregion - - #region Project Category - listFormName = AppCodes.Project.Category; + + #region Project Team + listFormName = AppCodes.Project.ProjectTeam; if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) { var listForm = await _listFormRepository.InsertAsync( new ListForm() { - ListFormType = ListFormTypeEnum.List, - IsSubForm = false, + ListFormType = ListFormTypeEnum.Tree, + IsSubForm = true, ShowNote = true, LayoutJson = DefaultLayoutJson, CultureName = LanguageCodes.En, @@ -833,7 +1177,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency IsOrganizationUnit = false, Description = listFormName, SelectCommandType = SelectCommandTypeEnum.Table, - SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectCategory)), + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectTeam)), KeyFieldName = "Id", KeyFieldDbSourceType = DbType.Guid, DefaultFilter = DefaultFilterJson, @@ -845,27 +1189,24 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency SelectionJson = DefaultSelectionSingleJson, ColumnOptionJson = DefaultColumnOptionJson, PermissionJson = DefaultPermissionJson(listFormName), - DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.ProjectCategory)), + DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.ProjectTeam)), DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, PagerOptionJson = DefaultPagerOptionJson, - EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 300, true, true, true, true, false), + EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 200, true, true, true, true, false), InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, + TreeOptionJson = DefaultTreeOptionJson("EmployeeId", "ManagerId", true), EditingFormJson = JsonSerializer.Serialize(new List() { new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ - new EditingFormItemDto { Order = 1, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 3, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 1, DataField="EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField="ManagerId", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox }, ]} }), - FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { - new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } - }), - } + }, autoSave: true ); - #region Project Category Fields + #region Project Team Fields await _listFormFieldRepository.InsertManyAsync([ new() { ListFormCode = listForm.ListFormCode, @@ -885,16 +1226,15 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency new() { ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, - SourceDbType = DbType.String, - FieldName = "Name", - Width = 300, + SourceDbType = DbType.Guid, + FieldName = "EmployeeId", + Width = 200, ListOrderNo = 2, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, - SortIndex = 1, - SortDirection = GridColumnOptions.SortOrderAsc, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Employee), "Id", "FullName"), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -903,40 +1243,57 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency new() { ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, - SourceDbType = DbType.String, - FieldName = "Description", - Width = 500, + SourceDbType = DbType.Guid, + FieldName = "ManagerId", + Width = 200, ListOrderNo = 3, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Employee), "Id", "FullName"), ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), PivotSettingsJson = DefaultPivotSettingsJson }, - new() { - ListFormCode = listForm.ListFormCode, - CultureName = LanguageCodes.En, - SourceDbType = DbType.Boolean, - FieldName = "IsActive", - Width = 100, - ListOrderNo = 4, - Visible = true, - IsActive = true, - IsDeleted = false, - AllowSearch = true, - ColumnCustomizationJson = DefaultColumnCustomizationJson, - PermissionJson = DefaultFieldPermissionJson(listForm.Name), - PivotSettingsJson = DefaultPivotSettingsJson - }, - ]); + ], autoSave: true); #endregion } #endregion - + + // Project ile Risk ve Team Sub Forms ilişkisinin kurulması + await utils.CloneFormLayoutAsync( + AppCodes.Project.Projects, + JsonSerializer.Serialize(new List() { + new { + TabType = ListFormTabTypeEnum.List, + TabTitle = AppCodes.Project.ProjectRisk, + Code = AppCodes.Project.ProjectRisk, + Relation = new List() { + new { + ParentFieldName = "Id", + DbType = DbType.Guid, + ChildFieldName = "ProjectId" + } + } + }, + new { + TabType = ListFormTabTypeEnum.Tree, + TabTitle = AppCodes.Project.ProjectTeam, + Code = AppCodes.Project.ProjectTeam, + Relation = new List() { + new { + ParentFieldName = "Id", + DbType = DbType.Guid, + ChildFieldName = "ProjectId" + } + } + } + }) + ); + #region Project Phase - listFormName = AppCodes.Project.Phase; + listFormName = AppCodes.Project.ProjectPhase; if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) { var listForm = await _listFormRepository.InsertAsync( @@ -978,7 +1335,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency new() { Order=1, ColCount=2, ColSpan=1, ItemType="group", Items =[ new EditingFormItemDto { Order = 1, DataField="ProjectId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, - new EditingFormItemDto { Order = 2, DataField="ProjectCategoryId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField="CategoryId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, new EditingFormItemDto { Order = 3, DataField="Code", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 4, DataField="Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 5, DataField="Description", ColSpan = 2, EditorType2 = EditorTypes.dxTextArea }, @@ -1003,7 +1360,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency new() { FieldName = "Progress", FieldDbType = DbType.Int32, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } }), - } + }, autoSave: true ); #region Project Phase Fields @@ -1044,14 +1401,14 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, SourceDbType = DbType.Guid, - FieldName = "ProjectCategoryId", + FieldName = "CategoryId", Width = 100, ListOrderNo = 3, Visible = true, IsActive = true, IsDeleted = false, AllowSearch = true, - LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.ProjectCategory), "Id", "Name"), + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Category), "Id", "Name"), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -1117,7 +1474,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency IsActive = true, IsDeleted = false, AllowSearch = true, - LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.ProjectStatus), "Id", "Name"), + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Status), "Id", "Name"), ValidationRuleJson = DefaultValidationRuleRequiredJson, ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), @@ -1262,7 +1619,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency IsActive = true, IsDeleted = false, AllowSearch = true, - LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.ProjectRisk), "Id", "Name"), + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Risk), "Id", "Name"), ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), PivotSettingsJson = DefaultPivotSettingsJson @@ -1286,9 +1643,9 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency #endregion } #endregion - - #region Project Task Type - listFormName = AppCodes.Project.TaskType; + + #region Project Task + listFormName = AppCodes.Project.ProjectTask; if (!await _listFormRepository.AnyAsync(a => a.ListFormCode == listFormName)) { var listForm = await _listFormRepository.InsertAsync( @@ -1308,7 +1665,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency IsOrganizationUnit = false, Description = listFormName, SelectCommandType = SelectCommandTypeEnum.Table, - SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectTaskType)), + SelectCommand = TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectTask)), KeyFieldName = "Id", KeyFieldDbSourceType = DbType.Guid, DefaultFilter = DefaultFilterJson, @@ -1320,27 +1677,37 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency SelectionJson = DefaultSelectionSingleJson, ColumnOptionJson = DefaultColumnOptionJson, PermissionJson = DefaultPermissionJson(listFormName), - DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.ProjectTaskType)), + DeleteCommand = DefaultDeleteCommand(nameof(TableNameEnum.ProjectTask)), DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson, PagerOptionJson = DefaultPagerOptionJson, - EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 300, true, true, true, true, false), + EditingOptionJson = DefaultEditingOptionJson(listFormName, 800, 400, true, true, true, true, false), InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson, EditingFormJson = JsonSerializer.Serialize(new List() { new() { - Order=1, ColCount=1, ColSpan=1, ItemType="group", Items =[ - new EditingFormItemDto { Order = 1, DataField="Name", ColSpan = 1, IsRequired =true, EditorType2 = EditorTypes.dxTextBox }, - new EditingFormItemDto { Order = 2, DataField="Description", ColSpan = 1, EditorType2 = EditorTypes.dxTextArea }, - new EditingFormItemDto { Order = 3, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, + Order=1, ColCount=2, ColSpan=1, ItemType="group", Items =[ + new EditingFormItemDto { Order = 1, DataField="ProjectId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 2, DataField="PhaseId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 3, DataField="Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 4, DataField="Priority", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 5, DataField="StatusId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 6, DataField="EmployeeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox }, + new EditingFormItemDto { Order = 7, DataField="StartDate", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox, EditorOptions = EditorOptionValues.DateTimeFormat }, + new EditingFormItemDto { Order = 8, DataField="EndDate", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxDateBox, EditorOptions = EditorOptionValues.DateTimeFormat }, + new EditingFormItemDto { Order = 9, DataField="Progress", ColSpan = 1, EditorType2 = EditorTypes.dxSlider }, + new EditingFormItemDto { Order = 10, DataField="IsActive", ColSpan = 1, EditorType2 = EditorTypes.dxCheckBox }, + new EditingFormItemDto { Order = 11, DataField="Description", ColSpan = 2, EditorType2 = EditorTypes.dxTextArea }, ]} }), FormFieldsDefaultValueJson = JsonSerializer.Serialize(new FieldsDefaultValue[] { + new() { FieldName = "StartDate", FieldDbType = DbType.Date, Value = "@DATE", CustomValueType = FieldCustomValueTypeEnum.CustomKey }, + new() { FieldName = "Progress", FieldDbType = DbType.Int32, Value = "0", CustomValueType = FieldCustomValueTypeEnum.Value }, new() { FieldName = "IsActive", FieldDbType = DbType.Boolean, Value = "true", CustomValueType = FieldCustomValueTypeEnum.Value } }), - } + }, autoSave: true ); - #region Project Task Type Fields + #region Project Task Fields await _listFormFieldRepository.InsertManyAsync([ new() { ListFormCode = listForm.ListFormCode, @@ -1357,13 +1724,63 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency PermissionJson = DefaultFieldPermissionJson(listForm.Name), PivotSettingsJson = DefaultPivotSettingsJson }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "ProjectId", + Width = 200, + ListOrderNo = 2, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "Name", + ValueExpr = "Key", + LookupQuery = LookupQueryValues.DefaultLookupQuery(nameof(TableNameEnum.Projects), "Id", "Name"), + CascadeEmptyFields = "PhaseId" + }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "PhaseId", + Width = 200, + ListOrderNo = 3, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "Name", + ValueExpr = "Key", + LookupQuery = LookupQueryValues.ProjectPhaseValues, + CascadeRelationField = "ProjectId", + CascadeFilterOperator="=", + CascadeParentFields = "ProjectId" + }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, new() { ListFormCode = listForm.ListFormCode, CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Name", - Width = 300, - ListOrderNo = 2, + Width = 200, + ListOrderNo = 4, Visible = true, IsActive = true, IsDeleted = false, @@ -1380,8 +1797,117 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency CultureName = LanguageCodes.En, SourceDbType = DbType.String, FieldName = "Description", - Width = 500, - ListOrderNo = 3, + Width = 400, + ListOrderNo = 5, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.String, + FieldName = "Priority", + Width = 100, + ListOrderNo = 6, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto + { + DataSourceType = UiLookupDataSourceTypeEnum.StaticData, + DisplayExpr = "name", + ValueExpr = "key", + LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] { + new () { Key = "Low", Name = "Low" }, + new () { Key = "Medium", Name = "Medium" }, + new () { Key = "High", Name = "High" }, + new () { Key = "Urgent", Name = "Urgent" }, + }), + }), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "StatusId", + Width = 100, + ListOrderNo = 7, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Status), "Id", "Name"), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Guid, + FieldName = "EmployeeId", + Width = 100, + ListOrderNo = 8, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + LookupJson = LookupQueryValues.DefaultLookupQueryJson(nameof(TableNameEnum.Employee), "Id", "FullName"), + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "StartDate", + Width = 150, + ListOrderNo = 9, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.DateTime, + FieldName = "EndDate", + Width = 150, + ListOrderNo = 10, + Visible = true, + IsActive = true, + IsDeleted = false, + AllowSearch = true, + ValidationRuleJson = DefaultValidationRuleRequiredJson, + ColumnCustomizationJson = DefaultColumnCustomizationJson, + PermissionJson = DefaultFieldPermissionJson(listForm.Name), + PivotSettingsJson = DefaultPivotSettingsJson + }, + new() { + ListFormCode = listForm.ListFormCode, + CultureName = LanguageCodes.En, + SourceDbType = DbType.Int32, + FieldName = "Progress", + Width = 100, + ListOrderNo = 11, Visible = true, IsActive = true, IsDeleted = false, @@ -1396,7 +1922,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency SourceDbType = DbType.Boolean, FieldName = "IsActive", Width = 100, - ListOrderNo = 4, + ListOrderNo = 12, Visible = true, IsActive = true, IsDeleted = false, @@ -1409,6 +1935,7 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency #endregion } #endregion + } } diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/MenusData.json b/api/src/Erp.Platform.DbMigrator/Seeds/MenusData.json index b944c663..c542cf75 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/MenusData.json +++ b/api/src/Erp.Platform.DbMigrator/Seeds/MenusData.json @@ -2576,6 +2576,16 @@ }, { "ParentCode": "App.Project", + "Code": "App.Project.Definitions", + "DisplayName": "App.Project.Definitions", + "Order": 1, + "Url": null, + "Icon": "FcFilingCabinet", + "RequiredPermissionName": null, + "IsDisabled": false + }, + { + "ParentCode": "App.Project.Definitions", "Code": "App.Project.Type", "DisplayName": "App.Project.Type", "Order": 1, @@ -2585,7 +2595,7 @@ "IsDisabled": false }, { - "ParentCode": "App.Project", + "ParentCode": "App.Project.Definitions", "Code": "App.Project.Status", "DisplayName": "App.Project.Status", "Order": 2, @@ -2595,7 +2605,7 @@ "IsDisabled": false }, { - "ParentCode": "App.Project", + "ParentCode": "App.Project.Definitions", "Code": "App.Project.Category", "DisplayName": "App.Project.Category", "Order": 3, @@ -2605,7 +2615,7 @@ "IsDisabled": false }, { - "ParentCode": "App.Project", + "ParentCode": "App.Project.Definitions", "Code": "App.Project.Risk", "DisplayName": "App.Project.Risk", "Order": 4, @@ -2615,7 +2625,7 @@ "IsDisabled": false }, { - "ParentCode": "App.Project", + "ParentCode": "App.Project.Definitions", "Code": "App.Project.TaskType", "DisplayName": "App.Project.TaskType", "Order": 5, @@ -2628,7 +2638,7 @@ "ParentCode": "App.Project", "Code": "App.Project.Projects", "DisplayName": "App.Project.Projects", - "Order": 6, + "Order": 3, "Url": "/admin/list/App.Project.Projects", "Icon": "FcTodoList", "RequiredPermissionName": "App.Project.Projects", @@ -2636,39 +2646,29 @@ }, { "ParentCode": "App.Project", - "Code": "App.Project.Phase", - "DisplayName": "App.Project.Phase", - "Order": 7, - "Url": "/admin/list/App.Project.Phase", + "Code": "App.Project.ProjectPhase", + "DisplayName": "App.Project.ProjectPhase", + "Order": 4, + "Url": "/admin/list/App.Project.ProjectPhase", "Icon": "FcProcess", - "RequiredPermissionName": "App.Project.Phase", + "RequiredPermissionName": "App.Project.ProjectPhase", "IsDisabled": false }, { "ParentCode": "App.Project", - "Code": "App.Project.Task", - "DisplayName": "App.Project.Task", - "Order": 8, - "Url": "/admin/projects/tasks", + "Code": "App.Project.ProjectTask", + "DisplayName": "App.Project.ProjectTask", + "Order": 5, + "Url": "/admin/list/App.Project.ProjectTask", "Icon": "FcInspection", - "RequiredPermissionName": "App.Project.Task", - "IsDisabled": false - }, - { - "ParentCode": "App.Project", - "Code": "App.Project.Activity", - "DisplayName": "App.Project.Activity", - "Order": 9, - "Url": "/admin/projects/activities", - "Icon": "FcServices", - "RequiredPermissionName": "App.Project.Activity", + "RequiredPermissionName": "App.Project.ProjectTask", "IsDisabled": false }, { "ParentCode": "App.Project", "Code": "App.Project.Workload", "DisplayName": "App.Project.Workload", - "Order": 10, + "Order": 7, "Url": "/admin/projects/workload", "Icon": "FcComboChart", "RequiredPermissionName": "App.Project.Workload", @@ -2678,7 +2678,7 @@ "ParentCode": "App.Project", "Code": "App.Project.CostTracking", "DisplayName": "App.Project.CostTracking", - "Order": 11, + "Order": 8, "Url": "/admin/projects/cost-tracking", "Icon": "FcMoneyTransfer", "RequiredPermissionName": "App.Project.CostTracking", @@ -2688,7 +2688,7 @@ "ParentCode": "App.Project", "Code": "App.Project.DailyUpdates", "DisplayName": "App.Project.DailyUpdates", - "Order": 12, + "Order": 9, "Url": "/admin/projects/daily-updates", "Icon": "FcConferenceCall", "RequiredPermissionName": "App.Project.DailyUpdates", diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/PermissionsData.json b/api/src/Erp.Platform.DbMigrator/Seeds/PermissionsData.json index 839bf2f4..0bbb5426 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/PermissionsData.json +++ b/api/src/Erp.Platform.DbMigrator/Seeds/PermissionsData.json @@ -8268,6 +8268,69 @@ "MultiTenancySide": 3, "MenuGroup": "Erp" }, + { + "GroupName": "App.Project", + "Name": "App.Project.TaskType", + "ParentName": null, + "DisplayName": "App.Project.TaskType", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.TaskType.Create", + "ParentName": "App.Project.TaskType", + "DisplayName": "Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.TaskType.Update", + "ParentName": "App.Project.TaskType", + "DisplayName": "Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.TaskType.Delete", + "ParentName": "App.Project.TaskType", + "DisplayName": "Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.TaskType.Export", + "ParentName": "App.Project.TaskType", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.TaskType.Import", + "ParentName": "App.Project.TaskType", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.TaskType.Note", + "ParentName": "App.Project.TaskType", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, { "GroupName": "App.Project", @@ -8334,17 +8397,17 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Phase", + "Name": "App.Project.ProjectPhase", "ParentName": null, - "DisplayName": "App.Project.Phase", + "DisplayName": "App.Project.ProjectPhase", "IsEnabled": true, "MultiTenancySide": 3, "MenuGroup": "Erp" }, { "GroupName": "App.Project", - "Name": "App.Project.Phase.Create", - "ParentName": "App.Project.Phase", + "Name": "App.Project.ProjectPhase.Create", + "ParentName": "App.Project.ProjectPhase", "DisplayName": "Create", "IsEnabled": true, "MultiTenancySide": 3, @@ -8352,8 +8415,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Phase.Update", - "ParentName": "App.Project.Phase", + "Name": "App.Project.ProjectPhase.Update", + "ParentName": "App.Project.ProjectPhase", "DisplayName": "Update", "IsEnabled": true, "MultiTenancySide": 3, @@ -8361,8 +8424,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Phase.Delete", - "ParentName": "App.Project.Phase", + "Name": "App.Project.ProjectPhase.Delete", + "ParentName": "App.Project.ProjectPhase", "DisplayName": "Delete", "IsEnabled": true, "MultiTenancySide": 3, @@ -8370,8 +8433,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Phase.Export", - "ParentName": "App.Project.Phase", + "Name": "App.Project.ProjectPhase.Export", + "ParentName": "App.Project.ProjectPhase", "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, @@ -8379,8 +8442,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Phase.Import", - "ParentName": "App.Project.Phase", + "Name": "App.Project.ProjectPhase.Import", + "ParentName": "App.Project.ProjectPhase", "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, @@ -8388,26 +8451,27 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Phase.Note", - "ParentName": "App.Project.Phase", + "Name": "App.Project.ProjectPhase.Note", + "ParentName": "App.Project.ProjectPhase", "DisplayName": "Note", "IsEnabled": true, "MultiTenancySide": 3, "MenuGroup": "Erp" }, + { "GroupName": "App.Project", - "Name": "App.Project.TaskType", + "Name": "App.Project.ProjectRisk", "ParentName": null, - "DisplayName": "App.Project.TaskType", + "DisplayName": "App.Project.ProjectRisk", "IsEnabled": true, "MultiTenancySide": 3, "MenuGroup": "Erp" }, { "GroupName": "App.Project", - "Name": "App.Project.TaskType.Create", - "ParentName": "App.Project.TaskType", + "Name": "App.Project.ProjectRisk.Create", + "ParentName": "App.Project.ProjectRisk", "DisplayName": "Create", "IsEnabled": true, "MultiTenancySide": 3, @@ -8415,8 +8479,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.TaskType.Update", - "ParentName": "App.Project.TaskType", + "Name": "App.Project.ProjectRisk.Update", + "ParentName": "App.Project.ProjectRisk", "DisplayName": "Update", "IsEnabled": true, "MultiTenancySide": 3, @@ -8424,8 +8488,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.TaskType.Delete", - "ParentName": "App.Project.TaskType", + "Name": "App.Project.ProjectRisk.Delete", + "ParentName": "App.Project.ProjectRisk", "DisplayName": "Delete", "IsEnabled": true, "MultiTenancySide": 3, @@ -8433,8 +8497,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.TaskType.Export", - "ParentName": "App.Project.TaskType", + "Name": "App.Project.ProjectRisk.Export", + "ParentName": "App.Project.ProjectRisk", "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, @@ -8442,8 +8506,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.TaskType.Import", - "ParentName": "App.Project.TaskType", + "Name": "App.Project.ProjectRisk.Import", + "ParentName": "App.Project.ProjectRisk", "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, @@ -8451,27 +8515,27 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.TaskType.Note", - "ParentName": "App.Project.TaskType", + "Name": "App.Project.ProjectRisk.Note", + "ParentName": "App.Project.ProjectRisk", "DisplayName": "Note", "IsEnabled": true, "MultiTenancySide": 3, "MenuGroup": "Erp" }, - + { "GroupName": "App.Project", - "Name": "App.Project.Task", + "Name": "App.Project.ProjectTeam", "ParentName": null, - "DisplayName": "App.Project.Task", + "DisplayName": "App.Project.ProjectTeam", "IsEnabled": true, "MultiTenancySide": 3, "MenuGroup": "Erp" }, { "GroupName": "App.Project", - "Name": "App.Project.Task.Create", - "ParentName": "App.Project.Task", + "Name": "App.Project.ProjectTeam.Create", + "ParentName": "App.Project.ProjectTeam", "DisplayName": "Create", "IsEnabled": true, "MultiTenancySide": 3, @@ -8479,8 +8543,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Task.Update", - "ParentName": "App.Project.Task", + "Name": "App.Project.ProjectTeam.Update", + "ParentName": "App.Project.ProjectTeam", "DisplayName": "Update", "IsEnabled": true, "MultiTenancySide": 3, @@ -8488,8 +8552,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Task.Delete", - "ParentName": "App.Project.Task", + "Name": "App.Project.ProjectTeam.Delete", + "ParentName": "App.Project.ProjectTeam", "DisplayName": "Delete", "IsEnabled": true, "MultiTenancySide": 3, @@ -8497,8 +8561,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Task.Export", - "ParentName": "App.Project.Task", + "Name": "App.Project.ProjectTeam.Export", + "ParentName": "App.Project.ProjectTeam", "DisplayName": "Export", "IsEnabled": true, "MultiTenancySide": 3, @@ -8506,8 +8570,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Task.Import", - "ParentName": "App.Project.Task", + "Name": "App.Project.ProjectTeam.Import", + "ParentName": "App.Project.ProjectTeam", "DisplayName": "Import", "IsEnabled": true, "MultiTenancySide": 3, @@ -8515,8 +8579,72 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Task.Note", - "ParentName": "App.Project.Task", + "Name": "App.Project.ProjectTeam.Note", + "ParentName": "App.Project.ProjectTeam", + "DisplayName": "Note", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + + { + "GroupName": "App.Project", + "Name": "App.Project.ProjectTask", + "ParentName": null, + "DisplayName": "App.Project.ProjectTask", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.ProjectTask.Create", + "ParentName": "App.Project.ProjectTask", + "DisplayName": "Create", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.ProjectTask.Update", + "ParentName": "App.Project.ProjectTask", + "DisplayName": "Update", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.ProjectTask.Delete", + "ParentName": "App.Project.ProjectTask", + "DisplayName": "Delete", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.ProjectTask.Export", + "ParentName": "App.Project.ProjectTask", + "DisplayName": "Export", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.ProjectTask.Import", + "ParentName": "App.Project.ProjectTask", + "DisplayName": "Import", + "IsEnabled": true, + "MultiTenancySide": 3, + "MenuGroup": "Erp" + }, + { + "GroupName": "App.Project", + "Name": "App.Project.ProjectTask.Note", + "ParentName": "App.Project.ProjectTask", "DisplayName": "Note", "IsEnabled": true, "MultiTenancySide": 3, @@ -8524,8 +8652,8 @@ }, { "GroupName": "App.Project", - "Name": "App.Project.Task.Widget", - "ParentName": "App.Project.Task", + "Name": "App.Project.ProjectTask.Widget", + "ParentName": "App.Project.ProjectTask", "DisplayName": "Widget", "IsEnabled": true, "MultiTenancySide": 3, diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/SeederUtils.cs b/api/src/Erp.Platform.DbMigrator/Seeds/SeederUtils.cs index 62bfd37b..c4971b50 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/SeederUtils.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/SeederUtils.cs @@ -36,6 +36,10 @@ public class SeederUtils { await SetSubFormsJsonAsync(cloneForm, subFormsJson); } + else + { + Console.WriteLine($"ListForm with code {listFormCode} not found!"); + } } public async Task CloneListFormWithFieldsAsync(string listFormCode, string newListFormCode, bool copyFormFields = true) @@ -43,6 +47,8 @@ public class SeederUtils var listForm = await _listFormRepository.FirstOrDefaultAsync(f => f.ListFormCode == listFormCode); if (listForm == null) { + Console.WriteLine($"ListForm with code {listFormCode} not found!"); + return null; } diff --git a/api/src/Erp.Platform.Domain.Shared/Enums/ListFormTabTypeEnum.cs b/api/src/Erp.Platform.Domain.Shared/Enums/ListFormTabTypeEnum.cs index cc73a069..6c24604a 100644 --- a/api/src/Erp.Platform.Domain.Shared/Enums/ListFormTabTypeEnum.cs +++ b/api/src/Erp.Platform.Domain.Shared/Enums/ListFormTabTypeEnum.cs @@ -3,6 +3,7 @@ public static class ListFormTabTypeEnum { public const string List = "List"; + public const string Tree = "Tree"; public const string Form = "Form"; public const string Chart = "Chart"; public const string Pivot = "Pivot"; diff --git a/api/src/Erp.Platform.Domain.Shared/Enums/TableNameEnum.cs b/api/src/Erp.Platform.Domain.Shared/Enums/TableNameEnum.cs index 9ac8f518..dba220f1 100644 --- a/api/src/Erp.Platform.Domain.Shared/Enums/TableNameEnum.cs +++ b/api/src/Erp.Platform.Domain.Shared/Enums/TableNameEnum.cs @@ -188,11 +188,14 @@ public enum TableNameEnum Bom, BomOperation, BomComponent, + Type, + Status, + Risk, + Category, + TaskType, Projects, - ProjectType, - ProjectStatus, ProjectRisk, + ProjectTeam, ProjectPhase, - ProjectCategory, - ProjectTaskType + ProjectTask, } diff --git a/api/src/Erp.Platform.Domain.Shared/TableNameResolver.cs b/api/src/Erp.Platform.Domain.Shared/TableNameResolver.cs index e60b321c..1c983a5a 100644 --- a/api/src/Erp.Platform.Domain.Shared/TableNameResolver.cs +++ b/api/src/Erp.Platform.Domain.Shared/TableNameResolver.cs @@ -227,13 +227,16 @@ public static class TableNameResolver { nameof(TableNameEnum.BomComponent), (TablePrefix.TenantByName, MenuPrefix.Mrp) }, // 🔹 R&D - { nameof(TableNameEnum.ProjectType), (TablePrefix.TenantByName, MenuPrefix.Project) }, - { nameof(TableNameEnum.ProjectStatus), (TablePrefix.TenantByName, MenuPrefix.Project) }, - { nameof(TableNameEnum.ProjectRisk), (TablePrefix.TenantByName, MenuPrefix.Project) }, - { nameof(TableNameEnum.ProjectCategory), (TablePrefix.TenantByName, MenuPrefix.Project) }, - { nameof(TableNameEnum.ProjectPhase), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.Type), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.Status), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.Risk), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.Category), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.TaskType), (TablePrefix.TenantByName, MenuPrefix.Project) }, { nameof(TableNameEnum.Projects), (TablePrefix.TenantByName, MenuPrefix.Project) }, - { nameof(TableNameEnum.ProjectTaskType), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.ProjectRisk), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.ProjectTeam), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.ProjectPhase), (TablePrefix.TenantByName, MenuPrefix.Project) }, + { nameof(TableNameEnum.ProjectTask), (TablePrefix.TenantByName, MenuPrefix.Project) }, }; public static string GetFullTableName(string tableName) diff --git a/api/src/Erp.Platform.Domain/Data/SeedConsts.cs b/api/src/Erp.Platform.Domain/Data/SeedConsts.cs index 168e57e9..0f5de8aa 100644 --- a/api/src/Erp.Platform.Domain/Data/SeedConsts.cs +++ b/api/src/Erp.Platform.Domain/Data/SeedConsts.cs @@ -564,11 +564,14 @@ public static class SeedConsts public const string Default = Prefix.App + ".Project"; public const string Type = Default + ".Type"; public const string Status = Default + ".Status"; - public const string Projects = Default + ".Projects"; public const string Risk = Default + ".Risk"; public const string Category = Default + ".Category"; - public const string Phase = Default + ".Phase"; public const string TaskType = Default + ".TaskType"; + public const string Projects = Default + ".Projects"; + public const string ProjectPhase = Default + ".ProjectPhase"; + public const string ProjectRisk = Default + ".ProjectRisk"; + public const string ProjectTeam = Default + ".ProjectTeam"; + public const string ProjectTask = Default + ".ProjectTask"; } public static class Mrp diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectCategory.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Category.cs similarity index 84% rename from api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectCategory.cs rename to api/src/Erp.Platform.Domain/Entities/Tenant/Project/Category.cs index 3948537d..3125d089 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectCategory.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Category.cs @@ -5,7 +5,7 @@ using Volo.Abp.MultiTenancy; namespace Erp.Platform.Entities; -public class ProjectCategory : FullAuditedEntity, IMultiTenant +public class Category : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Project.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Project.cs index a7ee6ade..971f9fbf 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Project.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Project.cs @@ -15,9 +15,9 @@ public class Project : FullAuditedEntity, IMultiTenant public string Description { get; set; } public Guid? ProjectTypeId { get; set; } //Dahili, Müşteri, Araştırma, Bakım, Geliştirme - public ProjectType ProjectType { get; set; } + public Type ProjectType { get; set; } public Guid? StatusId { get; set; } //Planlanıyor, Devam Ediyor, Tamamlandı, Beklemede, İptal Edildi - public ProjectStatus Status { get; set; } + public Status Status { get; set; } public string Priority { get; set; } //Düşük, Orta, Yüksek, Kritik, Acil public Guid? ManagerId { get; set; } public Employee Manager { get; set; } @@ -37,8 +37,8 @@ public class Project : FullAuditedEntity, IMultiTenant public bool IsActive { get; set; } - // public ICollection Phases { get; set; } - // public ICollection Tasks { get; set; } - // public ICollection Risks { get; set; } - // public ICollection Documents { get; set; } + public ICollection Phases { get; set; } + public ICollection Tasks { get; set; } + public ICollection Risks { get; set; } + public ICollection Teams { get; set; } } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectPhase.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectPhase.cs index 66bc87d2..24bb6a3c 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectPhase.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectPhase.cs @@ -12,8 +12,8 @@ public class ProjectPhase : FullAuditedEntity, IMultiTenant public Guid? ProjectId { get; set; } public Project? Project { get; set; } - public Guid? ProjectCategoryId { get; set; } - public ProjectCategory? ProjectCategory { get; set; } + public Guid? CategoryId { get; set; } + public Category? Category { get; set; } public string Code { get; set; } public string Name { get; set; } @@ -32,7 +32,7 @@ public class ProjectPhase : FullAuditedEntity, IMultiTenant public string Risks { get; set; } public Guid? StatusId { get; set; } - public ProjectStatus? Status { get; set; } + public Status? Status { get; set; } public bool IsActive { get; set; } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectRisk.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectRisk.cs index 243a7992..97fe7fbc 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectRisk.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectRisk.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; @@ -9,10 +8,9 @@ public class ProjectRisk : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public bool IsActive { get; set; } + public Guid? ProjectId { get; set; } + public Project? Project { get; set; } - public ICollection ProjectPhases { get; set; } + public Guid? RiskId { get; set; } + public Risk? Risk { get; set; } } - diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTask.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTask.cs new file mode 100644 index 00000000..d3b7c5f6 --- /dev/null +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTask.cs @@ -0,0 +1,36 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Erp.Platform.Entities; + +public class ProjectTask : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public Guid? ProjectId { get; set; } + public Project? Project { get; set; } + + public Guid? PhaseId { get; set; } + public ProjectPhase? Phase { get; set; } + + public string Name { get; set; } + public string Description { get; set; } + + public Guid? TaskTypeId { get; set; } + public TaskType? TaskType { get; set; } + + public string Priority { get; set; } + public Guid? StatusId { get; set; } + public Status? Status { get; set; } + + public Guid? EmployeeId { get; set; } + public Employee? Employee { get; set; } + + public DateTime StartDate { get; set; } + public DateTime EndDate { get; set; } + + public int Progress { get; set; } + + public bool IsActive { get; set; } +} diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTeam.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTeam.cs new file mode 100644 index 00000000..9a619619 --- /dev/null +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTeam.cs @@ -0,0 +1,19 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Erp.Platform.Entities; + +public class ProjectTeam : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public Guid? ProjectId { get; set; } + public Project? Project { get; set; } + + public Guid? EmployeeId { get; set; } + public Employee? Employee { get; set; } + + public Guid? ManagerId { get; set; } + public Employee? Manager { get; set; } +} diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Risk.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Risk.cs new file mode 100644 index 00000000..907d6d2d --- /dev/null +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Risk.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Erp.Platform.Entities; + +public class Risk : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public string Name { get; set; } + public string Description { get; set; } + public bool IsActive { get; set; } + + public ICollection ProjectPhases { get; set; } + public ICollection ProjectRisks { get; set; } +} + diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTaskType.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Status.cs similarity index 66% rename from api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTaskType.cs rename to api/src/Erp.Platform.Domain/Entities/Tenant/Project/Status.cs index 5d78a5da..90c2ffa5 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectTaskType.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Status.cs @@ -5,7 +5,7 @@ using Volo.Abp.MultiTenancy; namespace Erp.Platform.Entities; -public class ProjectTaskType : FullAuditedEntity, IMultiTenant +public class Status : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } @@ -14,5 +14,7 @@ public class ProjectTaskType : FullAuditedEntity, IMultiTenant public bool IsActive { get; set; } public ICollection Projects { get; set; } + public ICollection ProjectPhases { get; set; } + public ICollection ProjectTasks { get; set; } } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectType.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/TaskType.cs similarity index 85% rename from api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectType.cs rename to api/src/Erp.Platform.Domain/Entities/Tenant/Project/TaskType.cs index e9050974..435e9da5 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectType.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/TaskType.cs @@ -5,7 +5,7 @@ using Volo.Abp.MultiTenancy; namespace Erp.Platform.Entities; -public class ProjectType : FullAuditedEntity, IMultiTenant +public class TaskType : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } diff --git a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectStatus.cs b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Type.cs similarity index 84% rename from api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectStatus.cs rename to api/src/Erp.Platform.Domain/Entities/Tenant/Project/Type.cs index d0cdc483..5b624966 100644 --- a/api/src/Erp.Platform.Domain/Entities/Tenant/Project/ProjectStatus.cs +++ b/api/src/Erp.Platform.Domain/Entities/Tenant/Project/Type.cs @@ -5,7 +5,7 @@ using Volo.Abp.MultiTenancy; namespace Erp.Platform.Entities; -public class ProjectStatus : FullAuditedEntity, IMultiTenant +public class Type : FullAuditedEntity, IMultiTenant { public Guid? TenantId { get; set; } diff --git a/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index 05c09ede..80642e49 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -268,13 +268,16 @@ public class PlatformDbContext : #endregion #region Rd - public DbSet ProjectTypes { get; set; } - public DbSet ProjectStatuses { get; set; } + public DbSet Types { get; set; } + public DbSet Statuses { get; set; } + public DbSet TaskTypes { get; set; } + public DbSet Categories { get; set; } + public DbSet Risks { get; set; } public DbSet Projects { get; set; } public DbSet ProjectRisks { get; set; } - public DbSet ProjectCategories { get; set; } + public DbSet ProjectTeams { get; set; } public DbSet ProjectPhases { get; set; } - public DbSet ProjectTasks { get; set; } + public DbSet ProjectTasks { get; set; } #endregion public PlatformDbContext(DbContextOptions options) @@ -3215,9 +3218,9 @@ public class PlatformDbContext : b.Property(x => x.IsActive).HasDefaultValue(true); }); - builder.Entity(b => + builder.Entity(b => { - b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectType)), Prefix.DbSchema); + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Type)), Prefix.DbSchema); b.ConfigureByConvention(); b.Property(x => x.Name).IsRequired().HasMaxLength(50); @@ -3225,9 +3228,39 @@ public class PlatformDbContext : b.Property(x => x.IsActive).HasDefaultValue(true); }); - builder.Entity(b => + builder.Entity(b => { - b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectStatus)), Prefix.DbSchema); + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Status)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.Name).IsRequired().HasMaxLength(50); + b.Property(x => x.Description).HasMaxLength(500); + b.Property(x => x.IsActive).HasDefaultValue(true); + }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.TaskType)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.Name).IsRequired().HasMaxLength(50); + b.Property(x => x.Description).HasMaxLength(500); + b.Property(x => x.IsActive).HasDefaultValue(true); + }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Risk)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.Name).IsRequired().HasMaxLength(50); + b.Property(x => x.Description).HasMaxLength(500); + b.Property(x => x.IsActive).HasDefaultValue(true); + }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Category)), Prefix.DbSchema); b.ConfigureByConvention(); b.Property(x => x.Name).IsRequired().HasMaxLength(50); @@ -3266,33 +3299,13 @@ public class PlatformDbContext : .OnDelete(DeleteBehavior.Restrict); }); - builder.Entity(b => - { - b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectRisk)), Prefix.DbSchema); - b.ConfigureByConvention(); - - b.Property(x => x.Name).IsRequired().HasMaxLength(50); - b.Property(x => x.Description).HasMaxLength(500); - b.Property(x => x.IsActive).HasDefaultValue(true); - }); - - builder.Entity(b => - { - b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectCategory)), Prefix.DbSchema); - b.ConfigureByConvention(); - - b.Property(x => x.Name).IsRequired().HasMaxLength(50); - b.Property(x => x.Description).HasMaxLength(500); - b.Property(x => x.IsActive).HasDefaultValue(true); - }); - builder.Entity(b => { b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectPhase)), Prefix.DbSchema); b.ConfigureByConvention(); b.Property(x => x.ProjectId).IsRequired(); - b.Property(x => x.ProjectCategoryId).IsRequired(); + b.Property(x => x.CategoryId).IsRequired(); b.Property(x => x.Code).IsRequired().HasMaxLength(100); b.Property(x => x.Name).IsRequired().HasMaxLength(200); b.Property(x => x.Description).HasMaxLength(500); @@ -3307,16 +3320,76 @@ public class PlatformDbContext : b.Property(x => x.StatusId).IsRequired(); b.Property(x => x.IsActive).HasDefaultValue(true); + + b.HasOne(x => x.Status) + .WithMany(x => x.ProjectPhases) + .HasForeignKey(x => x.StatusId) + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne(x => x.Project) + .WithMany(x => x.Phases) + .HasForeignKey(x => x.ProjectId) + .OnDelete(DeleteBehavior.Restrict); }); - builder.Entity(b => + builder.Entity(b => { - b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectTaskType)), Prefix.DbSchema); + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectTask)), Prefix.DbSchema); b.ConfigureByConvention(); - b.Property(x => x.Name).IsRequired().HasMaxLength(50); + b.Property(x => x.ProjectId).IsRequired(); + b.Property(x => x.PhaseId).IsRequired(); + b.Property(x => x.Name).IsRequired().HasMaxLength(200); b.Property(x => x.Description).HasMaxLength(500); + + b.Property(x => x.Priority).IsRequired().HasMaxLength(50); + b.Property(x => x.StatusId).IsRequired(); + + b.Property(x => x.EmployeeId).IsRequired(); + + b.Property(x => x.StartDate).IsRequired(); + b.Property(x => x.EndDate).IsRequired(); + + b.Property(x => x.Progress).HasDefaultValue(0); b.Property(x => x.IsActive).HasDefaultValue(true); + + b.HasOne(x => x.Status) + .WithMany(x => x.ProjectTasks) + .HasForeignKey(x => x.StatusId) + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne(x => x.Project) + .WithMany(x => x.Tasks) + .HasForeignKey(x => x.ProjectId) + .OnDelete(DeleteBehavior.Restrict); + }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectRisk)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.ProjectId).IsRequired(); + b.Property(x => x.RiskId).IsRequired(); + + b.HasOne(x => x.Project) + .WithMany(x => x.Risks) + .HasForeignKey(x => x.ProjectId) + .OnDelete(DeleteBehavior.Restrict); + }); + + builder.Entity(b => + { + b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectTeam)), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.ProjectId).IsRequired(); + b.Property(x => x.EmployeeId).IsRequired(); + + b.HasOne(x => x.Project) + .WithMany(x => x.Teams) + .HasForeignKey(x => x.ProjectId) + .OnDelete(DeleteBehavior.Restrict); }); } } \ No newline at end of file diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127112310_Initial.Designer.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127201919_Initial.Designer.cs similarity index 98% rename from api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127112310_Initial.Designer.cs rename to api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127201919_Initial.Designer.cs index 1d9e5223..85e76025 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127112310_Initial.Designer.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127201919_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Erp.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20251127112310_Initial")] + [Migration("20251127201919_Initial")] partial class Initial { /// @@ -2067,6 +2067,64 @@ namespace Erp.Platform.Migrations b.ToTable("Acc_T_Cash", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Category", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_Category", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Certificate", b => { b.Property("Id") @@ -9848,9 +9906,6 @@ namespace Erp.Platform.Migrations b.Property("ProjectPhaseId") .HasColumnType("uniqueidentifier"); - b.Property("ProjectTaskTypeId") - .HasColumnType("uniqueidentifier"); - b.Property("ProjectTypeId") .HasColumnType("uniqueidentifier"); @@ -9860,6 +9915,9 @@ namespace Erp.Platform.Migrations b.Property("StatusId") .HasColumnType("uniqueidentifier"); + b.Property("TaskTypeId") + .HasColumnType("uniqueidentifier"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); @@ -9872,73 +9930,15 @@ namespace Erp.Platform.Migrations b.HasIndex("ProjectPhaseId"); - b.HasIndex("ProjectTaskTypeId"); - b.HasIndex("ProjectTypeId"); b.HasIndex("StatusId"); + b.HasIndex("TaskTypeId"); + b.ToTable("Prj_T_Projects", (string)null); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectCategory", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("Description") - .HasMaxLength(500) - .HasColumnType("nvarchar(500)"); - - b.Property("IsActive") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("Prj_T_ProjectCategory", (string)null); - }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectPhase", b => { b.Property("Id") @@ -9962,6 +9962,9 @@ namespace Erp.Platform.Migrations .HasColumnType("decimal(18,2)") .HasDefaultValue(0m); + b.Property("CategoryId") + .HasColumnType("uniqueidentifier"); + b.Property("Code") .IsRequired() .HasMaxLength(100) @@ -10019,13 +10022,10 @@ namespace Erp.Platform.Migrations .HasColumnType("int") .HasDefaultValue(0); - b.Property("ProjectCategoryId") - .HasColumnType("uniqueidentifier"); - b.Property("ProjectId") .HasColumnType("uniqueidentifier"); - b.Property("ProjectRiskId") + b.Property("RiskId") .HasColumnType("uniqueidentifier"); b.Property("Risks") @@ -10049,11 +10049,11 @@ namespace Erp.Platform.Migrations b.HasKey("Id"); - b.HasIndex("ProjectCategoryId"); + b.HasIndex("CategoryId"); b.HasIndex("ProjectId"); - b.HasIndex("ProjectRiskId"); + b.HasIndex("RiskId"); b.HasIndex("StatusId"); @@ -10081,15 +10081,6 @@ namespace Erp.Platform.Migrations .HasColumnType("datetime2") .HasColumnName("DeletionTime"); - b.Property("Description") - .HasMaxLength(500) - .HasColumnType("nvarchar(500)"); - - b.Property("IsActive") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true); - b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -10104,10 +10095,11 @@ namespace Erp.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("RiskId") + .HasColumnType("uniqueidentifier"); b.Property("TenantId") .HasColumnType("uniqueidentifier") @@ -10115,10 +10107,14 @@ namespace Erp.Platform.Migrations b.HasKey("Id"); + b.HasIndex("ProjectId"); + + b.HasIndex("RiskId"); + b.ToTable("Prj_T_ProjectRisk", (string)null); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectStatus", b => + modelBuilder.Entity("Erp.Platform.Entities.ProjectTask", b => { b.Property("Id") .HasColumnType("uniqueidentifier"); @@ -10143,6 +10139,12 @@ namespace Erp.Platform.Migrations .HasMaxLength(500) .HasColumnType("nvarchar(500)"); + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + b.Property("IsActive") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -10163,20 +10165,55 @@ namespace Erp.Platform.Migrations .HasColumnName("LastModifierId"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("PhaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Priority") .IsRequired() .HasMaxLength(50) .HasColumnType("nvarchar(50)"); + b.Property("Progress") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("StatusId") + .HasColumnType("uniqueidentifier"); + + b.Property("TaskTypeId") + .HasColumnType("uniqueidentifier"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); b.HasKey("Id"); - b.ToTable("Prj_T_ProjectStatus", (string)null); + b.HasIndex("EmployeeId"); + + b.HasIndex("PhaseId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("StatusId"); + + b.HasIndex("TaskTypeId"); + + b.ToTable("Prj_T_ProjectTask", (string)null); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectTaskType", b => + modelBuilder.Entity("Erp.Platform.Entities.ProjectTeam", b => { b.Property("Id") .HasColumnType("uniqueidentifier"); @@ -10197,73 +10234,9 @@ namespace Erp.Platform.Migrations .HasColumnType("datetime2") .HasColumnName("DeletionTime"); - b.Property("Description") - .HasMaxLength(500) - .HasColumnType("nvarchar(500)"); - - b.Property("IsActive") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("Prj_T_ProjectTaskType", (string)null); - }); - - modelBuilder.Entity("Erp.Platform.Entities.ProjectType", b => - { - b.Property("Id") + b.Property("EmployeeId") .HasColumnType("uniqueidentifier"); - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("Description") - .HasMaxLength(500) - .HasColumnType("nvarchar(500)"); - - b.Property("IsActive") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true); - b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -10278,10 +10251,11 @@ namespace Erp.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); + b.Property("ManagerId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); b.Property("TenantId") .HasColumnType("uniqueidentifier") @@ -10289,7 +10263,13 @@ namespace Erp.Platform.Migrations b.HasKey("Id"); - b.ToTable("Prj_T_ProjectType", (string)null); + b.HasIndex("EmployeeId"); + + b.HasIndex("ManagerId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Prj_T_ProjectTeam", (string)null); }); modelBuilder.Entity("Erp.Platform.Entities.Psychologist", b => @@ -11461,6 +11441,64 @@ namespace Erp.Platform.Migrations b.ToTable("Net_T_Reservation", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Risk", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_Risk", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Route", b => { b.Property("Id") @@ -12548,6 +12586,64 @@ namespace Erp.Platform.Migrations b.ToTable("Prt_T_Source", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Status", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_Status", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.SupplyCardType", b => { b.Property("Id") @@ -12975,6 +13071,64 @@ namespace Erp.Platform.Migrations b.ToTable("Hr_T_SurveyResponse", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.TaskType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_TaskType", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Template360", b => { b.Property("Id") @@ -13143,6 +13297,64 @@ namespace Erp.Platform.Migrations b.ToTable("Net_T_Training", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Type", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_Type", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Uom", b => { b.Property("Id") @@ -17427,22 +17639,22 @@ namespace Erp.Platform.Migrations .WithMany("Projects") .HasForeignKey("ProjectPhaseId"); - b.HasOne("Erp.Platform.Entities.ProjectTaskType", null) - .WithMany("Projects") - .HasForeignKey("ProjectTaskTypeId"); - - b.HasOne("Erp.Platform.Entities.ProjectType", "ProjectType") + b.HasOne("Erp.Platform.Entities.Type", "ProjectType") .WithMany("Projects") .HasForeignKey("ProjectTypeId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); - b.HasOne("Erp.Platform.Entities.ProjectStatus", "Status") + b.HasOne("Erp.Platform.Entities.Status", "Status") .WithMany("Projects") .HasForeignKey("StatusId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); + b.HasOne("Erp.Platform.Entities.TaskType", null) + .WithMany("Projects") + .HasForeignKey("TaskTypeId"); + b.Navigation("Customer"); b.Navigation("Manager"); @@ -17454,33 +17666,120 @@ namespace Erp.Platform.Migrations modelBuilder.Entity("Erp.Platform.Entities.ProjectPhase", b => { - b.HasOne("Erp.Platform.Entities.ProjectCategory", "ProjectCategory") + b.HasOne("Erp.Platform.Entities.Category", "Category") .WithMany("ProjectPhases") - .HasForeignKey("ProjectCategoryId") + .HasForeignKey("CategoryId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Erp.Platform.Entities.Project", "Project") - .WithMany() + .WithMany("Phases") .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); - b.HasOne("Erp.Platform.Entities.ProjectRisk", null) + b.HasOne("Erp.Platform.Entities.Risk", null) .WithMany("ProjectPhases") - .HasForeignKey("ProjectRiskId"); + .HasForeignKey("RiskId"); - b.HasOne("Erp.Platform.Entities.ProjectStatus", "Status") - .WithMany() + b.HasOne("Erp.Platform.Entities.Status", "Status") + .WithMany("ProjectPhases") .HasForeignKey("StatusId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("Project"); + + b.Navigation("Status"); + }); + + modelBuilder.Entity("Erp.Platform.Entities.ProjectRisk", b => + { + b.HasOne("Erp.Platform.Entities.Project", "Project") + .WithMany("Risks") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Risk", "Risk") + .WithMany("ProjectRisks") + .HasForeignKey("RiskId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Project"); - b.Navigation("ProjectCategory"); + b.Navigation("Risk"); + }); + + modelBuilder.Entity("Erp.Platform.Entities.ProjectTask", b => + { + b.HasOne("Erp.Platform.Entities.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.ProjectPhase", "Phase") + .WithMany() + .HasForeignKey("PhaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Project", "Project") + .WithMany("Tasks") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Status", "Status") + .WithMany("ProjectTasks") + .HasForeignKey("StatusId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.TaskType", "TaskType") + .WithMany() + .HasForeignKey("TaskTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Phase"); + + b.Navigation("Project"); b.Navigation("Status"); + + b.Navigation("TaskType"); + }); + + modelBuilder.Entity("Erp.Platform.Entities.ProjectTeam", b => + { + b.HasOne("Erp.Platform.Entities.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Employee", "Manager") + .WithMany() + .HasForeignKey("ManagerId"); + + b.HasOne("Erp.Platform.Entities.Project", "Project") + .WithMany("Teams") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Manager"); + + b.Navigation("Project"); }); modelBuilder.Entity("Erp.Platform.Entities.PutawayCondition", b => @@ -18153,6 +18452,11 @@ namespace Erp.Platform.Migrations b.Navigation("UserBranches"); }); + modelBuilder.Entity("Erp.Platform.Entities.Category", b => + { + b.Navigation("ProjectPhases"); + }); + modelBuilder.Entity("Erp.Platform.Entities.City", b => { b.Navigation("Districts"); @@ -18360,9 +18664,15 @@ namespace Erp.Platform.Migrations b.Navigation("Items"); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectCategory", b => + modelBuilder.Entity("Erp.Platform.Entities.Project", b => { - b.Navigation("ProjectPhases"); + b.Navigation("Phases"); + + b.Navigation("Risks"); + + b.Navigation("Tasks"); + + b.Navigation("Teams"); }); modelBuilder.Entity("Erp.Platform.Entities.ProjectPhase", b => @@ -18370,26 +18680,6 @@ namespace Erp.Platform.Migrations b.Navigation("Projects"); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectRisk", b => - { - b.Navigation("ProjectPhases"); - }); - - modelBuilder.Entity("Erp.Platform.Entities.ProjectStatus", b => - { - b.Navigation("Projects"); - }); - - modelBuilder.Entity("Erp.Platform.Entities.ProjectTaskType", b => - { - b.Navigation("Projects"); - }); - - modelBuilder.Entity("Erp.Platform.Entities.ProjectType", b => - { - b.Navigation("Projects"); - }); - modelBuilder.Entity("Erp.Platform.Entities.Putaway", b => { b.Navigation("Conditions"); @@ -18434,6 +18724,13 @@ namespace Erp.Platform.Migrations b.Navigation("PurchaseRequests"); }); + modelBuilder.Entity("Erp.Platform.Entities.Risk", b => + { + b.Navigation("ProjectPhases"); + + b.Navigation("ProjectRisks"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Schedule", b => { b.Navigation("Lessons"); @@ -18467,6 +18764,15 @@ namespace Erp.Platform.Migrations b.Navigation("Opportunities"); }); + modelBuilder.Entity("Erp.Platform.Entities.Status", b => + { + b.Navigation("ProjectPhases"); + + b.Navigation("ProjectTasks"); + + b.Navigation("Projects"); + }); + modelBuilder.Entity("Erp.Platform.Entities.SupplyCardType", b => { b.Navigation("Partners"); @@ -18494,6 +18800,11 @@ namespace Erp.Platform.Migrations b.Navigation("Answers"); }); + modelBuilder.Entity("Erp.Platform.Entities.TaskType", b => + { + b.Navigation("Projects"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Template360", b => { b.Navigation("Performans360s"); @@ -18504,6 +18815,11 @@ namespace Erp.Platform.Migrations b.Navigation("Certificates"); }); + modelBuilder.Entity("Erp.Platform.Entities.Type", b => + { + b.Navigation("Projects"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Uom", b => { b.Navigation("MaterialSpecifications"); diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127112310_Initial.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127201919_Initial.cs similarity index 97% rename from api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127112310_Initial.cs rename to api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127201919_Initial.cs index 8f7e2e94..13a134bd 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127112310_Initial.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/20251127201919_Initial.cs @@ -1824,7 +1824,7 @@ namespace Erp.Platform.Migrations }); migrationBuilder.CreateTable( - name: "Prj_T_ProjectCategory", + name: "Prj_T_Category", columns: table => new { Id = table.Column(type: "uniqueidentifier", nullable: false), @@ -1842,11 +1842,11 @@ namespace Erp.Platform.Migrations }, constraints: table => { - table.PrimaryKey("PK_Prj_T_ProjectCategory", x => x.Id); + table.PrimaryKey("PK_Prj_T_Category", x => x.Id); }); migrationBuilder.CreateTable( - name: "Prj_T_ProjectRisk", + name: "Prj_T_Risk", columns: table => new { Id = table.Column(type: "uniqueidentifier", nullable: false), @@ -1864,11 +1864,11 @@ namespace Erp.Platform.Migrations }, constraints: table => { - table.PrimaryKey("PK_Prj_T_ProjectRisk", x => x.Id); + table.PrimaryKey("PK_Prj_T_Risk", x => x.Id); }); migrationBuilder.CreateTable( - name: "Prj_T_ProjectStatus", + name: "Prj_T_Status", columns: table => new { Id = table.Column(type: "uniqueidentifier", nullable: false), @@ -1886,11 +1886,11 @@ namespace Erp.Platform.Migrations }, constraints: table => { - table.PrimaryKey("PK_Prj_T_ProjectStatus", x => x.Id); + table.PrimaryKey("PK_Prj_T_Status", x => x.Id); }); migrationBuilder.CreateTable( - name: "Prj_T_ProjectTaskType", + name: "Prj_T_TaskType", columns: table => new { Id = table.Column(type: "uniqueidentifier", nullable: false), @@ -1908,11 +1908,11 @@ namespace Erp.Platform.Migrations }, constraints: table => { - table.PrimaryKey("PK_Prj_T_ProjectTaskType", x => x.Id); + table.PrimaryKey("PK_Prj_T_TaskType", x => x.Id); }); migrationBuilder.CreateTable( - name: "Prj_T_ProjectType", + name: "Prj_T_Type", columns: table => new { Id = table.Column(type: "uniqueidentifier", nullable: false), @@ -1930,7 +1930,7 @@ namespace Erp.Platform.Migrations }, constraints: table => { - table.PrimaryKey("PK_Prj_T_ProjectType", x => x.Id); + table.PrimaryKey("PK_Prj_T_Type", x => x.Id); }); migrationBuilder.CreateTable( @@ -6770,7 +6770,7 @@ namespace Erp.Platform.Migrations Id = table.Column(type: "uniqueidentifier", nullable: false), TenantId = table.Column(type: "uniqueidentifier", nullable: true), ProjectId = table.Column(type: "uniqueidentifier", nullable: false), - ProjectCategoryId = table.Column(type: "uniqueidentifier", nullable: false), + CategoryId = table.Column(type: "uniqueidentifier", nullable: false), Code = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false), Name = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), Description = table.Column(type: "nvarchar(500)", maxLength: 500, nullable: true), @@ -6785,7 +6785,7 @@ namespace Erp.Platform.Migrations Risks = table.Column(type: "nvarchar(500)", maxLength: 500, nullable: true), StatusId = table.Column(type: "uniqueidentifier", nullable: false), IsActive = table.Column(type: "bit", nullable: false, defaultValue: true), - ProjectRiskId = table.Column(type: "uniqueidentifier", nullable: true), + RiskId = table.Column(type: "uniqueidentifier", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), @@ -6798,22 +6798,22 @@ namespace Erp.Platform.Migrations { table.PrimaryKey("PK_Prj_T_ProjectPhase", x => x.Id); table.ForeignKey( - name: "FK_Prj_T_ProjectPhase_Prj_T_ProjectCategory_ProjectCategoryId", - column: x => x.ProjectCategoryId, - principalTable: "Prj_T_ProjectCategory", + name: "FK_Prj_T_ProjectPhase_Prj_T_Category_CategoryId", + column: x => x.CategoryId, + principalTable: "Prj_T_Category", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( - name: "FK_Prj_T_ProjectPhase_Prj_T_ProjectRisk_ProjectRiskId", - column: x => x.ProjectRiskId, - principalTable: "Prj_T_ProjectRisk", + name: "FK_Prj_T_ProjectPhase_Prj_T_Risk_RiskId", + column: x => x.RiskId, + principalTable: "Prj_T_Risk", principalColumn: "Id"); table.ForeignKey( - name: "FK_Prj_T_ProjectPhase_Prj_T_ProjectStatus_StatusId", + name: "FK_Prj_T_ProjectPhase_Prj_T_Status_StatusId", column: x => x.StatusId, - principalTable: "Prj_T_ProjectStatus", + principalTable: "Prj_T_Status", principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( @@ -6840,7 +6840,7 @@ namespace Erp.Platform.Migrations Progress = table.Column(type: "int", nullable: false, defaultValue: 0), IsActive = table.Column(type: "bit", nullable: false, defaultValue: true), ProjectPhaseId = table.Column(type: "uniqueidentifier", nullable: true), - ProjectTaskTypeId = table.Column(type: "uniqueidentifier", nullable: true), + TaskTypeId = table.Column(type: "uniqueidentifier", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), @@ -6868,20 +6868,153 @@ namespace Erp.Platform.Migrations principalTable: "Prj_T_ProjectPhase", principalColumn: "Id"); table.ForeignKey( - name: "FK_Prj_T_Projects_Prj_T_ProjectStatus_StatusId", + name: "FK_Prj_T_Projects_Prj_T_Status_StatusId", column: x => x.StatusId, - principalTable: "Prj_T_ProjectStatus", + principalTable: "Prj_T_Status", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( - name: "FK_Prj_T_Projects_Prj_T_ProjectTaskType_ProjectTaskTypeId", - column: x => x.ProjectTaskTypeId, - principalTable: "Prj_T_ProjectTaskType", + name: "FK_Prj_T_Projects_Prj_T_TaskType_TaskTypeId", + column: x => x.TaskTypeId, + principalTable: "Prj_T_TaskType", principalColumn: "Id"); table.ForeignKey( - name: "FK_Prj_T_Projects_Prj_T_ProjectType_ProjectTypeId", + name: "FK_Prj_T_Projects_Prj_T_Type_ProjectTypeId", column: x => x.ProjectTypeId, - principalTable: "Prj_T_ProjectType", + principalTable: "Prj_T_Type", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "Prj_T_ProjectRisk", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ProjectId = table.Column(type: "uniqueidentifier", nullable: false), + RiskId = table.Column(type: "uniqueidentifier", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Prj_T_ProjectRisk", x => x.Id); + table.ForeignKey( + name: "FK_Prj_T_ProjectRisk_Prj_T_Projects_ProjectId", + column: x => x.ProjectId, + principalTable: "Prj_T_Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Prj_T_ProjectRisk_Prj_T_Risk_RiskId", + column: x => x.RiskId, + principalTable: "Prj_T_Risk", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Prj_T_ProjectTask", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ProjectId = table.Column(type: "uniqueidentifier", nullable: false), + PhaseId = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + Description = table.Column(type: "nvarchar(500)", maxLength: 500, nullable: true), + TaskTypeId = table.Column(type: "uniqueidentifier", nullable: false), + Priority = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + StatusId = table.Column(type: "uniqueidentifier", nullable: false), + EmployeeId = table.Column(type: "uniqueidentifier", nullable: false), + StartDate = table.Column(type: "datetime2", nullable: false), + EndDate = table.Column(type: "datetime2", nullable: false), + Progress = table.Column(type: "int", nullable: false, defaultValue: 0), + IsActive = table.Column(type: "bit", nullable: false, defaultValue: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Prj_T_ProjectTask", x => x.Id); + table.ForeignKey( + name: "FK_Prj_T_ProjectTask_Hr_T_Employee_EmployeeId", + column: x => x.EmployeeId, + principalTable: "Hr_T_Employee", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Prj_T_ProjectTask_Prj_T_ProjectPhase_PhaseId", + column: x => x.PhaseId, + principalTable: "Prj_T_ProjectPhase", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Prj_T_ProjectTask_Prj_T_Projects_ProjectId", + column: x => x.ProjectId, + principalTable: "Prj_T_Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Prj_T_ProjectTask_Prj_T_Status_StatusId", + column: x => x.StatusId, + principalTable: "Prj_T_Status", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Prj_T_ProjectTask_Prj_T_TaskType_TaskTypeId", + column: x => x.TaskTypeId, + principalTable: "Prj_T_TaskType", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Prj_T_ProjectTeam", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ProjectId = table.Column(type: "uniqueidentifier", nullable: false), + EmployeeId = table.Column(type: "uniqueidentifier", nullable: false), + ManagerId = table.Column(type: "uniqueidentifier", nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Prj_T_ProjectTeam", x => x.Id); + table.ForeignKey( + name: "FK_Prj_T_ProjectTeam_Hr_T_Employee_EmployeeId", + column: x => x.EmployeeId, + principalTable: "Hr_T_Employee", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Prj_T_ProjectTeam_Hr_T_Employee_ManagerId", + column: x => x.ManagerId, + principalTable: "Hr_T_Employee", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Prj_T_ProjectTeam_Prj_T_Projects_ProjectId", + column: x => x.ProjectId, + principalTable: "Prj_T_Projects", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); @@ -7796,9 +7929,9 @@ namespace Erp.Platform.Migrations column: "NotificationRuleId"); migrationBuilder.CreateIndex( - name: "IX_Prj_T_ProjectPhase_ProjectCategoryId", + name: "IX_Prj_T_ProjectPhase_CategoryId", table: "Prj_T_ProjectPhase", - column: "ProjectCategoryId"); + column: "CategoryId"); migrationBuilder.CreateIndex( name: "IX_Prj_T_ProjectPhase_ProjectId", @@ -7806,15 +7939,25 @@ namespace Erp.Platform.Migrations column: "ProjectId"); migrationBuilder.CreateIndex( - name: "IX_Prj_T_ProjectPhase_ProjectRiskId", + name: "IX_Prj_T_ProjectPhase_RiskId", table: "Prj_T_ProjectPhase", - column: "ProjectRiskId"); + column: "RiskId"); migrationBuilder.CreateIndex( name: "IX_Prj_T_ProjectPhase_StatusId", table: "Prj_T_ProjectPhase", column: "StatusId"); + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectRisk_ProjectId", + table: "Prj_T_ProjectRisk", + column: "ProjectId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectRisk_RiskId", + table: "Prj_T_ProjectRisk", + column: "RiskId"); + migrationBuilder.CreateIndex( name: "IX_Prj_T_Projects_CustomerId", table: "Prj_T_Projects", @@ -7830,11 +7973,6 @@ namespace Erp.Platform.Migrations table: "Prj_T_Projects", column: "ProjectPhaseId"); - migrationBuilder.CreateIndex( - name: "IX_Prj_T_Projects_ProjectTaskTypeId", - table: "Prj_T_Projects", - column: "ProjectTaskTypeId"); - migrationBuilder.CreateIndex( name: "IX_Prj_T_Projects_ProjectTypeId", table: "Prj_T_Projects", @@ -7845,6 +7983,51 @@ namespace Erp.Platform.Migrations table: "Prj_T_Projects", column: "StatusId"); + migrationBuilder.CreateIndex( + name: "IX_Prj_T_Projects_TaskTypeId", + table: "Prj_T_Projects", + column: "TaskTypeId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectTask_EmployeeId", + table: "Prj_T_ProjectTask", + column: "EmployeeId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectTask_PhaseId", + table: "Prj_T_ProjectTask", + column: "PhaseId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectTask_ProjectId", + table: "Prj_T_ProjectTask", + column: "ProjectId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectTask_StatusId", + table: "Prj_T_ProjectTask", + column: "StatusId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectTask_TaskTypeId", + table: "Prj_T_ProjectTask", + column: "TaskTypeId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectTeam_EmployeeId", + table: "Prj_T_ProjectTeam", + column: "EmployeeId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectTeam_ManagerId", + table: "Prj_T_ProjectTeam", + column: "ManagerId"); + + migrationBuilder.CreateIndex( + name: "IX_Prj_T_ProjectTeam_ProjectId", + table: "Prj_T_ProjectTeam", + column: "ProjectId"); + migrationBuilder.CreateIndex( name: "IX_Sas_H_City_Country_Code", table: "Sas_H_City", @@ -8176,7 +8359,7 @@ namespace Erp.Platform.Migrations column: "ProjectId", principalTable: "Prj_T_Projects", principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + onDelete: ReferentialAction.Restrict); } /// @@ -8207,21 +8390,9 @@ namespace Erp.Platform.Migrations table: "Hr_T_CostCenter"); migrationBuilder.DropForeignKey( - name: "FK_Prj_T_ProjectPhase_Prj_T_ProjectCategory_ProjectCategoryId", + name: "FK_Prj_T_ProjectPhase_Prj_T_Category_CategoryId", table: "Prj_T_ProjectPhase"); - migrationBuilder.DropForeignKey( - name: "FK_Prj_T_ProjectPhase_Prj_T_ProjectRisk_ProjectRiskId", - table: "Prj_T_ProjectPhase"); - - migrationBuilder.DropForeignKey( - name: "FK_Prj_T_ProjectPhase_Prj_T_ProjectStatus_StatusId", - table: "Prj_T_ProjectPhase"); - - migrationBuilder.DropForeignKey( - name: "FK_Prj_T_Projects_Prj_T_ProjectStatus_StatusId", - table: "Prj_T_Projects"); - migrationBuilder.DropForeignKey( name: "FK_Prj_T_ProjectPhase_Prj_T_Projects_ProjectId", table: "Prj_T_ProjectPhase"); @@ -8529,6 +8700,15 @@ namespace Erp.Platform.Migrations migrationBuilder.DropTable( name: "Plat_H_SettingDefinition"); + migrationBuilder.DropTable( + name: "Prj_T_ProjectRisk"); + + migrationBuilder.DropTable( + name: "Prj_T_ProjectTask"); + + migrationBuilder.DropTable( + name: "Prj_T_ProjectTeam"); + migrationBuilder.DropTable( name: "Prt_T_Interesting"); @@ -8896,13 +9076,7 @@ namespace Erp.Platform.Migrations name: "Hr_T_CostCenter"); migrationBuilder.DropTable( - name: "Prj_T_ProjectCategory"); - - migrationBuilder.DropTable( - name: "Prj_T_ProjectRisk"); - - migrationBuilder.DropTable( - name: "Prj_T_ProjectStatus"); + name: "Prj_T_Category"); migrationBuilder.DropTable( name: "Prj_T_Projects"); @@ -8911,10 +9085,16 @@ namespace Erp.Platform.Migrations name: "Prj_T_ProjectPhase"); migrationBuilder.DropTable( - name: "Prj_T_ProjectTaskType"); + name: "Prj_T_TaskType"); migrationBuilder.DropTable( - name: "Prj_T_ProjectType"); + name: "Prj_T_Type"); + + migrationBuilder.DropTable( + name: "Prj_T_Risk"); + + migrationBuilder.DropTable( + name: "Prj_T_Status"); } } } diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index c3964c7b..f32924cd 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -2064,6 +2064,64 @@ namespace Erp.Platform.Migrations b.ToTable("Acc_T_Cash", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Category", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_Category", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Certificate", b => { b.Property("Id") @@ -9845,9 +9903,6 @@ namespace Erp.Platform.Migrations b.Property("ProjectPhaseId") .HasColumnType("uniqueidentifier"); - b.Property("ProjectTaskTypeId") - .HasColumnType("uniqueidentifier"); - b.Property("ProjectTypeId") .HasColumnType("uniqueidentifier"); @@ -9857,6 +9912,9 @@ namespace Erp.Platform.Migrations b.Property("StatusId") .HasColumnType("uniqueidentifier"); + b.Property("TaskTypeId") + .HasColumnType("uniqueidentifier"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); @@ -9869,73 +9927,15 @@ namespace Erp.Platform.Migrations b.HasIndex("ProjectPhaseId"); - b.HasIndex("ProjectTaskTypeId"); - b.HasIndex("ProjectTypeId"); b.HasIndex("StatusId"); + b.HasIndex("TaskTypeId"); + b.ToTable("Prj_T_Projects", (string)null); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectCategory", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("Description") - .HasMaxLength(500) - .HasColumnType("nvarchar(500)"); - - b.Property("IsActive") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("Prj_T_ProjectCategory", (string)null); - }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectPhase", b => { b.Property("Id") @@ -9959,6 +9959,9 @@ namespace Erp.Platform.Migrations .HasColumnType("decimal(18,2)") .HasDefaultValue(0m); + b.Property("CategoryId") + .HasColumnType("uniqueidentifier"); + b.Property("Code") .IsRequired() .HasMaxLength(100) @@ -10016,13 +10019,10 @@ namespace Erp.Platform.Migrations .HasColumnType("int") .HasDefaultValue(0); - b.Property("ProjectCategoryId") - .HasColumnType("uniqueidentifier"); - b.Property("ProjectId") .HasColumnType("uniqueidentifier"); - b.Property("ProjectRiskId") + b.Property("RiskId") .HasColumnType("uniqueidentifier"); b.Property("Risks") @@ -10046,11 +10046,11 @@ namespace Erp.Platform.Migrations b.HasKey("Id"); - b.HasIndex("ProjectCategoryId"); + b.HasIndex("CategoryId"); b.HasIndex("ProjectId"); - b.HasIndex("ProjectRiskId"); + b.HasIndex("RiskId"); b.HasIndex("StatusId"); @@ -10078,15 +10078,6 @@ namespace Erp.Platform.Migrations .HasColumnType("datetime2") .HasColumnName("DeletionTime"); - b.Property("Description") - .HasMaxLength(500) - .HasColumnType("nvarchar(500)"); - - b.Property("IsActive") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true); - b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -10101,10 +10092,11 @@ namespace Erp.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("RiskId") + .HasColumnType("uniqueidentifier"); b.Property("TenantId") .HasColumnType("uniqueidentifier") @@ -10112,10 +10104,14 @@ namespace Erp.Platform.Migrations b.HasKey("Id"); + b.HasIndex("ProjectId"); + + b.HasIndex("RiskId"); + b.ToTable("Prj_T_ProjectRisk", (string)null); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectStatus", b => + modelBuilder.Entity("Erp.Platform.Entities.ProjectTask", b => { b.Property("Id") .HasColumnType("uniqueidentifier"); @@ -10140,6 +10136,12 @@ namespace Erp.Platform.Migrations .HasMaxLength(500) .HasColumnType("nvarchar(500)"); + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + b.Property("IsActive") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -10160,20 +10162,55 @@ namespace Erp.Platform.Migrations .HasColumnName("LastModifierId"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("PhaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Priority") .IsRequired() .HasMaxLength(50) .HasColumnType("nvarchar(50)"); + b.Property("Progress") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("StatusId") + .HasColumnType("uniqueidentifier"); + + b.Property("TaskTypeId") + .HasColumnType("uniqueidentifier"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); b.HasKey("Id"); - b.ToTable("Prj_T_ProjectStatus", (string)null); + b.HasIndex("EmployeeId"); + + b.HasIndex("PhaseId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("StatusId"); + + b.HasIndex("TaskTypeId"); + + b.ToTable("Prj_T_ProjectTask", (string)null); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectTaskType", b => + modelBuilder.Entity("Erp.Platform.Entities.ProjectTeam", b => { b.Property("Id") .HasColumnType("uniqueidentifier"); @@ -10194,73 +10231,9 @@ namespace Erp.Platform.Migrations .HasColumnType("datetime2") .HasColumnName("DeletionTime"); - b.Property("Description") - .HasMaxLength(500) - .HasColumnType("nvarchar(500)"); - - b.Property("IsActive") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("Prj_T_ProjectTaskType", (string)null); - }); - - modelBuilder.Entity("Erp.Platform.Entities.ProjectType", b => - { - b.Property("Id") + b.Property("EmployeeId") .HasColumnType("uniqueidentifier"); - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("Description") - .HasMaxLength(500) - .HasColumnType("nvarchar(500)"); - - b.Property("IsActive") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true); - b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -10275,10 +10248,11 @@ namespace Erp.Platform.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("Name") - .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); + b.Property("ManagerId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); b.Property("TenantId") .HasColumnType("uniqueidentifier") @@ -10286,7 +10260,13 @@ namespace Erp.Platform.Migrations b.HasKey("Id"); - b.ToTable("Prj_T_ProjectType", (string)null); + b.HasIndex("EmployeeId"); + + b.HasIndex("ManagerId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Prj_T_ProjectTeam", (string)null); }); modelBuilder.Entity("Erp.Platform.Entities.Psychologist", b => @@ -11458,6 +11438,64 @@ namespace Erp.Platform.Migrations b.ToTable("Net_T_Reservation", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Risk", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_Risk", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Route", b => { b.Property("Id") @@ -12545,6 +12583,64 @@ namespace Erp.Platform.Migrations b.ToTable("Prt_T_Source", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Status", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_Status", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.SupplyCardType", b => { b.Property("Id") @@ -12972,6 +13068,64 @@ namespace Erp.Platform.Migrations b.ToTable("Hr_T_SurveyResponse", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.TaskType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_TaskType", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Template360", b => { b.Property("Id") @@ -13140,6 +13294,64 @@ namespace Erp.Platform.Migrations b.ToTable("Net_T_Training", (string)null); }); + modelBuilder.Entity("Erp.Platform.Entities.Type", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("IsActive") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("Prj_T_Type", (string)null); + }); + modelBuilder.Entity("Erp.Platform.Entities.Uom", b => { b.Property("Id") @@ -17424,22 +17636,22 @@ namespace Erp.Platform.Migrations .WithMany("Projects") .HasForeignKey("ProjectPhaseId"); - b.HasOne("Erp.Platform.Entities.ProjectTaskType", null) - .WithMany("Projects") - .HasForeignKey("ProjectTaskTypeId"); - - b.HasOne("Erp.Platform.Entities.ProjectType", "ProjectType") + b.HasOne("Erp.Platform.Entities.Type", "ProjectType") .WithMany("Projects") .HasForeignKey("ProjectTypeId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); - b.HasOne("Erp.Platform.Entities.ProjectStatus", "Status") + b.HasOne("Erp.Platform.Entities.Status", "Status") .WithMany("Projects") .HasForeignKey("StatusId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); + b.HasOne("Erp.Platform.Entities.TaskType", null) + .WithMany("Projects") + .HasForeignKey("TaskTypeId"); + b.Navigation("Customer"); b.Navigation("Manager"); @@ -17451,33 +17663,120 @@ namespace Erp.Platform.Migrations modelBuilder.Entity("Erp.Platform.Entities.ProjectPhase", b => { - b.HasOne("Erp.Platform.Entities.ProjectCategory", "ProjectCategory") + b.HasOne("Erp.Platform.Entities.Category", "Category") .WithMany("ProjectPhases") - .HasForeignKey("ProjectCategoryId") + .HasForeignKey("CategoryId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("Erp.Platform.Entities.Project", "Project") - .WithMany() + .WithMany("Phases") .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); - b.HasOne("Erp.Platform.Entities.ProjectRisk", null) + b.HasOne("Erp.Platform.Entities.Risk", null) .WithMany("ProjectPhases") - .HasForeignKey("ProjectRiskId"); + .HasForeignKey("RiskId"); - b.HasOne("Erp.Platform.Entities.ProjectStatus", "Status") - .WithMany() + b.HasOne("Erp.Platform.Entities.Status", "Status") + .WithMany("ProjectPhases") .HasForeignKey("StatusId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("Project"); + + b.Navigation("Status"); + }); + + modelBuilder.Entity("Erp.Platform.Entities.ProjectRisk", b => + { + b.HasOne("Erp.Platform.Entities.Project", "Project") + .WithMany("Risks") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Risk", "Risk") + .WithMany("ProjectRisks") + .HasForeignKey("RiskId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Project"); - b.Navigation("ProjectCategory"); + b.Navigation("Risk"); + }); + + modelBuilder.Entity("Erp.Platform.Entities.ProjectTask", b => + { + b.HasOne("Erp.Platform.Entities.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.ProjectPhase", "Phase") + .WithMany() + .HasForeignKey("PhaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Project", "Project") + .WithMany("Tasks") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Status", "Status") + .WithMany("ProjectTasks") + .HasForeignKey("StatusId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.TaskType", "TaskType") + .WithMany() + .HasForeignKey("TaskTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Phase"); + + b.Navigation("Project"); b.Navigation("Status"); + + b.Navigation("TaskType"); + }); + + modelBuilder.Entity("Erp.Platform.Entities.ProjectTeam", b => + { + b.HasOne("Erp.Platform.Entities.Employee", "Employee") + .WithMany() + .HasForeignKey("EmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Erp.Platform.Entities.Employee", "Manager") + .WithMany() + .HasForeignKey("ManagerId"); + + b.HasOne("Erp.Platform.Entities.Project", "Project") + .WithMany("Teams") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Employee"); + + b.Navigation("Manager"); + + b.Navigation("Project"); }); modelBuilder.Entity("Erp.Platform.Entities.PutawayCondition", b => @@ -18150,6 +18449,11 @@ namespace Erp.Platform.Migrations b.Navigation("UserBranches"); }); + modelBuilder.Entity("Erp.Platform.Entities.Category", b => + { + b.Navigation("ProjectPhases"); + }); + modelBuilder.Entity("Erp.Platform.Entities.City", b => { b.Navigation("Districts"); @@ -18357,9 +18661,15 @@ namespace Erp.Platform.Migrations b.Navigation("Items"); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectCategory", b => + modelBuilder.Entity("Erp.Platform.Entities.Project", b => { - b.Navigation("ProjectPhases"); + b.Navigation("Phases"); + + b.Navigation("Risks"); + + b.Navigation("Tasks"); + + b.Navigation("Teams"); }); modelBuilder.Entity("Erp.Platform.Entities.ProjectPhase", b => @@ -18367,26 +18677,6 @@ namespace Erp.Platform.Migrations b.Navigation("Projects"); }); - modelBuilder.Entity("Erp.Platform.Entities.ProjectRisk", b => - { - b.Navigation("ProjectPhases"); - }); - - modelBuilder.Entity("Erp.Platform.Entities.ProjectStatus", b => - { - b.Navigation("Projects"); - }); - - modelBuilder.Entity("Erp.Platform.Entities.ProjectTaskType", b => - { - b.Navigation("Projects"); - }); - - modelBuilder.Entity("Erp.Platform.Entities.ProjectType", b => - { - b.Navigation("Projects"); - }); - modelBuilder.Entity("Erp.Platform.Entities.Putaway", b => { b.Navigation("Conditions"); @@ -18431,6 +18721,13 @@ namespace Erp.Platform.Migrations b.Navigation("PurchaseRequests"); }); + modelBuilder.Entity("Erp.Platform.Entities.Risk", b => + { + b.Navigation("ProjectPhases"); + + b.Navigation("ProjectRisks"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Schedule", b => { b.Navigation("Lessons"); @@ -18464,6 +18761,15 @@ namespace Erp.Platform.Migrations b.Navigation("Opportunities"); }); + modelBuilder.Entity("Erp.Platform.Entities.Status", b => + { + b.Navigation("ProjectPhases"); + + b.Navigation("ProjectTasks"); + + b.Navigation("Projects"); + }); + modelBuilder.Entity("Erp.Platform.Entities.SupplyCardType", b => { b.Navigation("Partners"); @@ -18491,6 +18797,11 @@ namespace Erp.Platform.Migrations b.Navigation("Answers"); }); + modelBuilder.Entity("Erp.Platform.Entities.TaskType", b => + { + b.Navigation("Projects"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Template360", b => { b.Navigation("Performans360s"); @@ -18501,6 +18812,11 @@ namespace Erp.Platform.Migrations b.Navigation("Certificates"); }); + modelBuilder.Entity("Erp.Platform.Entities.Type", b => + { + b.Navigation("Projects"); + }); + modelBuilder.Entity("Erp.Platform.Entities.Uom", b => { b.Navigation("MaterialSpecifications"); diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json index f9192753..831bace4 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/Seeds/TenantData.json @@ -100,7 +100,9 @@ "props": null, "description": null, "isActive": true, - "dependencies": ["DynamicEntityComponent"] + "dependencies": [ + "DynamicEntityComponent" + ] } ], "ReportCategories": [ @@ -2429,7 +2431,12 @@ "minSalary": 80000, "maxSalary": 120000, "currency": "USD", - "requiredSkills": ["JavaScript", "TypeScript", "React", "Node.js"], + "requiredSkills": [ + "JavaScript", + "TypeScript", + "React", + "Node.js" + ], "responsibilities": [ "Develop frontend and backend applications", "Write clean and maintainable code", @@ -4124,7 +4131,9 @@ { "postContent": "CI/CD pipeline güncellememiz tamamlandı! Deployment süremiz %40 azaldı. Otomasyonun gücü 💪", "type": "video", - "urls": ["https://www.w3schools.com/html/mov_bbb.mp4"] + "urls": [ + "https://www.w3schools.com/html/mov_bbb.mp4" + ] } ], "SocialPollOptions": [ @@ -6150,5 +6159,77 @@ "description": "Projenin planlama aşamasında olduğunu ifade eder", "isActive": true } + ], + "ProjectTasks": [ + { + "projectCode": "PRJ-2024-001", + "projectPhaseCode": "PH-001", + "name": "Veritabanı Tasarımı", + "description": "Erp sistemi için veritabanı şemasının tasarlanması", + "taskTypeName": "Geliştirme", + "statusName": "Planlama", + "priority": "High", + "employeeCode": "EMP-001", + "startDate": "2024-01-15T00:00:00.000Z", + "endDate": "2024-02-15T00:00:00.000Z", + "progress": 60, + "isActive": true + }, + { + "projectCode": "PRJ-2024-001", + "projectPhaseCode": "PH-002", + "name": "API Dokümantasyonu", + "description": "REST API endpoints dokümantasyonunun hazırlanması", + "taskTypeName": "Dokümantasyon", + "statusName": "Planlama", + "priority": "Medium", + "employeeCode": "EMP-002", + "startDate": "2024-02-01T00:00:00.000Z", + "endDate": "2024-02-20T00:00:00.000Z", + "progress": 0, + "isActive": true + }, + { + "projectCode": "PRJ-2024-001", + "projectPhaseCode": "PH-003", + "name": "Güvenlik Açığı Düzeltme", + "description": "Kritik güvenlik açığının acil olarak düzeltilmesi gerekiyor", + "taskTypeName": "Geliştirme", + "statusName": "Planlama", + "priority": "Urgent", + "employeeCode": "EMP-001", + "startDate": "2024-10-20T00:00:00.000Z", + "endDate": "2024-10-25T00:00:00.000Z", + "progress": 40, + "isActive": true + }, + { + "projectCode": "PRJ-2024-002", + "projectPhaseCode": "PH-004", + "name": "Unit Test Yazımı", + "description": "Backend servisler için unit testlerin yazılması", + "taskTypeName": "Test", + "statusName": "Tamamlandı", + "priority": "High", + "employeeCode": "EMP-003", + "startDate": "2024-01-20T00:00:00.000Z", + "endDate": "2024-02-10T00:00:00.000Z", + "progress": 100, + "isActive": true + }, + { + "projectCode": "PRJ-2024-002", + "projectPhaseCode": "PH-005", + "name": "Performans Optimizasyonu", + "description": "Uygulama performansının iyileştirilmesi", + "taskTypeName": "Geliştirme", + "statusName": "Planlama", + "priority": "High", + "employeeCode": "EMP-002", + "startDate": "2024-10-28T00:00:00.000Z", + "endDate": "2024-11-15T00:00:00.000Z", + "progress": 0, + "isActive": true + } ] -} +} \ No newline at end of file diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs index 55ae9c9a..f8b1ab3c 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantDataSeeder.cs @@ -128,13 +128,14 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency private readonly IRepository _bomRepository; private readonly IRepository _bomComponentRepository; private readonly IRepository _bomOperationRepository; - private readonly IRepository _projectTypeRepository; - private readonly IRepository _projectStatusRepository; + private readonly IRepository _projectTypeRepository; + private readonly IRepository _projectStatusRepository; + private readonly IRepository _projectCategoryRepository; + private readonly IRepository _projectRiskRepository; + private readonly IRepository _projectTaskTypeRepository; private readonly IRepository _projectRepository; - private readonly IRepository _projectCategoryRepository; - private readonly IRepository _projectRiskRepository; private readonly IRepository _projectPhaseRepository; - private readonly IRepository _projectTaskRepository; + private readonly IRepository _projectTaskRepository; public TenantDataSeeder( IClock clock, @@ -246,13 +247,14 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency IRepository bomRepository, IRepository bomComponentRepository, IRepository bomOperationRepository, - IRepository projectTypeRepository, - IRepository projectStatusRepository, + IRepository projectTypeRepository, + IRepository projectStatusRepository, + IRepository projectRiskRepository, + IRepository projectCategoryRepository, + IRepository projectTaskTypeRepository, IRepository projectRepository, - IRepository projectRiskRepository, - IRepository projectCategoryRepository, IRepository projectPhaseRepository, - IRepository projectTaskRepository + IRepository projectTaskRepository ) { _clock = clock; @@ -367,9 +369,10 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency _bomOperationRepository = bomOperationRepository; _projectTypeRepository = projectTypeRepository; _projectStatusRepository = projectStatusRepository; - _projectRepository = projectRepository; _projectCategoryRepository = projectCategoryRepository; _projectRiskRepository = projectRiskRepository; + _projectTaskTypeRepository = projectTaskTypeRepository; + _projectRepository = projectRepository; _projectPhaseRepository = projectPhaseRepository; _projectTaskRepository = projectTaskRepository; } @@ -2474,7 +2477,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency if (exists) continue; - await _projectTypeRepository.InsertAsync(new ProjectType + await _projectTypeRepository.InsertAsync(new Entities.Type { Name = item.Name, Description = item.Description, @@ -2488,7 +2491,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency if (exists) continue; - await _projectStatusRepository.InsertAsync(new ProjectStatus + await _projectStatusRepository.InsertAsync(new Status { Name = item.Name, Description = item.Description, @@ -2535,7 +2538,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency if (exists) continue; - await _projectRiskRepository.InsertAsync(new ProjectRisk + await _projectRiskRepository.InsertAsync(new Risk { Name = item.Name, Description = item.Description, @@ -2549,7 +2552,21 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency if (exists) continue; - await _projectCategoryRepository.InsertAsync(new ProjectCategory + await _projectCategoryRepository.InsertAsync(new Category + { + Name = item.Name, + Description = item.Description, + IsActive = item.IsActive + }, autoSave: true); + } + + foreach (var item in items.ProjectTaskTypes) + { + var exists = await _projectTaskTypeRepository.AnyAsync(x => x.Name == item.Name); + if (exists) + continue; + + await _projectTaskTypeRepository.InsertAsync(new TaskType { Name = item.Name, Description = item.Description, @@ -2564,17 +2581,17 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency continue; var project = await _projectRepository.FirstOrDefaultAsync(x => x.Code == item.ProjectCode); - var projectCategory = await _projectCategoryRepository.FirstOrDefaultAsync(x => x.Name == item.CategoryName); - var projectStatus = await _projectStatusRepository.FirstOrDefaultAsync(x => x.Name == item.StatusName); - + var category = await _projectCategoryRepository.FirstOrDefaultAsync(x => x.Name == item.CategoryName); + var status = await _projectStatusRepository.FirstOrDefaultAsync(x => x.Name == item.StatusName); + await _projectPhaseRepository.InsertAsync(new ProjectPhase { ProjectId = project?.Id, - ProjectCategoryId = projectCategory?.Id, + CategoryId = category?.Id, Code = item.Code, Name = item.Name, Description = item.Description, - StatusId = projectStatus?.Id, + StatusId = status?.Id, Sequence = item.Sequence, StartDate = item.StartDate, EndDate = item.EndDate, @@ -2588,16 +2605,31 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency }, autoSave: true); } - foreach (var item in items.ProjectTaskTypes) + foreach (var item in items.ProjectTasks) { var exists = await _projectTaskRepository.AnyAsync(x => x.Name == item.Name); if (exists) continue; - await _projectTaskRepository.InsertAsync(new ProjectTaskType + var project = await _projectRepository.FirstOrDefaultAsync(x => x.Code == item.ProjectCode); + var projectPhase = await _projectPhaseRepository.FirstOrDefaultAsync(x => x.Code == item.ProjectPhaseCode); + var taskType = await _projectTaskTypeRepository.FirstOrDefaultAsync(x => x.Name == item.TaskTypeName); + var status = await _projectStatusRepository.FirstOrDefaultAsync(x => x.Name == item.StatusName); + var employee = await _employeeRepository.FirstOrDefaultAsync(x => x.Code == item.EmployeeCode); + + await _projectTaskRepository.InsertAsync(new ProjectTask { + ProjectId = project?.Id, + PhaseId = projectPhase?.Id, Name = item.Name, Description = item.Description, + TaskTypeId = taskType?.Id, + Priority = item.Priority, + StatusId = status?.Id, + EmployeeId = employee?.Id, + StartDate = item.StartDate, + EndDate = item.EndDate, + Progress = item.Progress, IsActive = item.IsActive }, autoSave: true); } diff --git a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs index 26449459..82ffa121 100644 --- a/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs +++ b/api/src/Erp.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs @@ -133,8 +133,30 @@ public class TenantSeederDto public List Projects { get; set; } public List ProjectRisks { get; set; } public List ProjectCategories { get; set; } - public List ProjectPhases { get; set; } public List ProjectTaskTypes { get; set; } + public List ProjectPhases { get; set; } + public List ProjectTasks { get; set; } +} + +public class ProjectTaskSeedDto +{ + public string ProjectCode { get; set; } + public string ProjectPhaseCode { get; set; } + + public string Name { get; set; } + public string Description { get; set; } + + public string TaskTypeName { get; set; } + public string Priority { get; set; } + + public string StatusName { get; set; } + public string EmployeeCode { get; set; } + + public DateTime StartDate { get; set; } + public DateTime EndDate { get; set; } + + public int Progress { get; set; } + public bool IsActive { get; set; } } public class ProjectTaskTypeSeedDto diff --git a/ui/src/proxy/form/models.ts b/ui/src/proxy/form/models.ts index 25c12ca0..9d88c0fc 100644 --- a/ui/src/proxy/form/models.ts +++ b/ui/src/proxy/form/models.ts @@ -748,6 +748,7 @@ export enum ColumnRowTypeListOptions { export enum SubFormTabTypeEnum { List = 'List', + Tree = 'Tree', Form = 'Form', Chart = 'Chart', Pivot = 'Pivot', diff --git a/ui/src/views/admin/listForm/edit/options.ts b/ui/src/views/admin/listForm/edit/options.ts index addf2b64..7682c4aa 100644 --- a/ui/src/views/admin/listForm/edit/options.ts +++ b/ui/src/views/admin/listForm/edit/options.ts @@ -203,6 +203,7 @@ export const columnEditorTypeListOptions = [ export const listFormTypeOptions = [ { value: 'Form', label: 'Form' }, { value: 'List', label: 'List' }, + { value: 'Tree', label: 'Tree' }, { value: 'Chart', label: 'Chart' }, ] diff --git a/ui/src/views/form/SubForms.tsx b/ui/src/views/form/SubForms.tsx index e1fcefc4..552d7cf9 100644 --- a/ui/src/views/form/SubForms.tsx +++ b/ui/src/views/form/SubForms.tsx @@ -12,6 +12,7 @@ import FormEdit from './FormEdit' import FormNew from './FormNew' import FormView from './FormView' import { useLocalization } from '@/utils/hooks/useLocalization' +import Tree from '../list/Tree' const SubForms = (props: { gridDto: GridDto @@ -108,6 +109,15 @@ const SubForms = (props: { refreshData={subForm.isRefresh ? refreshData : undefined} /> )} + {subForm.tabType == SubFormTabTypeEnum.Tree && ( + + )} {subForm.tabType == SubFormTabTypeEnum.Form && (subForm.tabMode == 'edit' ? ( { permission: 'App.Intranet.Announcement.Widget', column: 'right', }, - { id: 'priority-tasks', permission: 'App.Project.TaskType.Widget', column: 'right' }, + { id: 'priority-tasks', permission: 'App.Project.ProjectTask.Widget', column: 'right' }, { id: 'meal-weekly-menu', permission: 'App.Intranet.Meal.Widget', column: 'right' }, { id: 'shuttle-route', permission: 'App.Intranet.ShuttleRoute.Widget', column: 'right' }, { id: 'leave-management', permission: 'App.Hr.Leave.Widget', column: 'right' },