This commit is contained in:
Дмитрий Блохин 2024-04-30 22:38:51 +04:00
commit 5e273fd259
11 changed files with 621 additions and 9 deletions

View File

@ -65,6 +65,10 @@ namespace BusinessLogic.BusinessLogic
{ {
throw new ArgumentNullException("Цена детали должна быть больше 0", nameof(model.Cost)); throw new ArgumentNullException("Цена детали должна быть больше 0", nameof(model.Cost));
} }
if (model.DateCreate > DateTime.Now)
{
throw new ArgumentNullException("Деталь не может быть создана в будущем", nameof(model.DateCreate));
}
_logger.LogInformation("Detail. DetailName:{Name}. Cost:{Cost}. Id:{Id}", model.Name, model.Cost, model.Id); _logger.LogInformation("Detail. DetailName:{Name}. Cost:{Cost}. Id:{Id}", model.Name, model.Cost, model.Id);
var elem = _detailStorage.GetElement(new DetailSearchModel var elem = _detailStorage.GetElement(new DetailSearchModel
{ {

View File

@ -8,5 +8,6 @@ namespace Contracts.BindingModels
public int UserId { get; set; } public int UserId { get; set; }
public string Name { get; set; } = string.Empty; public string Name { get; set; } = string.Empty;
public double Cost { get; set; } public double Cost { get; set; }
public DateTime DateCreate { get; set; }
} }
} }

View File

@ -11,5 +11,8 @@ namespace Contracts.SearchModels
public int? Id { get; set; } public int? Id { get; set; }
public string? Name { get; set; } public string? Name { get; set; }
public int? UserId { get; set; } public int? UserId { get; set; }
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
} }
} }

View File

@ -16,6 +16,8 @@ namespace Contracts.ViewModels
[DisplayName("Цена детали")] [DisplayName("Цена детали")]
public double Cost { get; set; } public double Cost { get; set; }
public int UserId { get; set; } public int UserId { get; set; }
[DisplayName("Дата создания")]
public DateTime DateCreate { get; set; }
} }
} }

View File

@ -4,5 +4,6 @@
{ {
string Name { get; } string Name { get; }
double Cost { get; } double Cost { get; }
DateTime DateCreate { get; }
} }
} }

View File

@ -27,11 +27,14 @@ namespace DatabaseImplement.Implements
public List<DetailViewModel> GetFilteredList(DetailSearchModel model) public List<DetailViewModel> GetFilteredList(DetailSearchModel model)
{ {
if (!model.UserId.HasValue) if (!model.UserId.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue)
{ {
return new(); return new();
} }
using var context = new FactoryGoWorkDatabase(); using var context = new FactoryGoWorkDatabase();
if (model.DateFrom.HasValue)
return context.Details.Where(x => x.UserId == model.Id).Where(x => x.DateCreate < model.DateTo && x.DateCreate > model.DateFrom).Select(x => x.GetViewModel).ToList();
else
return context.Details.Where(x => x.UserId == model.Id).Select(x => x.GetViewModel).ToList(); return context.Details.Where(x => x.UserId == model.Id).Select(x => x.GetViewModel).ToList();
} }

View File

@ -0,0 +1,564 @@
// <auto-generated />
using System;
using DatabaseImplement;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace DatabaseImplement.Migrations
{
[DbContext(typeof(FactoryGoWorkDatabase))]
[Migration("20240430182642_time")]
partial class time
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.29")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
modelBuilder.Entity("DatabaseImplement.Models.Detail", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<double>("Cost")
.HasColumnType("float");
b.Property<DateTime>("DateCreate")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Details");
});
modelBuilder.Entity("DatabaseImplement.Models.DetailProduct", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("Count")
.HasColumnType("int");
b.Property<int>("DetailId")
.HasColumnType("int");
b.Property<int>("ProductId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("DetailId");
b.HasIndex("ProductId");
b.ToTable("DetailProducts");
});
modelBuilder.Entity("DatabaseImplement.Models.DetailProduction", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("DetailId")
.HasColumnType("int");
b.Property<int>("ProductionId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("DetailId");
b.HasIndex("ProductionId");
b.ToTable("DetailProductions");
});
modelBuilder.Entity("DatabaseImplement.Models.Guarantor", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Login")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("Guarantors");
});
modelBuilder.Entity("DatabaseImplement.Models.Implementer", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Login")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("Implementers");
});
modelBuilder.Entity("DatabaseImplement.Models.Machine", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Country")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Machines");
});
modelBuilder.Entity("DatabaseImplement.Models.Product", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<double>("Cost")
.HasColumnType("float");
b.Property<int?>("MachineId")
.HasColumnType("int");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("MachineId");
b.HasIndex("UserId");
b.ToTable("Products");
});
modelBuilder.Entity("DatabaseImplement.Models.Production", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<double>("Cost")
.HasColumnType("float");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Productions");
});
modelBuilder.Entity("DatabaseImplement.Models.Worker", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<DateTime>("Birthday")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<double>("Salary")
.HasColumnType("float");
b.Property<string>("Specialization")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Workers");
});
modelBuilder.Entity("DatabaseImplement.Models.WorkerMachine", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("MachineId")
.HasColumnType("int");
b.Property<int>("WorkerId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("WorkerId");
b.ToTable("WorkerMachines");
});
modelBuilder.Entity("DatabaseImplement.Models.WorkerWorkshop", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<int>("WorkerId")
.HasColumnType("int");
b.Property<int>("WorkshopId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("WorkerId");
b.HasIndex("WorkshopId");
b.ToTable("WorkerWorkshops");
});
modelBuilder.Entity("DatabaseImplement.Models.Workshop", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"), 1L, 1);
b.Property<string>("Address")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Director")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int?>("ProductionId")
.HasColumnType("int");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("ProductionId");
b.HasIndex("UserId");
b.ToTable("Workshops");
});
modelBuilder.Entity("DatabaseImplement.Models.Detail", b =>
{
b.HasOne("DatabaseImplement.Models.Implementer", "User")
.WithMany("Details")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("User");
});
modelBuilder.Entity("DatabaseImplement.Models.DetailProduct", b =>
{
b.HasOne("DatabaseImplement.Models.Detail", "Detail")
.WithMany("DetailProducts")
.HasForeignKey("DetailId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("DatabaseImplement.Models.Product", "Product")
.WithMany("Details")
.HasForeignKey("ProductId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Detail");
b.Navigation("Product");
});
modelBuilder.Entity("DatabaseImplement.Models.DetailProduction", b =>
{
b.HasOne("DatabaseImplement.Models.Detail", "Detail")
.WithMany("DetailProductions")
.HasForeignKey("DetailId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("DatabaseImplement.Models.Production", "Production")
.WithMany("Details")
.HasForeignKey("ProductionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Detail");
b.Navigation("Production");
});
modelBuilder.Entity("DatabaseImplement.Models.Machine", b =>
{
b.HasOne("DatabaseImplement.Models.Guarantor", "Guarantor")
.WithMany("Machines")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Guarantor");
});
modelBuilder.Entity("DatabaseImplement.Models.Product", b =>
{
b.HasOne("DatabaseImplement.Models.Machine", "Machine")
.WithMany()
.HasForeignKey("MachineId");
b.HasOne("DatabaseImplement.Models.Implementer", "User")
.WithMany("Products")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Machine");
b.Navigation("User");
});
modelBuilder.Entity("DatabaseImplement.Models.Production", b =>
{
b.HasOne("DatabaseImplement.Models.Implementer", "User")
.WithMany("Productions")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("User");
});
modelBuilder.Entity("DatabaseImplement.Models.Worker", b =>
{
b.HasOne("DatabaseImplement.Models.Guarantor", "Guarantor")
.WithMany("Workers")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Guarantor");
});
modelBuilder.Entity("DatabaseImplement.Models.WorkerMachine", b =>
{
b.HasOne("DatabaseImplement.Models.Machine", "Machine")
.WithMany("Workers")
.HasForeignKey("WorkerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("DatabaseImplement.Models.Worker", "Worker")
.WithMany("WorkerMachines")
.HasForeignKey("WorkerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Machine");
b.Navigation("Worker");
});
modelBuilder.Entity("DatabaseImplement.Models.WorkerWorkshop", b =>
{
b.HasOne("DatabaseImplement.Models.Worker", "Worker")
.WithMany("WorkerWorkshops")
.HasForeignKey("WorkerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("DatabaseImplement.Models.Workshop", "Workshop")
.WithMany("Workers")
.HasForeignKey("WorkshopId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Worker");
b.Navigation("Workshop");
});
modelBuilder.Entity("DatabaseImplement.Models.Workshop", b =>
{
b.HasOne("DatabaseImplement.Models.Production", "Production")
.WithMany("Workshops")
.HasForeignKey("ProductionId");
b.HasOne("DatabaseImplement.Models.Guarantor", "User")
.WithMany("Workshops")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Production");
b.Navigation("User");
});
modelBuilder.Entity("DatabaseImplement.Models.Detail", b =>
{
b.Navigation("DetailProductions");
b.Navigation("DetailProducts");
});
modelBuilder.Entity("DatabaseImplement.Models.Guarantor", b =>
{
b.Navigation("Machines");
b.Navigation("Workers");
b.Navigation("Workshops");
});
modelBuilder.Entity("DatabaseImplement.Models.Implementer", b =>
{
b.Navigation("Details");
b.Navigation("Productions");
b.Navigation("Products");
});
modelBuilder.Entity("DatabaseImplement.Models.Machine", b =>
{
b.Navigation("Workers");
});
modelBuilder.Entity("DatabaseImplement.Models.Product", b =>
{
b.Navigation("Details");
});
modelBuilder.Entity("DatabaseImplement.Models.Production", b =>
{
b.Navigation("Details");
b.Navigation("Workshops");
});
modelBuilder.Entity("DatabaseImplement.Models.Worker", b =>
{
b.Navigation("WorkerMachines");
b.Navigation("WorkerWorkshops");
});
modelBuilder.Entity("DatabaseImplement.Models.Workshop", b =>
{
b.Navigation("Workers");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,27 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace DatabaseImplement.Migrations
{
public partial class time : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<DateTime>(
name: "DateCreate",
table: "Details",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "DateCreate",
table: "Details");
}
}
}

View File

@ -33,6 +33,9 @@ namespace DatabaseImplement.Migrations
b.Property<double>("Cost") b.Property<double>("Cost")
.HasColumnType("float"); .HasColumnType("float");
b.Property<DateTime>("DateCreate")
.HasColumnType("datetime2");
b.Property<string>("Name") b.Property<string>("Name")
.IsRequired() .IsRequired()
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
@ -489,15 +492,15 @@ namespace DatabaseImplement.Migrations
.WithMany("Workshops") .WithMany("Workshops")
.HasForeignKey("ProductionId"); .HasForeignKey("ProductionId");
b.HasOne("DatabaseImplement.Models.Guarantor", "Guarantor") b.HasOne("DatabaseImplement.Models.Guarantor", "User")
.WithMany("Workshops") .WithMany("Workshops")
.HasForeignKey("UserId") .HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.Navigation("Guarantor");
b.Navigation("Production"); b.Navigation("Production");
b.Navigation("User");
}); });
modelBuilder.Entity("DatabaseImplement.Models.Detail", b => modelBuilder.Entity("DatabaseImplement.Models.Detail", b =>

View File

@ -14,6 +14,8 @@ namespace DatabaseImplement.Models
[Required] [Required]
public double Cost { get; set; } public double Cost { get; set; }
[Required] [Required]
public DateTime DateCreate { get; set; } = DateTime.Now;
[Required]
public int UserId { get; set; } public int UserId { get; set; }
[ForeignKey("DetailId")] [ForeignKey("DetailId")]
public virtual List<DetailProduct> DetailProducts { get; set; } = new(); public virtual List<DetailProduct> DetailProducts { get; set; } = new();
@ -31,7 +33,8 @@ namespace DatabaseImplement.Models
Id = model.Id, Id = model.Id,
Name = model.Name, Name = model.Name,
Cost = model.Cost, Cost = model.Cost,
UserId = model.UserId UserId = model.UserId,
DateCreate = model.DateCreate
}; };
} }
public static Detail Create(DetailViewModel model) public static Detail Create(DetailViewModel model)
@ -41,7 +44,8 @@ namespace DatabaseImplement.Models
Id = model.Id, Id = model.Id,
Name = model.Name, Name = model.Name,
Cost = model.Cost, Cost = model.Cost,
UserId = model.UserId UserId = model.UserId,
DateCreate = model.DateCreate
}; };
} }
public void Update(DetailBindingModel model) public void Update(DetailBindingModel model)
@ -56,7 +60,8 @@ namespace DatabaseImplement.Models
Id = Id, Id = Id,
Name = Name, Name = Name,
Cost = Cost, Cost = Cost,
UserId = UserId UserId = UserId,
DateCreate = DateCreate
}; };
} }
} }

View File

@ -34,7 +34,6 @@ namespace DatabaseImplement.Models
} }
[ForeignKey("WorkshopId")] [ForeignKey("WorkshopId")]
public List<WorkerWorkshop> Workers { get; set; } = new(); public List<WorkerWorkshop> Workers { get; set; } = new();
public virtual Guarantor Guarantor { get; set; }
public static Workshop? Create(FactoryGoWorkDatabase context, WorkshopBindingModel model) public static Workshop? Create(FactoryGoWorkDatabase context, WorkshopBindingModel model)
{ {
if(model == null) if(model == null)