From 69fe9ea9bc91472e247d6c5d565068a4efb0a683 Mon Sep 17 00:00:00 2001 From: -SSS- Date: Tue, 22 Apr 2025 02:30:04 +0300 Subject: [PATCH] chinit_pdf --- ...231548_CreateOrderServiceTable.Designer.cs | 288 +++++++++++++ .../20250421231548_CreateOrderServiceTable.cs | 53 +++ .../Migrations/User15ContextModelSnapshot.cs | 285 +++++++++++++ demo_hard/Models/Order.cs | 12 +- demo_hard/Models/OrderService.cs | 12 + demo_hard/Models/Service.cs | 11 +- demo_hard/Models/User15Context.cs | 71 ++-- demo_hard/Order.axaml.cs | 48 ++- demo_hard/SallerWindow.axaml | 125 +++--- demo_hard/SallerWindow.axaml.cs | 241 ++++++++--- demo_hard/bin/Debug/net9.0/DynamicData.dll | Bin 0 -> 961536 bytes demo_hard/bin/Debug/net9.0/ReactiveUI.dll | Bin 0 -> 385328 bytes demo_hard/bin/Debug/net9.0/Splat.dll | Bin 0 -> 150320 bytes .../bin/Debug/net9.0/System.Reactive.dll | Bin 0 -> 1344592 bytes .../bin/Debug/net9.0/demo_hard.deps.json | 86 ++++ demo_hard/bin/Debug/net9.0/demo_hard.dll | Bin 88064 -> 110080 bytes demo_hard/bin/Debug/net9.0/demo_hard.exe | Bin 145920 -> 145920 bytes demo_hard/bin/Debug/net9.0/demo_hard.pdb | Bin 34236 -> 39444 bytes demo_hard/demo_hard.csproj | 1 + .../net9.0/Avalonia/Resources.Inputs.cache | 2 +- .../obj/Debug/net9.0/Avalonia/demo_hard.dll | Bin 88064 -> 110080 bytes .../obj/Debug/net9.0/Avalonia/demo_hard.pdb | Bin 34236 -> 39444 bytes .../obj/Debug/net9.0/Avalonia/references | 4 + demo_hard/obj/Debug/net9.0/Avalonia/resources | Bin 17366 -> 19015 bytes demo_hard/obj/Debug/net9.0/apphost.exe | Bin 145920 -> 145920 bytes .../Debug/net9.0/demo_hard.AssemblyInfo.cs | 2 +- .../net9.0/demo_hard.AssemblyInfoInputs.cache | 2 +- .../obj/Debug/net9.0/demo_hard.assets.cache | Bin 60815 -> 63815 bytes .../demo_hard.csproj.AssemblyReference.cache | Bin 23248 -> 24369 bytes .../demo_hard.csproj.CoreCompileInputs.cache | 2 +- .../demo_hard.csproj.FileListAbsolute.txt | 4 + demo_hard/obj/Debug/net9.0/demo_hard.dll | Bin 67072 -> 89600 bytes demo_hard/obj/Debug/net9.0/demo_hard.pdb | Bin 30080 -> 35040 bytes demo_hard/obj/Debug/net9.0/ref/demo_hard.dll | Bin 14336 -> 17920 bytes .../net9.0/refint/Avalonia/demo_hard.dll | Bin 14336 -> 17920 bytes .../obj/Debug/net9.0/refint/demo_hard.dll | Bin 15360 -> 18432 bytes .../obj/demo_hard.csproj.nuget.dgspec.json | 4 + .../obj/demo_hard.csproj.nuget.g.targets | 1 + demo_hard/obj/project.assets.json | 383 ++++++++++++++++++ demo_hard/obj/project.nuget.cache | 8 +- demo_hard/obj/project.packagespec.json | 2 +- demo_hard/obj/rider.project.model.nuget.info | 2 +- demo_hard/obj/rider.project.restore.info | 2 +- 43 files changed, 1470 insertions(+), 181 deletions(-) create mode 100644 demo_hard/Migrations/20250421231548_CreateOrderServiceTable.Designer.cs create mode 100644 demo_hard/Migrations/20250421231548_CreateOrderServiceTable.cs create mode 100644 demo_hard/Migrations/User15ContextModelSnapshot.cs create mode 100644 demo_hard/Models/OrderService.cs create mode 100644 demo_hard/bin/Debug/net9.0/DynamicData.dll create mode 100644 demo_hard/bin/Debug/net9.0/ReactiveUI.dll create mode 100644 demo_hard/bin/Debug/net9.0/Splat.dll create mode 100644 demo_hard/bin/Debug/net9.0/System.Reactive.dll diff --git a/demo_hard/Migrations/20250421231548_CreateOrderServiceTable.Designer.cs b/demo_hard/Migrations/20250421231548_CreateOrderServiceTable.Designer.cs new file mode 100644 index 0000000..c61f0e2 --- /dev/null +++ b/demo_hard/Migrations/20250421231548_CreateOrderServiceTable.Designer.cs @@ -0,0 +1,288 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using demo_hard.Models; + +#nullable disable + +namespace demo_hard.Migrations +{ + [DbContext(typeof(User15Context))] + [Migration("20250421231548_CreateOrderServiceTable")] + partial class CreateOrderServiceTable + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("OrderService", b => + { + b.Property("OrdersOrderId") + .HasColumnType("integer"); + + b.Property("ServicesServiceId") + .HasColumnType("integer"); + + b.HasKey("OrdersOrderId", "ServicesServiceId"); + + b.HasIndex("ServicesServiceId"); + + b.ToTable("OrderService"); + }); + + modelBuilder.Entity("demo_hard.Models.Client", b => + { + b.Property("ClientId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("client_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityAlwaysColumn(b.Property("ClientId")); + + b.Property("Address") + .HasColumnType("character varying") + .HasColumnName("address"); + + b.Property("Birthday") + .HasColumnType("date") + .HasColumnName("birthday"); + + b.Property("ClientCode") + .HasColumnType("integer") + .HasColumnName("client_code"); + + b.Property("Email") + .HasColumnType("character varying") + .HasColumnName("email"); + + b.Property("Fio") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("fio"); + + b.Property("Passport") + .HasMaxLength(10) + .HasColumnType("character varying(10)") + .HasColumnName("passport"); + + b.Property("Password") + .HasColumnType("character varying") + .HasColumnName("password"); + + b.Property("Role") + .HasColumnType("integer") + .HasColumnName("role"); + + b.HasKey("ClientId") + .HasName("client_pk"); + + b.HasIndex(new[] { "ClientCode" }, "client_unique") + .IsUnique(); + + b.ToTable("client", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.Employee", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id"); + + b.Property("EnterStatus") + .HasColumnType("character varying") + .HasColumnName("enter_status"); + + b.Property("Fio") + .HasColumnType("character varying") + .HasColumnName("fio"); + + b.Property("LastEnter") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_enter"); + + b.Property("Login") + .HasColumnType("character varying") + .HasColumnName("login"); + + b.Property("Password") + .HasColumnType("character varying") + .HasColumnName("password"); + + b.Property("Photo") + .HasColumnType("character varying") + .HasColumnName("photo"); + + b.Property("Role") + .HasColumnType("integer") + .HasColumnName("role"); + + b.HasKey("Id") + .HasName("employees_pk"); + + b.ToTable("employees", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.Order", b => + { + b.Property("OrderId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("order_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityAlwaysColumn(b.Property("OrderId")); + + b.Property("ClientId") + .HasColumnType("integer") + .HasColumnName("client_id"); + + b.Property("EndDate") + .HasColumnType("date") + .HasColumnName("end_date"); + + b.Property("OrderCode") + .HasColumnType("character varying") + .HasColumnName("order_code"); + + b.Property("RentTime") + .HasColumnType("integer") + .HasColumnName("rent_time"); + + b.Property("StartDate") + .HasColumnType("date") + .HasColumnName("start_date"); + + b.Property("Status") + .HasColumnType("character varying") + .HasColumnName("status"); + + b.Property("Time") + .HasColumnType("time without time zone") + .HasColumnName("time"); + + b.HasKey("OrderId") + .HasName("orders_pk"); + + b.ToTable("orders", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.OrderService", b => + { + b.Property("OrderId") + .HasColumnType("integer") + .HasColumnName("order_id"); + + b.Property("ServiceId") + .HasColumnType("integer") + .HasColumnName("service_id"); + + b.Property("RentTime") + .HasColumnType("integer") + .HasColumnName("rent_time"); + + b.HasKey("OrderId", "ServiceId"); + + b.HasIndex("ServiceId"); + + b.ToTable("order_services", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.Role", b => + { + b.Property("RoleId") + .HasColumnType("integer") + .HasColumnName("role_id"); + + b.Property("RoleName") + .HasColumnType("character varying") + .HasColumnName("role_name"); + + b.ToTable("roles", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.Service", b => + { + b.Property("ServiceId") + .HasColumnType("integer") + .HasColumnName("service_id"); + + b.Property("CostPerHour") + .HasColumnType("integer") + .HasColumnName("cost_per_hour"); + + b.Property("ServiceCode") + .IsRequired() + .HasColumnType("character varying") + .HasColumnName("service_code"); + + b.Property("ServiceName") + .HasColumnType("character varying") + .HasColumnName("service_name"); + + b.HasKey("ServiceId") + .HasName("services_pk"); + + b.HasIndex(new[] { "ServiceCode" }, "services_unique") + .IsUnique(); + + b.ToTable("services", (string)null); + }); + + modelBuilder.Entity("OrderService", b => + { + b.HasOne("demo_hard.Models.Order", null) + .WithMany() + .HasForeignKey("OrdersOrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("demo_hard.Models.Service", null) + .WithMany() + .HasForeignKey("ServicesServiceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("demo_hard.Models.OrderService", b => + { + b.HasOne("demo_hard.Models.Order", "Order") + .WithMany("OrderServices") + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("order_services_order_id_fkey"); + + b.HasOne("demo_hard.Models.Service", "Service") + .WithMany("OrderServices") + .HasForeignKey("ServiceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("order_services_service_id_fkey"); + + b.Navigation("Order"); + + b.Navigation("Service"); + }); + + modelBuilder.Entity("demo_hard.Models.Order", b => + { + b.Navigation("OrderServices"); + }); + + modelBuilder.Entity("demo_hard.Models.Service", b => + { + b.Navigation("OrderServices"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/demo_hard/Migrations/20250421231548_CreateOrderServiceTable.cs b/demo_hard/Migrations/20250421231548_CreateOrderServiceTable.cs new file mode 100644 index 0000000..1e7e54e --- /dev/null +++ b/demo_hard/Migrations/20250421231548_CreateOrderServiceTable.cs @@ -0,0 +1,53 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace demo_hard.Migrations +{ + /// + public partial class CreateOrderServiceTable : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "order_services", + columns: table => new + { + order_id = table.Column(type: "integer", nullable: false), + service_id = table.Column(type: "integer", nullable: false), + rent_time = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_order_services", x => new { x.order_id, x.service_id }); + table.ForeignKey( + name: "FK_order_services_orders_order_id", + column: x => x.order_id, + principalTable: "orders", + principalColumn: "order_id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_order_services_services_service_id", + column: x => x.service_id, + principalTable: "services", + principalColumn: "service_id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_order_services_service_id", + table: "order_services", + column: "service_id"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "order_services"); + } + } +} + diff --git a/demo_hard/Migrations/User15ContextModelSnapshot.cs b/demo_hard/Migrations/User15ContextModelSnapshot.cs new file mode 100644 index 0000000..5928cef --- /dev/null +++ b/demo_hard/Migrations/User15ContextModelSnapshot.cs @@ -0,0 +1,285 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using demo_hard.Models; + +#nullable disable + +namespace demo_hard.Migrations +{ + [DbContext(typeof(User15Context))] + partial class User15ContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("OrderService", b => + { + b.Property("OrdersOrderId") + .HasColumnType("integer"); + + b.Property("ServicesServiceId") + .HasColumnType("integer"); + + b.HasKey("OrdersOrderId", "ServicesServiceId"); + + b.HasIndex("ServicesServiceId"); + + b.ToTable("OrderService"); + }); + + modelBuilder.Entity("demo_hard.Models.Client", b => + { + b.Property("ClientId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("client_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityAlwaysColumn(b.Property("ClientId")); + + b.Property("Address") + .HasColumnType("character varying") + .HasColumnName("address"); + + b.Property("Birthday") + .HasColumnType("date") + .HasColumnName("birthday"); + + b.Property("ClientCode") + .HasColumnType("integer") + .HasColumnName("client_code"); + + b.Property("Email") + .HasColumnType("character varying") + .HasColumnName("email"); + + b.Property("Fio") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("fio"); + + b.Property("Passport") + .HasMaxLength(10) + .HasColumnType("character varying(10)") + .HasColumnName("passport"); + + b.Property("Password") + .HasColumnType("character varying") + .HasColumnName("password"); + + b.Property("Role") + .HasColumnType("integer") + .HasColumnName("role"); + + b.HasKey("ClientId") + .HasName("client_pk"); + + b.HasIndex(new[] { "ClientCode" }, "client_unique") + .IsUnique(); + + b.ToTable("client", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.Employee", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id"); + + b.Property("EnterStatus") + .HasColumnType("character varying") + .HasColumnName("enter_status"); + + b.Property("Fio") + .HasColumnType("character varying") + .HasColumnName("fio"); + + b.Property("LastEnter") + .HasColumnType("timestamp without time zone") + .HasColumnName("last_enter"); + + b.Property("Login") + .HasColumnType("character varying") + .HasColumnName("login"); + + b.Property("Password") + .HasColumnType("character varying") + .HasColumnName("password"); + + b.Property("Photo") + .HasColumnType("character varying") + .HasColumnName("photo"); + + b.Property("Role") + .HasColumnType("integer") + .HasColumnName("role"); + + b.HasKey("Id") + .HasName("employees_pk"); + + b.ToTable("employees", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.Order", b => + { + b.Property("OrderId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("order_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityAlwaysColumn(b.Property("OrderId")); + + b.Property("ClientId") + .HasColumnType("integer") + .HasColumnName("client_id"); + + b.Property("EndDate") + .HasColumnType("date") + .HasColumnName("end_date"); + + b.Property("OrderCode") + .HasColumnType("character varying") + .HasColumnName("order_code"); + + b.Property("RentTime") + .HasColumnType("integer") + .HasColumnName("rent_time"); + + b.Property("StartDate") + .HasColumnType("date") + .HasColumnName("start_date"); + + b.Property("Status") + .HasColumnType("character varying") + .HasColumnName("status"); + + b.Property("Time") + .HasColumnType("time without time zone") + .HasColumnName("time"); + + b.HasKey("OrderId") + .HasName("orders_pk"); + + b.ToTable("orders", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.OrderService", b => + { + b.Property("OrderId") + .HasColumnType("integer") + .HasColumnName("order_id"); + + b.Property("ServiceId") + .HasColumnType("integer") + .HasColumnName("service_id"); + + b.Property("RentTime") + .HasColumnType("integer") + .HasColumnName("rent_time"); + + b.HasKey("OrderId", "ServiceId"); + + b.HasIndex("ServiceId"); + + b.ToTable("order_services", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.Role", b => + { + b.Property("RoleId") + .HasColumnType("integer") + .HasColumnName("role_id"); + + b.Property("RoleName") + .HasColumnType("character varying") + .HasColumnName("role_name"); + + b.ToTable("roles", (string)null); + }); + + modelBuilder.Entity("demo_hard.Models.Service", b => + { + b.Property("ServiceId") + .HasColumnType("integer") + .HasColumnName("service_id"); + + b.Property("CostPerHour") + .HasColumnType("integer") + .HasColumnName("cost_per_hour"); + + b.Property("ServiceCode") + .IsRequired() + .HasColumnType("character varying") + .HasColumnName("service_code"); + + b.Property("ServiceName") + .HasColumnType("character varying") + .HasColumnName("service_name"); + + b.HasKey("ServiceId") + .HasName("services_pk"); + + b.HasIndex(new[] { "ServiceCode" }, "services_unique") + .IsUnique(); + + b.ToTable("services", (string)null); + }); + + modelBuilder.Entity("OrderService", b => + { + b.HasOne("demo_hard.Models.Order", null) + .WithMany() + .HasForeignKey("OrdersOrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("demo_hard.Models.Service", null) + .WithMany() + .HasForeignKey("ServicesServiceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("demo_hard.Models.OrderService", b => + { + b.HasOne("demo_hard.Models.Order", "Order") + .WithMany("OrderServices") + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("order_services_order_id_fkey"); + + b.HasOne("demo_hard.Models.Service", "Service") + .WithMany("OrderServices") + .HasForeignKey("ServiceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("order_services_service_id_fkey"); + + b.Navigation("Order"); + + b.Navigation("Service"); + }); + + modelBuilder.Entity("demo_hard.Models.Order", b => + { + b.Navigation("OrderServices"); + }); + + modelBuilder.Entity("demo_hard.Models.Service", b => + { + b.Navigation("OrderServices"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/demo_hard/Models/Order.cs b/demo_hard/Models/Order.cs index 5a2e259..80190d7 100644 --- a/demo_hard/Models/Order.cs +++ b/demo_hard/Models/Order.cs @@ -6,20 +6,14 @@ namespace demo_hard.Models; public partial class Order { public int OrderId { get; set; } - public string? OrderCode { get; set; } - public TimeOnly? Time { get; set; } - public DateOnly? EndDate { get; set; } - public int? RentTime { get; set; } - public DateOnly? StartDate { get; set; } - public int? ClientId { get; set; } - public string? Status { get; set; } - + + public virtual ICollection OrderServices { get; set; } = new List(); public virtual ICollection Services { get; set; } = new List(); -} +} \ No newline at end of file diff --git a/demo_hard/Models/OrderService.cs b/demo_hard/Models/OrderService.cs new file mode 100644 index 0000000..0efac48 --- /dev/null +++ b/demo_hard/Models/OrderService.cs @@ -0,0 +1,12 @@ +namespace demo_hard.Models; + +public class OrderService +{ + public int OrderId { get; set; } + public int ServiceId { get; set; } + public int RentTime { get; set; } + + public virtual Order Order { get; set; } + + public virtual Service Service { get; set; } +} \ No newline at end of file diff --git a/demo_hard/Models/Service.cs b/demo_hard/Models/Service.cs index c18c048..a43e9b4 100644 --- a/demo_hard/Models/Service.cs +++ b/demo_hard/Models/Service.cs @@ -1,17 +1,14 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; namespace demo_hard.Models; public partial class Service { public string? ServiceName { get; set; } - public int? CostPerHour { get; set; } - public string ServiceCode { get; set; } = null!; - public int ServiceId { get; set; } - + + public virtual ICollection OrderServices { get; set; } = new List(); public virtual ICollection Orders { get; set; } = new List(); -} +} \ No newline at end of file diff --git a/demo_hard/Models/User15Context.cs b/demo_hard/Models/User15Context.cs index 167a850..5582c80 100644 --- a/demo_hard/Models/User15Context.cs +++ b/demo_hard/Models/User15Context.cs @@ -16,27 +16,26 @@ public partial class User15Context : DbContext } public virtual DbSet Clients { get; set; } - public virtual DbSet Employees { get; set; } - public virtual DbSet Orders { get; set; } - public virtual DbSet Roles { get; set; } - public virtual DbSet Services { get; set; } + public virtual DbSet OrderServices { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) -#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263. - => optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5421;USERNAME=user15;DATABASE=user15;Password=3XkvwMOb"); + { + if (!optionsBuilder.IsConfigured) + { + optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5421;USERNAME=user15;DATABASE=user15;Password=3XkvwMOb"); + } + } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.HasKey(e => e.ClientId).HasName("client_pk"); - entity.ToTable("client"); - entity.HasIndex(e => e.ClientCode, "client_unique").IsUnique(); entity.Property(e => e.ClientId) @@ -65,7 +64,6 @@ public partial class User15Context : DbContext modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("employees_pk"); - entity.ToTable("employees"); entity.Property(e => e.Id) @@ -95,7 +93,6 @@ public partial class User15Context : DbContext modelBuilder.Entity(entity => { entity.HasKey(e => e.OrderId).HasName("orders_pk"); - entity.ToTable("orders"); entity.Property(e => e.OrderId) @@ -113,32 +110,14 @@ public partial class User15Context : DbContext .HasColumnName("status"); entity.Property(e => e.Time).HasColumnName("time"); - entity.HasMany(d => d.Services).WithMany(p => p.Orders) - .UsingEntity>( - "OrderService", - r => r.HasOne().WithMany() - .HasForeignKey("ServiceId") - .OnDelete(DeleteBehavior.ClientSetNull) - .HasConstraintName("order_services_service_id_fkey"), - l => l.HasOne().WithMany() - .HasForeignKey("OrderId") - .OnDelete(DeleteBehavior.ClientSetNull) - .HasConstraintName("order_services_order_id_fkey"), - j => - { - j.HasKey("OrderId", "ServiceId").HasName("order_services_pkey"); - j.ToTable("order_services"); - j.IndexerProperty("OrderId").HasColumnName("order_id"); - j.IndexerProperty("ServiceId").HasColumnName("service_id"); - }); + entity.HasMany(o => o.OrderServices) + .WithOne(os => os.Order) + .HasForeignKey(os => os.OrderId); }); modelBuilder.Entity(entity => { - entity - .HasNoKey() - .ToTable("roles"); - + entity.HasNoKey().ToTable("roles"); entity.Property(e => e.RoleId).HasColumnName("role_id"); entity.Property(e => e.RoleName) .HasColumnType("character varying") @@ -148,9 +127,7 @@ public partial class User15Context : DbContext modelBuilder.Entity(entity => { entity.HasKey(e => e.ServiceId).HasName("services_pk"); - entity.ToTable("services"); - entity.HasIndex(e => e.ServiceCode, "services_unique").IsUnique(); entity.Property(e => e.ServiceId) @@ -163,10 +140,34 @@ public partial class User15Context : DbContext entity.Property(e => e.ServiceName) .HasColumnType("character varying") .HasColumnName("service_name"); + + entity.HasMany(s => s.OrderServices) + .WithOne(os => os.Service) + .HasForeignKey(os => os.ServiceId); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(os => new { os.OrderId, os.ServiceId }); + entity.ToTable("order_services"); + + entity.Property(os => os.OrderId).HasColumnName("order_id"); + entity.Property(os => os.ServiceId).HasColumnName("service_id"); + entity.Property(os => os.RentTime).HasColumnName("rent_time"); + + entity.HasOne(os => os.Order) + .WithMany(o => o.OrderServices) + .HasForeignKey(os => os.OrderId) + .HasConstraintName("order_services_order_id_fkey"); + + entity.HasOne(os => os.Service) + .WithMany(s => s.OrderServices) + .HasForeignKey(os => os.ServiceId) + .HasConstraintName("order_services_service_id_fkey"); }); OnModelCreatingPartial(modelBuilder); } partial void OnModelCreatingPartial(ModelBuilder modelBuilder); -} +} \ No newline at end of file diff --git a/demo_hard/Order.axaml.cs b/demo_hard/Order.axaml.cs index 06ad9fb..c9a55e2 100644 --- a/demo_hard/Order.axaml.cs +++ b/demo_hard/Order.axaml.cs @@ -20,24 +20,52 @@ public partial class Order : Window private void LoadOrderData() { - var client = _db.Clients.FirstOrDefault(c => c.ClientId == _order.ClientId); OrderNumber.Text = _order.OrderId.ToString(); - ClientName.Text = client?.Fio ?? "Не указан"; + ClientName.Text = client?.Fio ?? "Не указан"; OrderDate.Text = $"{_order.StartDate} {_order.Time}"; - TotalCost.Text = _order.Services.Sum(s => s.CostPerHour ?? 0).ToString("C"); - StatusText.Text = _order.Status ?? "active"; + + // Парсим информацию об услугах из OrderCode + var servicesInfo = ParseServicesInfo(_order); + TotalCost.Text = servicesInfo.totalCost.ToString("C"); + StatusText.Text = _order.Status ?? "Новая"; + } + + private (decimal totalCost, string servicesText) ParseServicesInfo(Models.Order order) + { + decimal total = 0; + string info = ""; + + if (!string.IsNullOrEmpty(order.OrderCode)) + { + var parts = order.OrderCode.Split(';'); + foreach (var part in parts) + { + if (string.IsNullOrEmpty(part)) continue; + + var serviceParts = part.Split(':'); + if (serviceParts.Length == 2 && + int.TryParse(serviceParts[0], out var serviceId) && + int.TryParse(serviceParts[1], out var rentTime)) + { + var service = _db.Services.Find(serviceId); + if (service != null) + { + var cost = (service.CostPerHour ?? 0) * rentTime; + total += cost; + info += $"{service.ServiceName} - {rentTime} ч ({cost:C})\n"; + } + } + } + } + + return (total, info); } private void PrintBarcode_Click(object sender, RoutedEventArgs e) { - if (_order.RentTime == null) - { - _order.RentTime = 1; - } - - new BarcodeWindow(_order.OrderId, _order.RentTime.Value).Show(); + new BarcodeWindow(_order.OrderId, _order.RentTime ?? 1).Show(); Close(); } diff --git a/demo_hard/SallerWindow.axaml b/demo_hard/SallerWindow.axaml index 428ae8c..c21bdb5 100644 --- a/demo_hard/SallerWindow.axaml +++ b/demo_hard/SallerWindow.axaml @@ -3,64 +3,91 @@ x:Class="demo_hard.SallerWindow" x:CompileBindings="False" Title="Оформление заказа" - Width="600" - Height="500"> + Width="650" + Height="600"> - - - - + + + + + Watermark="Будет сгенерирован автоматически" + IsReadOnly="True" + FontSize="14" + Padding="5"/> - - - + + + -