diff --git a/LawFirm/LawFirm.sln b/LawFirm/LawFirm.sln index b351967..93db645 100644 --- a/LawFirm/LawFirm.sln +++ b/LawFirm/LawFirm.sln @@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LawFirmContracts", "LawFirm EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LawFirmBusinessLogic", "LawFirmBusinessLogic\LawFirmBusinessLogic.csproj", "{08E0AB8D-1F53-4757-BA64-D76A2EB866C0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LawFirmDatabase", "LawFirmDatabase\LawFirmDatabase.csproj", "{A05000F4-BF89-4515-A8C7-FB5D962E3802}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -27,6 +29,10 @@ Global {08E0AB8D-1F53-4757-BA64-D76A2EB866C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {08E0AB8D-1F53-4757-BA64-D76A2EB866C0}.Release|Any CPU.ActiveCfg = Release|Any CPU {08E0AB8D-1F53-4757-BA64-D76A2EB866C0}.Release|Any CPU.Build.0 = Release|Any CPU + {A05000F4-BF89-4515-A8C7-FB5D962E3802}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A05000F4-BF89-4515-A8C7-FB5D962E3802}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A05000F4-BF89-4515-A8C7-FB5D962E3802}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A05000F4-BF89-4515-A8C7-FB5D962E3802}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/LawFirm/LawFirm/LawFirmView.csproj b/LawFirm/LawFirm/LawFirmView.csproj index 7eec60b..a1641b4 100644 --- a/LawFirm/LawFirm/LawFirmView.csproj +++ b/LawFirm/LawFirm/LawFirmView.csproj @@ -23,4 +23,10 @@ + + + + + + \ No newline at end of file diff --git a/LawFirm/LawFirm/Program.cs b/LawFirm/LawFirm/Program.cs index 178355f..40cd6a1 100644 --- a/LawFirm/LawFirm/Program.cs +++ b/LawFirm/LawFirm/Program.cs @@ -1,3 +1,5 @@ +using LawFirmDatabase; + namespace LawFirmView { internal static class Program diff --git a/LawFirm/LawFirmBusinessLogic/LawFirmBusinessLogic.csproj b/LawFirm/LawFirmBusinessLogic/LawFirmBusinessLogic.csproj index 6f20f1a..850b7a9 100644 --- a/LawFirm/LawFirmBusinessLogic/LawFirmBusinessLogic.csproj +++ b/LawFirm/LawFirmBusinessLogic/LawFirmBusinessLogic.csproj @@ -6,6 +6,21 @@ enable + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + diff --git a/LawFirm/LawFirmDatabase/LawFirmDBContext.cs b/LawFirm/LawFirmDatabase/LawFirmDBContext.cs new file mode 100644 index 0000000..927268e --- /dev/null +++ b/LawFirm/LawFirmDatabase/LawFirmDBContext.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LawFirmDatabase.Models; +using Microsoft.EntityFrameworkCore; + +namespace LawFirmDatabase +{ + public class LawFirmDBContext : DbContext + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + if (optionsBuilder.IsConfigured == false) + { + optionsBuilder.UseSqlServer + ( + @"Data Source=KITOSYA; + Initial Catalog=AircraftPlantDataBaseFull; + Integrated Security=True; + MultipleActiveResultSets=True;; + TrustServerCertificate=True" + ); + } + base.OnConfiguring(optionsBuilder); + } + public virtual DbSet Customers { get; set; } + public virtual DbSet Items { get; set; } + public virtual DbSet Cases { get; set; } + public virtual DbSet Payments { get; set; } + public virtual DbSet Services { get; set; } + } +} \ No newline at end of file diff --git a/LawFirm/LawFirmDatabase/LawFirmDatabase.csproj b/LawFirm/LawFirmDatabase/LawFirmDatabase.csproj new file mode 100644 index 0000000..850b7a9 --- /dev/null +++ b/LawFirm/LawFirmDatabase/LawFirmDatabase.csproj @@ -0,0 +1,28 @@ + + + + net6.0 + enable + enable + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + diff --git a/LawFirm/LawFirmDatabase/Migrations/20230408032638_InitMigration.Designer.cs b/LawFirm/LawFirmDatabase/Migrations/20230408032638_InitMigration.Designer.cs new file mode 100644 index 0000000..3509f68 --- /dev/null +++ b/LawFirm/LawFirmDatabase/Migrations/20230408032638_InitMigration.Designer.cs @@ -0,0 +1,228 @@ +// +using LawFirmDatabase; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace LawFirmDatabase.Migrations +{ + [DbContext(typeof(LawFirmDBContext))] + [Migration("20230408032638_InitMigration")] + partial class InitMigration + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("LawFirmDatabase.Models.Case", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CustomerId") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("Cases"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Customer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Login") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Surname") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Customers"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Item", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PaymentId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("decimal (10,2)"); + + b.HasKey("Id"); + + b.HasIndex("PaymentId"); + + b.ToTable("Items"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Payment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CaseId") + .HasColumnType("int"); + + b.Property("Sum") + .HasColumnType("decimal (10,2)"); + + b.HasKey("Id"); + + b.HasIndex("CaseId"); + + b.ToTable("Payments"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Service", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CaseId") + .HasColumnType("int"); + + b.Property("ItemId") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("decimal (10,2)"); + + b.HasKey("Id"); + + b.HasIndex("CaseId"); + + b.HasIndex("ItemId"); + + b.ToTable("Services"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Case", b => + { + b.HasOne("LawFirmDatabase.Models.Customer", "Customer") + .WithMany("Cases") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Item", b => + { + b.HasOne("LawFirmDatabase.Models.Payment", "Payments") + .WithMany("Items") + .HasForeignKey("PaymentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Payments"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Payment", b => + { + b.HasOne("LawFirmDatabase.Models.Case", "Cases") + .WithMany("Payments") + .HasForeignKey("CaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cases"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Service", b => + { + b.HasOne("LawFirmDatabase.Models.Case", "Cases") + .WithMany() + .HasForeignKey("CaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LawFirmDatabase.Models.Item", "Items") + .WithMany("Services") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cases"); + + b.Navigation("Items"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Case", b => + { + b.Navigation("Payments"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Customer", b => + { + b.Navigation("Cases"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Item", b => + { + b.Navigation("Services"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Payment", b => + { + b.Navigation("Items"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/LawFirm/LawFirmDatabase/Migrations/20230408032638_InitMigration.cs b/LawFirm/LawFirmDatabase/Migrations/20230408032638_InitMigration.cs new file mode 100644 index 0000000..0722275 --- /dev/null +++ b/LawFirm/LawFirmDatabase/Migrations/20230408032638_InitMigration.cs @@ -0,0 +1,163 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LawFirmDatabase.Migrations +{ + /// + public partial class InitMigration : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Customers", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Login = table.Column(type: "nvarchar(max)", nullable: false), + Password = table.Column(type: "nvarchar(max)", nullable: false), + Name = table.Column(type: "nvarchar(max)", nullable: false), + Surname = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Customers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Cases", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + CustomerId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Cases", x => x.Id); + table.ForeignKey( + name: "FK_Cases_Customers_CustomerId", + column: x => x.CustomerId, + principalTable: "Customers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Payments", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Sum = table.Column(type: "decimal (10,2)", nullable: false), + CaseId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Payments", x => x.Id); + table.ForeignKey( + name: "FK_Payments_Cases_CaseId", + column: x => x.CaseId, + principalTable: "Cases", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Items", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + Price = table.Column(type: "decimal (10,2)", nullable: false), + PaymentId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Items", x => x.Id); + table.ForeignKey( + name: "FK_Items_Payments_PaymentId", + column: x => x.PaymentId, + principalTable: "Payments", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Services", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + Price = table.Column(type: "decimal (10,2)", nullable: false), + ItemId = table.Column(type: "int", nullable: false), + CaseId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Services", x => x.Id); + table.ForeignKey( + name: "FK_Services_Cases_CaseId", + column: x => x.CaseId, + principalTable: "Cases", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Services_Items_ItemId", + column: x => x.ItemId, + principalTable: "Items", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_Cases_CustomerId", + table: "Cases", + column: "CustomerId"); + + migrationBuilder.CreateIndex( + name: "IX_Items_PaymentId", + table: "Items", + column: "PaymentId"); + + migrationBuilder.CreateIndex( + name: "IX_Payments_CaseId", + table: "Payments", + column: "CaseId"); + + migrationBuilder.CreateIndex( + name: "IX_Services_CaseId", + table: "Services", + column: "CaseId"); + + migrationBuilder.CreateIndex( + name: "IX_Services_ItemId", + table: "Services", + column: "ItemId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Services"); + + migrationBuilder.DropTable( + name: "Items"); + + migrationBuilder.DropTable( + name: "Payments"); + + migrationBuilder.DropTable( + name: "Cases"); + + migrationBuilder.DropTable( + name: "Customers"); + } + } +} diff --git a/LawFirm/LawFirmDatabase/Migrations/LawFirmDBContextModelSnapshot.cs b/LawFirm/LawFirmDatabase/Migrations/LawFirmDBContextModelSnapshot.cs new file mode 100644 index 0000000..b55a5f5 --- /dev/null +++ b/LawFirm/LawFirmDatabase/Migrations/LawFirmDBContextModelSnapshot.cs @@ -0,0 +1,225 @@ +// +using LawFirmDatabase; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace LawFirmDatabase.Migrations +{ + [DbContext(typeof(LawFirmDBContext))] + partial class LawFirmDBContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("LawFirmDatabase.Models.Case", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CustomerId") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("Cases"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Customer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Login") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Surname") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Customers"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Item", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PaymentId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("decimal (10,2)"); + + b.HasKey("Id"); + + b.HasIndex("PaymentId"); + + b.ToTable("Items"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Payment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CaseId") + .HasColumnType("int"); + + b.Property("Sum") + .HasColumnType("decimal (10,2)"); + + b.HasKey("Id"); + + b.HasIndex("CaseId"); + + b.ToTable("Payments"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Service", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CaseId") + .HasColumnType("int"); + + b.Property("ItemId") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("decimal (10,2)"); + + b.HasKey("Id"); + + b.HasIndex("CaseId"); + + b.HasIndex("ItemId"); + + b.ToTable("Services"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Case", b => + { + b.HasOne("LawFirmDatabase.Models.Customer", "Customer") + .WithMany("Cases") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Item", b => + { + b.HasOne("LawFirmDatabase.Models.Payment", "Payments") + .WithMany("Items") + .HasForeignKey("PaymentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Payments"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Payment", b => + { + b.HasOne("LawFirmDatabase.Models.Case", "Cases") + .WithMany("Payments") + .HasForeignKey("CaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cases"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Service", b => + { + b.HasOne("LawFirmDatabase.Models.Case", "Cases") + .WithMany() + .HasForeignKey("CaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LawFirmDatabase.Models.Item", "Items") + .WithMany("Services") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cases"); + + b.Navigation("Items"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Case", b => + { + b.Navigation("Payments"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Customer", b => + { + b.Navigation("Cases"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Item", b => + { + b.Navigation("Services"); + }); + + modelBuilder.Entity("LawFirmDatabase.Models.Payment", b => + { + b.Navigation("Items"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/LawFirm/LawFirmDatabase/Models/Case.cs b/LawFirm/LawFirmDatabase/Models/Case.cs new file mode 100644 index 0000000..665f55a --- /dev/null +++ b/LawFirm/LawFirmDatabase/Models/Case.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LawFirmContracts; +using LawFirmContracts.BindingModels; +using LawFirmContracts.Models; +using LawFirmContracts.ViewModels; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Azure; +using System.ComponentModel; + + +namespace LawFirmDatabase.Models +{ + public class Case : ICaseModel + { + public int Id { get; private set; } + [Required] + public string Name { get; private set; } = string.Empty; + [NotMapped] + public DateTime DateCreated { get; private set; } + [Required] + public int CustomerId { get; private set; } + [ForeignKey("CaseId")] + public virtual List Payments { get; set; } = new(); + public virtual Customer Customer { get; set; } = new(); + public static Case? Create(LawFirmDBContext context, ICaseModel? model) + { + if (model == null) + { + return null; + } + return new() + { + Id = model.Id, + DateCreated = model.DateCreated, + Customer = context.Customers.First(x => x.Id == model.CustomerId) + }; + } + + public void Update(LawFirmDBContext context, ICaseModel? model) + { + if (model == null) + { + return; + } + Id = model.Id; + DateCreated = model.DateCreated; + Customer = context.Customers.First(x => x.Id == model.CustomerId); + } + + public CaseViewModel? GetViewModel() => new() + { + Id = Id, + Name = Name, + DateCreated = DateCreated, + CustomerId = CustomerId + }; + } +} diff --git a/LawFirm/LawFirmDatabase/Models/Customer.cs b/LawFirm/LawFirmDatabase/Models/Customer.cs new file mode 100644 index 0000000..381e2bb --- /dev/null +++ b/LawFirm/LawFirmDatabase/Models/Customer.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LawFirmContracts; +using LawFirmContracts.BindingModels; +using LawFirmContracts.Models; +using LawFirmContracts.ViewModels; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + + +namespace LawFirmDatabase.Models +{ + public class Customer : ICustomerModel + { + public int Id { get; private set; } + [Required] + public string Login { get; private set; } = string.Empty; + [Required] + public string Password { get; private set; } = string.Empty; + [Required] + public string Name { get; private set; } = string.Empty; + [Required] + public string Surname { get; private set; } = string.Empty; + [ForeignKey("CustomerId")] + public virtual List Cases { get; set; } = new(); + public static Customer? Create(ICustomerModel? model) + { + if (model == null) + { + return null; + } + return new() + { + Id = model.Id, + Login = model.Login, + Password = model.Password, + Name = model.Name, + Surname = model.Surname, + }; + } + + public void Update(ICustomerModel? model) + { + if (model == null) + { + return; + } + Login = model.Login; + Password = model.Password; + Name = model.Name; + Surname = model.Surname; + } + + public CustomerViewModel? GetViewModel() => new() + { + Id = Id, + Login = Login, + Password = Password, + Name = Name, + Surname = Surname, + }; + } +} diff --git a/LawFirm/LawFirmDatabase/Models/Item.cs b/LawFirm/LawFirmDatabase/Models/Item.cs new file mode 100644 index 0000000..fd7349f --- /dev/null +++ b/LawFirm/LawFirmDatabase/Models/Item.cs @@ -0,0 +1,55 @@ +using LawFirmContracts.BindingModels; +using LawFirmContracts.Models; +using LawFirmContracts.ViewModels; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System; +using LawFirmContracts; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace LawFirmDatabase.Models +{ + public class Item : IItemModel + { + public int Id { get; private set; } + [Required] + public string Name { get; private set; } = string.Empty; + [Required, Column(TypeName = "decimal (10,2)")] + public decimal Price { get; private set; } + [Required] + public int PaymentId { get; private set; } + [ForeignKey("ItemId")] + public virtual List Services { get; set; } = new(); + public virtual Payment Payments { get; set; } = new(); + public static Item? Create(LawFirmDBContext context, ItemBindingModel? model) + { + if (model == null) + { + return null; + } + return new() + { + Name = model.Name, + Price = model.Price, + Payments = context.Payments.First(x => x.Id == model.PaymentId) + }; + } + public void Update(LawFirmDBContext context, ItemBindingModel? model) + { + if (model == null) + { + return; + } + Name = model.Name; + Price = model.Price; + Payments = context.Payments.First(x => x.Id == model.PaymentId); + } + public ItemViewModel GetViewModel => new() + { + Id = Id, + Name = Name, + Price = Price, + PaymentId = PaymentId, + }; + } +} \ No newline at end of file diff --git a/LawFirm/LawFirmDatabase/Models/Payment.cs b/LawFirm/LawFirmDatabase/Models/Payment.cs new file mode 100644 index 0000000..7c411ce --- /dev/null +++ b/LawFirm/LawFirmDatabase/Models/Payment.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LawFirmContracts; +using LawFirmContracts.BindingModels; +using LawFirmContracts.Models; +using LawFirmContracts.ViewModels; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + + +namespace LawFirmDatabase.Models +{ + public class Payment : IPaymentModel + { + public int Id { get; private set; } + [NotMapped] + public DateTime DatePayment { get; private set; } = DateTime.Now; + [Required, Column(TypeName = "decimal (10,2)")] + public decimal Sum { get; private set; } + [Required] + public int CaseId { get; private set; } + [ForeignKey("PaymentId")] + public virtual List Items { get; set; } = new(); + public virtual Case Cases { get; set; } = new(); + + public static Payment? Create(LawFirmDBContext context, IPaymentModel? model) + { + if (model == null) + { + return null; + } + return new() + { + Id = model.Id, + Sum = model.Sum, + DatePayment = model.DatePayment, + Cases = context.Cases.First(x => x.Id == model.CaseId) + }; + } + + public void Update(LawFirmDBContext context, IPaymentModel? model) + { + if (model == null) + { + return; + } + Id = model.Id; + Sum = model.Sum; + DatePayment = model.DatePayment; + Cases = context.Cases.First(x => x.Id == model.CaseId); + } + + public PaymentViewModel? GetViewModel() => new() + { + Id = Id, + Sum = Sum, + DatePayment = DatePayment, + CaseId = CaseId, + }; + } +} diff --git a/LawFirm/LawFirmDatabase/Models/Service.cs b/LawFirm/LawFirmDatabase/Models/Service.cs new file mode 100644 index 0000000..ab6ae0a --- /dev/null +++ b/LawFirm/LawFirmDatabase/Models/Service.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LawFirmContracts; +using LawFirmContracts.BindingModels; +using LawFirmContracts.Models; +using LawFirmContracts.ViewModels; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace LawFirmDatabase.Models +{ + public class Service : IServiceModel + { + public int Id { get; private set; } + [Required] + public string Name { get; private set; } = string.Empty; + [Required, Column(TypeName = "decimal (10,2)")] + public decimal Price { get; private set; } + [Required] + public int ItemId { get; private set; } + public int CaseId { get; private set; } + public virtual Item Items { get; set; } = new(); + public virtual Case Cases { get; set; } = new(); + + public static Service? Create(LawFirmDBContext context, IServiceModel? model) + { + if (model == null) + { + return null; + } + return new() + { + Id = model.Id, + Name = model.Name, + Price = model.Price, + Items = context.Items.First(x => x.Id == model.ItemId), + Cases = context.Cases.First(x => x.Id == model.CaseId) + }; + } + + public void Update(LawFirmDBContext context, IServiceModel? model) + { + if (model == null) + { + return; + } + Id = model.Id; + Name = model.Name; + Price = model.Price; + Items = context.Items.First(x => x.Id == model.ItemId); + Cases = context.Cases.First(x => x.Id == model.CaseId); + } + + public ServiceViewModel? GetViewModel() => new() + { + Id = Id, + Name = Name, + Price = Price, + ItemId = ItemId, + }; + } +}