Смена отноения курса и рецепта #8
@ -7,7 +7,6 @@ namespace PolyclinicContracts.BindingModels
|
||||
public int DaysCount { get; set; }
|
||||
public int PillsPerDay { get; set; }
|
||||
public string Comment { get; set; } = string.Empty;
|
||||
public int RecipeId { get; set; }
|
||||
public Dictionary<int, IDiagnoseModel> CourseDiagnoses { get; set; } = new();
|
||||
public int Id { get; set; }
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ namespace PolyclinicContracts.BindingModels
|
||||
public class RecipeBindingModel : IRecipeModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int CourseId { get; set; }
|
||||
public int ProceduresCount { get; set; }
|
||||
public string Comment { get; set; } = string.Empty;
|
||||
public Dictionary<int, IProcedureModel> RecipeProcedures { get; } = new();
|
||||
|
@ -11,7 +11,6 @@ namespace PolyclinicContracts.ViewModels
|
||||
public int PillsPerDay { get; set; }
|
||||
[DisplayName("Комментарий")]
|
||||
public string Comment { get; set; } = string.Empty;
|
||||
public int RecipeId { get; set; }
|
||||
public Dictionary<int, IDiagnoseModel> CourseDiagnoses { get; set; } = new();
|
||||
public int Id { get; set; }
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ namespace PolyclinicContracts.ViewModels
|
||||
|
||||
[DisplayName("Комментарий")]
|
||||
public string Comment { get; set; } = string.Empty;
|
||||
|
||||
public int CourseId { get; set; }
|
||||
public Dictionary<int, IProcedureModel> RecipeProcedures { get; } = new();
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,6 @@
|
||||
int DaysCount { get; }
|
||||
int PillsPerDay { get; }
|
||||
string Comment { get; }
|
||||
int RecipeId { get; }
|
||||
Dictionary<int, IDiagnoseModel> CourseDiagnoses { get; }
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
{
|
||||
int ProceduresCount { get; set; }
|
||||
string Comment { get; set; }
|
||||
int CourseId { get; set; }
|
||||
Dictionary<int, IProcedureModel> RecipeProcedures { get; }
|
||||
}
|
||||
}
|
@ -45,7 +45,6 @@ namespace PolyclinicDatabaseImplement.Implements
|
||||
{
|
||||
using var context = new PolyclinicDatabase();
|
||||
return context.Courses
|
||||
.Include(x => x.Recipe)
|
||||
.Include(x => x.Diagnoses)
|
||||
.ThenInclude(x => x.Diagnose)
|
||||
.Select(x => x.GetViewModel)
|
||||
|
@ -14,6 +14,7 @@ namespace PolyclinicDatabaseImplement.Implements
|
||||
{
|
||||
using var database = new PolyclinicDatabase();
|
||||
return database.Recipes
|
||||
.Include(x => x.Course)
|
||||
.Include(x => x.Procedures)
|
||||
.ThenInclude(x => x.Procedure)
|
||||
.Select(x => x.GetViewModel)
|
||||
|
@ -11,8 +11,8 @@ using SecuritySystemDatabaseImplement;
|
||||
namespace PolyclinicDatabaseImplement.Migrations
|
||||
{
|
||||
[DbContext(typeof(PolyclinicDatabase))]
|
||||
[Migration("20240430121818_InitCreate")]
|
||||
partial class InitCreate
|
||||
[Migration("20240430185032_InitDatabase")]
|
||||
partial class InitDatabase
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
@ -42,13 +42,8 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
b.Property<int>("PillsPerDay")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("RecipeId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("RecipeId");
|
||||
|
||||
b.ToTable("Courses");
|
||||
});
|
||||
|
||||
@ -168,11 +163,16 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<int>("CourseId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("ProceduresCount")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("CourseId");
|
||||
|
||||
b.ToTable("Recipes");
|
||||
});
|
||||
|
||||
@ -294,17 +294,6 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
b.ToTable("Users");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("PolyclinicDatabaseImplement.Models.Course", b =>
|
||||
{
|
||||
b.HasOne("PolyclinicDatabaseImplement.Models.Recipe", "Recipe")
|
||||
.WithMany()
|
||||
.HasForeignKey("RecipeId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Recipe");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("PolyclinicDatabaseImplement.Models.CourseDiagnose", b =>
|
||||
{
|
||||
b.HasOne("PolyclinicDatabaseImplement.Models.Course", "Course")
|
||||
@ -354,6 +343,17 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
b.Navigation("Symptom");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("PolyclinicDatabaseImplement.Models.Recipe", b =>
|
||||
{
|
||||
b.HasOne("PolyclinicDatabaseImplement.Models.Course", "Course")
|
||||
.WithMany()
|
||||
.HasForeignKey("CourseId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Course");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("PolyclinicDatabaseImplement.Models.RecipeProcedure", b =>
|
||||
{
|
||||
b.HasOne("PolyclinicDatabaseImplement.Models.Procedure", "Procedure")
|
@ -5,11 +5,26 @@
|
||||
namespace PolyclinicDatabaseImplement.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class InitCreate : Migration
|
||||
public partial class InitDatabase : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Courses",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
DaysCount = table.Column<int>(type: "int", nullable: false),
|
||||
PillsPerDay = table.Column<int>(type: "int", nullable: false),
|
||||
Comment = table.Column<string>(type: "nvarchar(max)", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Courses", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Procedures",
|
||||
columns: table => new
|
||||
@ -25,20 +40,6 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
table.PrimaryKey("PK_Procedures", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Recipes",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
ProceduresCount = table.Column<int>(type: "int", nullable: false),
|
||||
Comment = table.Column<string>(type: "nvarchar(max)", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Recipes", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Symptomes",
|
||||
columns: table => new
|
||||
@ -70,49 +71,22 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Courses",
|
||||
name: "Recipes",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
DaysCount = table.Column<int>(type: "int", nullable: false),
|
||||
PillsPerDay = table.Column<int>(type: "int", nullable: false),
|
||||
ProceduresCount = table.Column<int>(type: "int", nullable: false),
|
||||
Comment = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||
RecipeId = table.Column<int>(type: "int", nullable: false)
|
||||
CourseId = table.Column<int>(type: "int", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Courses", x => x.Id);
|
||||
table.PrimaryKey("PK_Recipes", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_Courses_Recipes_RecipeId",
|
||||
column: x => x.RecipeId,
|
||||
principalTable: "Recipes",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "RecipeProcedures",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
ProcedureId = table.Column<int>(type: "int", nullable: false),
|
||||
RecipeId = table.Column<int>(type: "int", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_RecipeProcedures", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_RecipeProcedures_Procedures_ProcedureId",
|
||||
column: x => x.ProcedureId,
|
||||
principalTable: "Procedures",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_RecipeProcedures_Recipes_RecipeId",
|
||||
column: x => x.RecipeId,
|
||||
principalTable: "Recipes",
|
||||
name: "FK_Recipes_Courses_CourseId",
|
||||
column: x => x.CourseId,
|
||||
principalTable: "Courses",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
@ -145,6 +119,53 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Diagnoses",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||
Comment = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||
UserId = table.Column<int>(type: "int", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Diagnoses", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_Diagnoses_Users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "Users",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "RecipeProcedures",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
ProcedureId = table.Column<int>(type: "int", nullable: false),
|
||||
RecipeId = table.Column<int>(type: "int", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_RecipeProcedures", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_RecipeProcedures_Procedures_ProcedureId",
|
||||
column: x => x.ProcedureId,
|
||||
principalTable: "Procedures",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_RecipeProcedures_Recipes_RecipeId",
|
||||
column: x => x.RecipeId,
|
||||
principalTable: "Recipes",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "SymptomRecipes",
|
||||
columns: table => new
|
||||
@ -171,27 +192,6 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Diagnoses",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||
Comment = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||
UserId = table.Column<int>(type: "int", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Diagnoses", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_Diagnoses_Users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "Users",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "CourseDiagnoses",
|
||||
columns: table => new
|
||||
@ -254,11 +254,6 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
table: "CourseDiagnoses",
|
||||
column: "DiagnoseId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Courses_RecipeId",
|
||||
table: "Courses",
|
||||
column: "RecipeId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Diagnoses_UserId",
|
||||
table: "Diagnoses",
|
||||
@ -284,6 +279,11 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
table: "RecipeProcedures",
|
||||
column: "RecipeId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Recipes_CourseId",
|
||||
table: "Recipes",
|
||||
column: "CourseId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_SymptomDiagnoses_DiagnoseId",
|
||||
table: "SymptomDiagnoses",
|
||||
@ -323,23 +323,23 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
migrationBuilder.DropTable(
|
||||
name: "SymptomRecipes");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Courses");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Procedures");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Diagnoses");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Symptomes");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Recipes");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Symptomes");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Users");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Courses");
|
||||
}
|
||||
}
|
||||
}
|
@ -39,13 +39,8 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
b.Property<int>("PillsPerDay")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("RecipeId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("RecipeId");
|
||||
|
||||
b.ToTable("Courses");
|
||||
});
|
||||
|
||||
@ -165,11 +160,16 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<int>("CourseId")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("ProceduresCount")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("CourseId");
|
||||
|
||||
b.ToTable("Recipes");
|
||||
});
|
||||
|
||||
@ -291,17 +291,6 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
b.ToTable("Users");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("PolyclinicDatabaseImplement.Models.Course", b =>
|
||||
{
|
||||
b.HasOne("PolyclinicDatabaseImplement.Models.Recipe", "Recipe")
|
||||
.WithMany()
|
||||
.HasForeignKey("RecipeId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Recipe");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("PolyclinicDatabaseImplement.Models.CourseDiagnose", b =>
|
||||
{
|
||||
b.HasOne("PolyclinicDatabaseImplement.Models.Course", "Course")
|
||||
@ -351,6 +340,17 @@ namespace PolyclinicDatabaseImplement.Migrations
|
||||
b.Navigation("Symptom");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("PolyclinicDatabaseImplement.Models.Recipe", b =>
|
||||
{
|
||||
b.HasOne("PolyclinicDatabaseImplement.Models.Course", "Course")
|
||||
.WithMany()
|
||||
.HasForeignKey("CourseId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Course");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("PolyclinicDatabaseImplement.Models.RecipeProcedure", b =>
|
||||
{
|
||||
b.HasOne("PolyclinicDatabaseImplement.Models.Procedure", "Procedure")
|
||||
|
@ -15,9 +15,6 @@ namespace PolyclinicDatabaseImplement.Models
|
||||
[Required]
|
||||
public int PillsPerDay { get; set; }
|
||||
public string Comment { get; set; } = string.Empty;
|
||||
[Required]
|
||||
public int RecipeId { get; set; }
|
||||
public virtual Recipe Recipe { get; set; } = new();
|
||||
[ForeignKey("CourseId")]
|
||||
public virtual List<CourseDiagnose> Diagnoses { get; set; } = new();
|
||||
private Dictionary<int, IDiagnoseModel>? _courseDiagnoses = null;
|
||||
@ -45,7 +42,6 @@ namespace PolyclinicDatabaseImplement.Models
|
||||
DaysCount = model.DaysCount,
|
||||
PillsPerDay = model.PillsPerDay,
|
||||
Comment = model.Comment,
|
||||
RecipeId = model.RecipeId,
|
||||
Diagnoses = model.CourseDiagnoses.Select(courseDiagnose => new CourseDiagnose
|
||||
{
|
||||
Diagnose = context.Diagnoses.First(diagnose => diagnose.Id == courseDiagnose.Key)
|
||||
@ -58,7 +54,6 @@ namespace PolyclinicDatabaseImplement.Models
|
||||
DaysCount = model.DaysCount;
|
||||
PillsPerDay = model.PillsPerDay;
|
||||
Comment = model.Comment;
|
||||
RecipeId = model.RecipeId;
|
||||
}
|
||||
|
||||
public CourseViewModel GetViewModel => new()
|
||||
@ -67,7 +62,6 @@ namespace PolyclinicDatabaseImplement.Models
|
||||
DaysCount = DaysCount,
|
||||
PillsPerDay = PillsPerDay,
|
||||
Comment = Comment,
|
||||
RecipeId = RecipeId,
|
||||
CourseDiagnoses = CourseDiagnoses
|
||||
};
|
||||
|
||||
|
@ -16,6 +16,8 @@ namespace PolyclinicDatabaseImplement.Models
|
||||
|
||||
[Required]
|
||||
public string Comment { get; set; } = string.Empty;
|
||||
public int CourseId { get; set; }
|
||||
public virtual Course Course { get; set; } = new();
|
||||
|
||||
private Dictionary<int, IProcedureModel>? _recipeProcedures = null;
|
||||
|
||||
@ -42,6 +44,7 @@ namespace PolyclinicDatabaseImplement.Models
|
||||
Id = bindingModel.Id,
|
||||
ProceduresCount = bindingModel.ProceduresCount,
|
||||
Comment = bindingModel.Comment,
|
||||
CourseId = bindingModel.CourseId,
|
||||
Procedures = bindingModel.RecipeProcedures.Select(x => new RecipeProcedure
|
||||
{
|
||||
Recipe = database.Recipes.First(y => y.Id == x.Key)
|
||||
@ -53,13 +56,15 @@ namespace PolyclinicDatabaseImplement.Models
|
||||
{
|
||||
ProceduresCount = bindingModel.ProceduresCount;
|
||||
Comment = bindingModel.Comment;
|
||||
CourseId = bindingModel.CourseId;
|
||||
}
|
||||
|
||||
public RecipeViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
ProceduresCount = ProceduresCount,
|
||||
Comment = Comment
|
||||
Comment = Comment,
|
||||
CourseId = CourseId,
|
||||
};
|
||||
|
||||
public void UpdateProcedures(PolyclinicDatabase database, RecipeBindingModel bindingModel)
|
||||
|
@ -20,4 +20,8 @@
|
||||
<ProjectReference Include="..\PolyclinicDataModels\PolyclinicDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Migrations\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -42,4 +42,15 @@
|
||||
<UpToDateCheckInput Remove="Views\Home\Diagnoses.cshtml" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.16">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\PolyclinicDatabaseImplement\PolyclinicDatabaseImplement.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
Loading…
Reference in New Issue
Block a user