feat(dal): создана таблица ScheduleResponseAreaTimeOffsets. В таблицу JobGroup добавлено поле IsWorkGroupTimezone

This commit is contained in:
Mikhail Trubnikov
2026-01-30 10:40:55 +10:00
parent 5222d763f9
commit fddee13fff
12 changed files with 4283 additions and 0 deletions

View File

@@ -53,6 +53,7 @@ namespace PARR.DAL.Context
public DbSet<ScheduleExcludeTypeCalendar> ScheduleExcludeTypeCalendars { get; set; }
public DbSet<ScheduleExcludeType> ScheduleExcludeTypes { get; set; }
public DbSet<ScheduleResponseAreaTimeOffset> ScheduleResponseAreaTimeOffsets { get; set; }
#endregion

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,49 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class tblAddScheduleResponseAreaTimeOffset : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsWorkGroupTimezone",
schema: "job",
table: "Groups",
type: "boolean",
nullable: false,
defaultValue: false);
migrationBuilder.CreateTable(
name: "ResponseAreaTimeOffsets",
schema: "schedule",
columns: table => new
{
ResponseArea = table.Column<string>(type: "text", nullable: false),
TimeOffset = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ResponseAreaTimeOffsets", x => x.ResponseArea);
},
comment: "Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "ResponseAreaTimeOffsets",
schema: "schedule");
migrationBuilder.DropColumn(
name: "IsWorkGroupTimezone",
schema: "job",
table: "Groups");
}
}
}

View File

@@ -1678,6 +1678,9 @@ namespace PARR.DAL.Migrations
b.Property<bool>("IsAutoDistributionEnabled")
.HasColumnType("boolean");
b.Property<bool>("IsWorkGroupTimezone")
.HasColumnType("boolean");
b.Property<DateTimeOffset>("ReferenceDate")
.HasColumnType("timestamp with time zone");
@@ -2569,6 +2572,23 @@ namespace PARR.DAL.Migrations
});
});
modelBuilder.Entity("PARR.DAL.Models.Schedule.ScheduleResponseAreaTimeOffset", b =>
{
b.Property<string>("ResponseArea")
.HasColumnType("text");
b.Property<string>("TimeOffset")
.IsRequired()
.HasColumnType("text");
b.HasKey("ResponseArea");
b.ToTable("ResponseAreaTimeOffsets", "schedule", t =>
{
t.HasComment("Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы");
});
});
modelBuilder.Entity("PARR.DAL.Models.Setting", b =>
{
b.Property<string>("Name")

View File

@@ -92,6 +92,12 @@ namespace PARR.DAL.Models.Job
public DateTimeOffset ReferenceDate { get; set; }
/// <summary>
/// Использовать таймзону рабочей группы ответственного за ЭК шаблона
/// </summary>
public bool IsWorkGroupTimezone { get; set; } = false;
/// <summary>
/// Включить автораспределение
/// </summary>

View File

@@ -0,0 +1,20 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models.Schedule
{
/// <summary>
/// Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы
/// </summary>
[Table("ResponseAreaTimeOffsets", Schema = DataContextSettings.Schedule)]
[Comment("Расписание в ЕСПП. Смещение часового пояса относительно МСК для зоны ответственности рабочей группы")]
public class ScheduleResponseAreaTimeOffset
{
[Key]
public required string ResponseArea { get; set; }
public required string TimeOffset { get; set; }
}
}

View File

@@ -107,6 +107,7 @@ namespace PARR.DAL
services.AddTransient<IScheduleExcludeTypeService, ScheduleExcludeTypeService>();
services.AddTransient<IScheduleExcludeTypeCalendarService, ScheduleExcludeTypeCalendarService>();
services.AddTransient<IScheduleResponseAreaTimeOffsetService, ScheduleResponseAreaTimeOffsetService>();
#endregion

View File

@@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using PARR.DAL.Models.Schedule;
using PARR.DAL.Services.Interfaces.Schedule;
namespace PARR.DAL.Services.Implementations.Schedule
{
internal class ScheduleResponseAreaTimeOffsetService : IScheduleResponseAreaTimeOffsetService
{
private readonly DataContext dataContext;
public ScheduleResponseAreaTimeOffsetService(DataContext dataContext)
{
this.dataContext = dataContext;
}
public IQueryable<ScheduleResponseAreaTimeOffset> Get()
{
return dataContext.ScheduleResponseAreaTimeOffsets;
}
public async Task<string?> GetTimeOffsetByResponseAreaAsync(string responseArea)
{
var result = await dataContext.ScheduleResponseAreaTimeOffsets.FirstOrDefaultAsync(t => t.ResponseArea == responseArea);
return result != null ? result.TimeOffset : null;
}
}
}

View File

@@ -0,0 +1,11 @@
using PARR.DAL.Models.Schedule;
namespace PARR.DAL.Services.Interfaces.Schedule
{
public interface IScheduleResponseAreaTimeOffsetService
{
IQueryable<ScheduleResponseAreaTimeOffset> Get();
Task<string?> GetTimeOffsetByResponseAreaAsync(string responseArea);
}
}