Proje Task

This commit is contained in:
Sedat ÖZTÜRK 2025-11-27 14:06:36 +03:00
parent 58ab8661fb
commit b11b5f2185
15 changed files with 486 additions and 13 deletions

View file

@ -9616,6 +9616,12 @@
{
"resourceName": "Platform",
"key": "App.Project.Task",
"tr": "Görev Tanımları",
"en": "Task Definitions"
},
{
"resourceName": "Platform",
"key": "App.Project.Tasks",
"tr": "Görevler",
"en": "Tasks"
},

View file

@ -1286,6 +1286,129 @@ public class ListFormSeeder_Project : IDataSeedContributor, ITransientDependency
#endregion
}
#endregion
#region Project Task
listFormName = AppCodes.Project.Task;
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.ProjectTask)),
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.ProjectTask)),
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson,
PagerOptionJson = DefaultPagerOptionJson,
EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 300, true, true, true, true, false),
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson,
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>()
{
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 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
}
}

View file

@ -2614,11 +2614,21 @@
"RequiredPermissionName": "App.Project.Risk",
"IsDisabled": false
},
{
"ParentCode": "App.Project",
"Code": "App.Project.Task",
"DisplayName": "App.Project.Task",
"Order": 5,
"Url": "/admin/list/App.Project.Task",
"Icon": "FcPlanner",
"RequiredPermissionName": "App.Project.Task",
"IsDisabled": false
},
{
"ParentCode": "App.Project",
"Code": "App.Project.Projects",
"DisplayName": "App.Project.Projects",
"Order": 5,
"Order": 6,
"Url": "/admin/list/App.Project.Projects",
"Icon": "FcTodoList",
"RequiredPermissionName": "App.Project.Projects",
@ -2628,7 +2638,7 @@
"ParentCode": "App.Project",
"Code": "App.Project.Phase",
"DisplayName": "App.Project.Phase",
"Order": 6,
"Order": 7,
"Url": "/admin/list/App.Project.Phase",
"Icon": "FcParallelTasks",
"RequiredPermissionName": "App.Project.Phase",
@ -2636,19 +2646,19 @@
},
{
"ParentCode": "App.Project",
"Code": "App.Project.Task",
"DisplayName": "App.Project.Task",
"Order": 7,
"Code": "App.Project.Tasks",
"DisplayName": "App.Project.Tasks",
"Order": 8,
"Url": "/admin/projects/tasks",
"Icon": "FcBullish",
"RequiredPermissionName": "App.Project.Task",
"RequiredPermissionName": "App.Project.Tasks",
"IsDisabled": false
},
{
"ParentCode": "App.Project",
"Code": "App.Project.Activity",
"DisplayName": "App.Project.Activity",
"Order": 8,
"Order": 9,
"Url": "/admin/projects/activities",
"Icon": "FcPlanner",
"RequiredPermissionName": "App.Project.Activity",
@ -2658,7 +2668,7 @@
"ParentCode": "App.Project",
"Code": "App.Project.Workload",
"DisplayName": "App.Project.Workload",
"Order": 9,
"Order": 10,
"Url": "/admin/projects/workload",
"Icon": "FcFlowChart",
"RequiredPermissionName": "App.Project.Workload",
@ -2668,7 +2678,7 @@
"ParentCode": "App.Project",
"Code": "App.Project.CostTracking",
"DisplayName": "App.Project.CostTracking",
"Order": 10,
"Order": 11,
"Url": "/admin/projects/cost-tracking",
"Icon": "FcMoneyTransfer",
"RequiredPermissionName": "App.Project.CostTracking",
@ -2678,7 +2688,7 @@
"ParentCode": "App.Project",
"Code": "App.Project.DailyUpdates",
"DisplayName": "App.Project.DailyUpdates",
"Order": 11,
"Order": 12,
"Url": "/admin/projects/daily-updates",
"Icon": "FcConferenceCall",
"RequiredPermissionName": "App.Project.DailyUpdates",

View file

@ -8467,6 +8467,71 @@
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.Project",
"Name": "App.Project.Tasks",
"ParentName": null,
"DisplayName": "App.Project.Tasks",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.Project",
"Name": "App.Project.Tasks.Create",
"ParentName": "App.Project.Tasks",
"DisplayName": "Create",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.Project",
"Name": "App.Project.Tasks.Update",
"ParentName": "App.Project.Tasks",
"DisplayName": "Update",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.Project",
"Name": "App.Project.Tasks.Delete",
"ParentName": "App.Project.Tasks",
"DisplayName": "Delete",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.Project",
"Name": "App.Project.Tasks.Export",
"ParentName": "App.Project.Tasks",
"DisplayName": "Export",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.Project",
"Name": "App.Project.Tasks.Import",
"ParentName": "App.Project.Tasks",
"DisplayName": "Import",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.Project",
"Name": "App.Project.Tasks.Note",
"ParentName": "App.Project.Tasks",
"DisplayName": "Note",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.Project",
"Name": "App.Project.Activity",

View file

@ -193,5 +193,6 @@ public enum TableNameEnum
ProjectStatus,
ProjectRisk,
ProjectPhase,
ProjectCategory
ProjectCategory,
ProjectTask
}

View file

@ -233,6 +233,7 @@ public static class TableNameResolver
{ nameof(TableNameEnum.ProjectCategory), (TablePrefix.TenantByName, MenuPrefix.Project) },
{ nameof(TableNameEnum.ProjectPhase), (TablePrefix.TenantByName, MenuPrefix.Project) },
{ nameof(TableNameEnum.Projects), (TablePrefix.TenantByName, MenuPrefix.Project) },
{ nameof(TableNameEnum.ProjectTask), (TablePrefix.TenantByName, MenuPrefix.Project) },
};
public static string GetFullTableName(string tableName)

View file

@ -568,6 +568,7 @@ public static class SeedConsts
public const string Risk = Default + ".Risk";
public const string Category = Default + ".Category";
public const string Phase = Default + ".Phase";
public const string Task = Default + ".Task";
}
public static class Mrp

View file

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
namespace Erp.Platform.Entities;
public class ProjectTask : FullAuditedEntity<Guid>, IMultiTenant
{
public Guid? TenantId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
public ICollection<Project> Projects { get; set; }
}

View file

@ -274,6 +274,7 @@ public class PlatformDbContext :
public DbSet<ProjectRisk> ProjectRisks { get; set; }
public DbSet<ProjectCategory> ProjectCategories { get; set; }
public DbSet<ProjectPhase> ProjectPhases { get; set; }
public DbSet<ProjectTask> ProjectTasks { get; set; }
#endregion
public PlatformDbContext(DbContextOptions<PlatformDbContext> options)
@ -3307,5 +3308,15 @@ public class PlatformDbContext :
b.Property(x => x.IsActive).HasDefaultValue(true);
});
builder.Entity<ProjectTask>(b =>
{
b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ProjectTask)), 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);
});
}
}

View file

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace Erp.Platform.Migrations
{
[DbContext(typeof(PlatformDbContext))]
[Migration("20251127083732_Initial")]
[Migration("20251127105051_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -9848,6 +9848,9 @@ namespace Erp.Platform.Migrations
b.Property<Guid?>("ProjectPhaseId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ProjectTaskId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ProjectTypeId")
.HasColumnType("uniqueidentifier");
@ -9869,6 +9872,8 @@ namespace Erp.Platform.Migrations
b.HasIndex("ProjectPhaseId");
b.HasIndex("ProjectTaskId");
b.HasIndex("ProjectTypeId");
b.HasIndex("StatusId");
@ -10171,6 +10176,64 @@ namespace Erp.Platform.Migrations
b.ToTable("Prj_T_ProjectStatus", (string)null);
});
modelBuilder.Entity("Erp.Platform.Entities.ProjectTask", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("uniqueidentifier")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<bool>("IsActive")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(true);
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.ToTable("Prj_T_ProjectTask", (string)null);
});
modelBuilder.Entity("Erp.Platform.Entities.ProjectType", b =>
{
b.Property<Guid>("Id")
@ -17364,6 +17427,10 @@ namespace Erp.Platform.Migrations
.WithMany("Projects")
.HasForeignKey("ProjectPhaseId");
b.HasOne("Erp.Platform.Entities.ProjectTask", null)
.WithMany("Projects")
.HasForeignKey("ProjectTaskId");
b.HasOne("Erp.Platform.Entities.ProjectType", "ProjectType")
.WithMany("Projects")
.HasForeignKey("ProjectTypeId")
@ -18313,6 +18380,11 @@ namespace Erp.Platform.Migrations
b.Navigation("Projects");
});
modelBuilder.Entity("Erp.Platform.Entities.ProjectTask", b =>
{
b.Navigation("Projects");
});
modelBuilder.Entity("Erp.Platform.Entities.ProjectType", b =>
{
b.Navigation("Projects");

View file

@ -1889,6 +1889,28 @@ namespace Erp.Platform.Migrations
table.PrimaryKey("PK_Prj_T_ProjectStatus", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Prj_T_ProjectTask",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
Name = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
Description = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
IsActive = table.Column<bool>(type: "bit", nullable: false, defaultValue: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Prj_T_ProjectTask", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Prj_T_ProjectType",
columns: table => new
@ -6818,6 +6840,7 @@ namespace Erp.Platform.Migrations
Progress = table.Column<int>(type: "int", nullable: false, defaultValue: 0),
IsActive = table.Column<bool>(type: "bit", nullable: false, defaultValue: true),
ProjectPhaseId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
ProjectTaskId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
@ -6850,6 +6873,11 @@ namespace Erp.Platform.Migrations
principalTable: "Prj_T_ProjectStatus",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_Prj_T_Projects_Prj_T_ProjectTask_ProjectTaskId",
column: x => x.ProjectTaskId,
principalTable: "Prj_T_ProjectTask",
principalColumn: "Id");
table.ForeignKey(
name: "FK_Prj_T_Projects_Prj_T_ProjectType_ProjectTypeId",
column: x => x.ProjectTypeId,
@ -7802,6 +7830,11 @@ namespace Erp.Platform.Migrations
table: "Prj_T_Projects",
column: "ProjectPhaseId");
migrationBuilder.CreateIndex(
name: "IX_Prj_T_Projects_ProjectTaskId",
table: "Prj_T_Projects",
column: "ProjectTaskId");
migrationBuilder.CreateIndex(
name: "IX_Prj_T_Projects_ProjectTypeId",
table: "Prj_T_Projects",
@ -8877,6 +8910,9 @@ namespace Erp.Platform.Migrations
migrationBuilder.DropTable(
name: "Prj_T_ProjectPhase");
migrationBuilder.DropTable(
name: "Prj_T_ProjectTask");
migrationBuilder.DropTable(
name: "Prj_T_ProjectType");
}

View file

@ -9845,6 +9845,9 @@ namespace Erp.Platform.Migrations
b.Property<Guid?>("ProjectPhaseId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("ProjectTaskId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ProjectTypeId")
.HasColumnType("uniqueidentifier");
@ -9866,6 +9869,8 @@ namespace Erp.Platform.Migrations
b.HasIndex("ProjectPhaseId");
b.HasIndex("ProjectTaskId");
b.HasIndex("ProjectTypeId");
b.HasIndex("StatusId");
@ -10168,6 +10173,64 @@ namespace Erp.Platform.Migrations
b.ToTable("Prj_T_ProjectStatus", (string)null);
});
modelBuilder.Entity("Erp.Platform.Entities.ProjectTask", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("uniqueidentifier")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<bool>("IsActive")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(true);
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.ToTable("Prj_T_ProjectTask", (string)null);
});
modelBuilder.Entity("Erp.Platform.Entities.ProjectType", b =>
{
b.Property<Guid>("Id")
@ -17361,6 +17424,10 @@ namespace Erp.Platform.Migrations
.WithMany("Projects")
.HasForeignKey("ProjectPhaseId");
b.HasOne("Erp.Platform.Entities.ProjectTask", null)
.WithMany("Projects")
.HasForeignKey("ProjectTaskId");
b.HasOne("Erp.Platform.Entities.ProjectType", "ProjectType")
.WithMany("Projects")
.HasForeignKey("ProjectTypeId")
@ -18310,6 +18377,11 @@ namespace Erp.Platform.Migrations
b.Navigation("Projects");
});
modelBuilder.Entity("Erp.Platform.Entities.ProjectTask", b =>
{
b.Navigation("Projects");
});
modelBuilder.Entity("Erp.Platform.Entities.ProjectType", b =>
{
b.Navigation("Projects");

View file

@ -6118,5 +6118,37 @@
"sequence": 0,
"isActive": false
}
],
"ProjectTasks": [
{
"name": "Geliştirme",
"description": "Projenin planlama aşamasında olduğunu ifade eder",
"isActive": true
},
{
"name": "Test",
"description": "Projenin aktif olarak yürütüldüğünü ifade eder",
"isActive": true
},
{
"name": "Dokümantasyon",
"description": "Projenin belirli nedenlerle geçici olarak durdurulduğunu ifade eder",
"isActive": true
},
{
"name": "İnceleme",
"description": "Projenin tüm çalışmalarının başarıyla tamamlandığını ifade eder",
"isActive": true
},
{
"name": "Dağıtım",
"description": "Projenin iptal edildiğini ifade eder",
"isActive": true
},
{
"name": "Toplantı",
"description": "Projenin planlama aşamasında olduğunu ifade eder",
"isActive": true
}
]
}

View file

@ -134,6 +134,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
private readonly IRepository<ProjectCategory, Guid> _projectCategoryRepository;
private readonly IRepository<ProjectRisk, Guid> _projectRiskRepository;
private readonly IRepository<ProjectPhase, Guid> _projectPhaseRepository;
private readonly IRepository<ProjectTask, Guid> _projectTaskRepository;
public TenantDataSeeder(
IClock clock,
@ -250,7 +251,8 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
IRepository<Project, Guid> projectRepository,
IRepository<ProjectRisk, Guid> projectRiskRepository,
IRepository<ProjectCategory, Guid> projectCategoryRepository,
IRepository<ProjectPhase, Guid> projectPhaseRepository
IRepository<ProjectPhase, Guid> projectPhaseRepository,
IRepository<ProjectTask, Guid> projectTaskRepository
)
{
_clock = clock;
@ -369,6 +371,7 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
_projectCategoryRepository = projectCategoryRepository;
_projectRiskRepository = projectRiskRepository;
_projectPhaseRepository = projectPhaseRepository;
_projectTaskRepository = projectTaskRepository;
}
private static IConfigurationRoot BuildConfiguration()
@ -2584,6 +2587,20 @@ public class TenantDataSeeder : IDataSeedContributor, ITransientDependency
IsActive = item.IsActive
}, autoSave: true);
}
foreach (var item in items.ProjectTasks)
{
var exists = await _projectTaskRepository.AnyAsync(x => x.Name == item.Name);
if (exists)
continue;
await _projectTaskRepository.InsertAsync(new ProjectTask
{
Name = item.Name,
Description = item.Description,
IsActive = item.IsActive
}, autoSave: true);
}
}
}

View file

@ -134,6 +134,14 @@ public class TenantSeederDto
public List<ProjectRiskSeedDto> ProjectRisks { get; set; }
public List<ProjectCategorySeedDto> ProjectCategories { get; set; }
public List<ProjectPhaseSeedDto> ProjectPhases { get; set; }
public List<ProjectTaskSeedDto> ProjectTasks { get; set; }
}
public class ProjectTaskSeedDto
{
public string Name { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
}
public class ProjectPhaseSeedDto