LsitFormWorkflow

This commit is contained in:
Sedat ÖZTÜRK 2026-05-22 12:06:15 +03:00
parent 08a2297a66
commit 9a49f4df0f
18 changed files with 683 additions and 49 deletions

View file

@ -101,7 +101,8 @@ Driven by:
- ListForm
- ListFormFields
- ListFormCustomization (UserUiFilter, GridState, ServerJoin, ServerWhere)
- ListFormImport and ListFormImportExecute
- ListFormImport and ListFormImportLog
- ListFormWorkflow and ListFormWorkflowCriteria
- ListFormJsonRow operations
Capabilities:

View file

@ -3,7 +3,7 @@ using Volo.Abp.Application.Dtos;
namespace Sozsoft.Platform.ListForms;
public class ListFormImportExecuteDto : AuditedEntityDto<Guid>
public class ListFormImportLogDto : AuditedEntityDto<Guid>
{
public Guid ImportId { get; set; }
public string BlobName { get; set; }

View file

@ -11,7 +11,7 @@ public interface IImportAppService
Task<ListFormsImportDto> GetAsync(Guid sessionId);
Task<List<ListFormsImportDto>> GetListByListFormCodeAsync(string name);
Task<ListFormsImportDto> UpdateAsync(Guid sessionId, ListFormsImportDto input);
Task<ListFormImportExecuteDto> ExecuteAsync(ExecuteImportRequest request);
Task<ListFormImportLogDto> ExecuteAsync(ImportExecuteRequest request);
Task DeleteAsync(Guid id);
}

View file

@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace Sozsoft.Platform.ListForms.ImportManager;
public class ExecuteImportRequest
public class ImportExecuteRequest
{
public Guid SessionId { get; set; }
public string ListFormCode { get; set; }

View file

@ -43,7 +43,7 @@ public class ListFormAutoMapperProfile : Profile
CreateMap<ChartFontDto, ChartFont>();
CreateMap<ListFormImport, ListFormsImportDto>();
CreateMap<ListFormImportExecute, ListFormImportExecuteDto>();
CreateMap<ListFormImportLog, ListFormImportLogDto>();
CreateMap<ImportValidationErrorDto, ImportValidationErrorDto>();
}
}

View file

@ -24,14 +24,14 @@ namespace Sozsoft.Platform.ListForms.ImportManager;
public class ListFormImportAppService : PlatformAppService, IImportAppService
{
private readonly IRepository<ListFormImport, Guid> _importSessionRepository;
private readonly IRepository<ListFormImportExecute, Guid> _importSessionExecuteRepository;
private readonly IRepository<ListFormImportLog, Guid> _importSessionExecuteRepository;
private readonly IListFormAuthorizationManager _authManager;
private readonly IQueryManager _qManager;
private readonly BlobManager _blobContainer;
public ListFormImportAppService(
IRepository<ListFormImport, Guid> importSessionRepository,
IRepository<ListFormImportExecute, Guid> importSessionExecuteRepository,
IRepository<ListFormImportLog, Guid> importSessionExecuteRepository,
IListFormAuthorizationManager authManager,
IQueryManager qManager,
BlobManager blobContainer
@ -134,7 +134,7 @@ public class ListFormImportAppService : PlatformAppService, IImportAppService
}
[UnitOfWork]
public async Task<ListFormImportExecuteDto> ExecuteAsync([FromBody] ExecuteImportRequest request)
public async Task<ListFormImportLogDto> ExecuteAsync([FromBody] ImportExecuteRequest request)
{
var queryable = await _importSessionRepository.GetQueryableAsync();
var session = await AsyncExecuter.FirstOrDefaultAsync(queryable.Where(a => a.Id == request.SessionId))
@ -144,7 +144,7 @@ public class ListFormImportAppService : PlatformAppService, IImportAppService
if (!await _authManager.CanAccess(request.ListFormCode, AuthorizationTypeEnum.Import))
throw new Volo.Abp.UserFriendlyException(L[AppErrorCodes.NoAuth]);
var execute = new ListFormImportExecute
var execute = new ListFormImportLog
{
ImportId = request.SessionId,
BlobName = session.BlobName,
@ -224,7 +224,7 @@ public class ListFormImportAppService : PlatformAppService, IImportAppService
session.Status = errorCount > 0 ? "executed_with_errors" : "executed";
await _importSessionRepository.UpdateAsync(session, autoSave: true);
return ObjectMapper.Map<ListFormImportExecute, ListFormImportExecuteDto>(execute);
return ObjectMapper.Map<ListFormImportLog, ListFormImportLogDto>(execute);
}
catch (Exception ex)
{
@ -241,7 +241,7 @@ public class ListFormImportAppService : PlatformAppService, IImportAppService
}
}
public async Task<List<ListFormImportExecuteDto>> GetListExecutesAsync(Guid sessionId)
public async Task<List<ListFormImportLogDto>> GetListExecutesAsync(Guid sessionId)
{
var queryable = await _importSessionExecuteRepository.GetQueryableAsync();
var sessions = await AsyncExecuter.ToListAsync(
@ -250,7 +250,7 @@ public class ListFormImportAppService : PlatformAppService, IImportAppService
.OrderByDescending(x => x.CreationTime)
);
return ObjectMapper.Map<List<ListFormImportExecute>, List<ListFormImportExecuteDto>>(sessions);
return ObjectMapper.Map<List<ListFormImportLog>, List<ListFormImportLogDto>>(sessions);
}
public async Task DeleteAsync(Guid id)

View file

@ -27,7 +27,9 @@ public enum TableNameEnum
ListFormField,
ListFormCustomization,
ListFormImport,
ListFormImportExecute,
ListFormImportLog,
ListFormWorkflow,
ListFormWorkflowCriteria,
Note,
ForumCategory,
ForumTopic,

View file

@ -37,7 +37,9 @@ public static class TableNameResolver
{ nameof(TableNameEnum.ListFormField), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.ListFormCustomization), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.ListFormImport), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.ListFormImportExecute), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.ListFormImportLog), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.ListFormWorkflow), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.ListFormWorkflowCriteria), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.Notification), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.NotificationRule), (TablePrefix.PlatformByName, MenuPrefix.Saas) },
{ nameof(TableNameEnum.NotificationType), (TablePrefix.PlatformByName, MenuPrefix.Saas) },

View file

@ -3,7 +3,7 @@ using Volo.Abp.Domain.Entities.Auditing;
namespace Sozsoft.Platform.Entities;
public class ListFormImportExecute : FullAuditedEntity<Guid>
public class ListFormImportLog : FullAuditedEntity<Guid>
{
public Guid ImportId { get; set; }
public string BlobName { get; set; }

View file

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Domain.Entities.Auditing;
namespace Sozsoft.Platform.Entities;
public class ListFormWorkflow : FullAuditedEntity<Guid>
{
public string ListFormCode { get; set; }
public int OrderNo { get; set; }
public string Title { get; set; }
public string Status { get; set; }
public decimal Amount { get; set; }
public string CurrentNodeId { get; set; }
public string AssignedApprover { get; set; }
public string InformedPerson { get; set; }
public string HistoryJson { get; set; }
public ICollection<ListFormWorkflowCriteria> Criteria { get; set; }
}

View file

@ -0,0 +1,27 @@
using System;
using Volo.Abp.Domain.Entities.Auditing;
namespace Sozsoft.Platform.Entities;
public class ListFormWorkflowCriteria : FullAuditedEntity<Guid>
{
public string ListFormCode { get; set; }
public Guid WorkflowItemId { get; set; }
public ListFormWorkflow WorkflowItem { get; set; }
public string NodeId { get; set; }
public string Kind { get; set; }
public string Title { get; set; }
public string Column { get; set; }
public string Operator { get; set; }
public decimal CompareValue { get; set; }
public string Approver { get; set; }
public string InformPerson { get; set; }
public string NextOnStart { get; set; }
public string NextOnTrue { get; set; }
public string NextOnFalse { get; set; }
public string NextOnApprove { get; set; }
public string NextOnReject { get; set; }
public int PositionX { get; set; }
public int PositionY { get; set; }
public string CompareOutcomesJson { get; set; }
}

View file

@ -54,7 +54,9 @@ public class PlatformDbContext :
public DbSet<ListFormField> ListFormFields { get; set; }
public DbSet<ListFormCustomization> ListFormCustomization { get; set; }
public DbSet<ListFormImport> ListFormImports { get; set; }
public DbSet<ListFormImportExecute> ListFormImportExecutes { get; set; }
public DbSet<ListFormImportLog> ListFormImportLogs { get; set; }
public DbSet<ListFormWorkflow> ListFormWorkflows { get; set; }
public DbSet<ListFormWorkflowCriteria> ListFormWorkflowCriteria { get; set; }
public DbSet<BackgroundWorker> BackgroundWorkers { get; set; }
public DbSet<ForumCategory> ForumCategories { get; set; }
public DbSet<ForumTopic> ForumTopics { get; set; }
@ -224,7 +226,7 @@ public class PlatformDbContext :
b.Property(a => a.BranchId).IsRequired();
b.HasIndex(x => new { x.TenantId, x.BranchId, x.UserId }).IsUnique().HasFilter(null);
b.HasOne(x => x.Branch)
.WithMany(x => x.UserBranches)
.HasForeignKey(x => x.BranchId)
@ -466,12 +468,12 @@ public class PlatformDbContext :
b.Property(x => x.BlobName).IsRequired().HasMaxLength(256);
b.Property(x => x.Status).IsRequired().HasMaxLength(64);
builder.Entity<ListFormImport>(b => { b.HasMany<ListFormImportExecute>().WithOne().HasForeignKey(x => x.ImportId).OnDelete(DeleteBehavior.Cascade); });
builder.Entity<ListFormImport>(b => { b.HasMany<ListFormImportLog>().WithOne().HasForeignKey(x => x.ImportId).OnDelete(DeleteBehavior.Cascade); });
});
builder.Entity<ListFormImportExecute>(b =>
builder.Entity<ListFormImportLog>(b =>
{
b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ListFormImportExecute)), Prefix.DbSchema);
b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ListFormImportLog)), Prefix.DbSchema);
b.ConfigureByConvention();
b.Property(x => x.ImportId).IsRequired();
@ -480,6 +482,59 @@ public class PlatformDbContext :
b.Property(x => x.ErrorsJson).HasColumnType("text");
});
builder.Entity<ListFormWorkflow>(b =>
{
b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ListFormWorkflow)), Prefix.DbSchema);
b.ConfigureByConvention();
b.Property(x => x.ListFormCode).IsRequired().HasMaxLength(64);
b.Property(x => x.OrderNo).IsRequired();
b.Property(x => x.Title).IsRequired().HasMaxLength(150);
b.Property(x => x.Status).IsRequired().HasMaxLength(100);
b.Property(x => x.Amount).HasPrecision(18, 2);
b.Property(x => x.CurrentNodeId).IsRequired().HasMaxLength(50);
b.Property(x => x.AssignedApprover).IsRequired().HasMaxLength(250);
b.Property(x => x.InformedPerson).IsRequired().HasMaxLength(250);
b.Property(x => x.HistoryJson).HasColumnType("text");
b.HasMany(x => x.Criteria)
.WithOne(x => x.WorkflowItem)
.HasForeignKey(x => x.WorkflowItemId)
.OnDelete(DeleteBehavior.Cascade);
});
builder.Entity<ListFormWorkflowCriteria>(b =>
{
b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.ListFormWorkflowCriteria)), Prefix.DbSchema);
b.ConfigureByConvention();
b.Property(x => x.ListFormCode).IsRequired().HasMaxLength(64);
b.Property(x => x.WorkflowItemId).IsRequired();
b.Property(x => x.NodeId).IsRequired().HasMaxLength(50);
b.Property(x => x.Kind).IsRequired().HasMaxLength(50);
b.Property(x => x.Title).IsRequired().HasMaxLength(250);
b.Property(x => x.Column).IsRequired().HasMaxLength(100);
b.Property(x => x.Operator).IsRequired().HasMaxLength(20);
b.Property(x => x.CompareValue).HasPrecision(18, 2);
b.Property(x => x.Approver).IsRequired().HasMaxLength(250);
b.Property(x => x.InformPerson).IsRequired().HasMaxLength(250);
b.Property(x => x.NextOnStart).IsRequired().HasMaxLength(50);
b.Property(x => x.NextOnTrue).IsRequired().HasMaxLength(50);
b.Property(x => x.NextOnFalse).IsRequired().HasMaxLength(50);
b.Property(x => x.NextOnApprove).IsRequired().HasMaxLength(50);
b.Property(x => x.NextOnReject).IsRequired().HasMaxLength(50);
b.Property(x => x.PositionX).IsRequired();
b.Property(x => x.PositionY).IsRequired();
b.Property(x => x.CompareOutcomesJson).HasColumnType("text");
b.HasIndex(x => new
{
x.ListFormCode,
x.WorkflowItemId,
x.NodeId
});
});
builder.Entity<Note>(b =>
{
b.ToTable(TableNameResolver.GetFullTableName(nameof(TableNameEnum.Note)), Prefix.DbSchema);
@ -685,7 +740,7 @@ public class PlatformDbContext :
b.Property(x => x.Rate).HasPrecision(18, 6);
b.Property(x => x.IsActive).HasDefaultValue(true);
b.HasIndex(x => new {x.Id, x.Name }).IsUnique().HasFilter("[IsDeleted] = 0");
b.HasIndex(x => new { x.Id, x.Name }).IsUnique().HasFilter("[IsDeleted] = 0");
});
builder.Entity<CountryGroup>(b =>
@ -1129,7 +1184,7 @@ public class PlatformDbContext :
b.Property(x => x.Responses).HasDefaultValue(0);
b.Property(x => x.Status).IsRequired().HasMaxLength(10);
b.HasIndex(x => new { x.TenantId, x.Title }).IsUnique().HasFilter("[IsDeleted] = 0");
b.HasIndex(x => new { x.TenantId, x.Title }).IsUnique().HasFilter("[IsDeleted] = 0");
});
builder.Entity<SurveyQuestion>(b =>
@ -1351,7 +1406,7 @@ public class PlatformDbContext :
b.Property(x => x.Subject).HasMaxLength(128);
b.Property(x => x.TeacherName).IsRequired().HasMaxLength(128);
b.HasIndex(x => new { x.TenantId, x.BranchId, x.Name }).IsUnique().HasFilter("[IsDeleted] = 0");
b.HasIndex(x => new { x.TenantId, x.BranchId, x.Name }).IsUnique().HasFilter("[IsDeleted] = 0");
b.HasMany(x => x.Participants)
.WithOne(x => x.Session)
@ -1420,7 +1475,7 @@ public class PlatformDbContext :
b.Property(x => x.IsActive).IsRequired().HasDefaultValue(true);
b.HasIndex(x => new { x.TenantId, x.Name }).IsUnique().HasFilter("[IsDeleted] = 0");
b.HasIndex(x => new { x.TenantId, x.Name }).IsUnique().HasFilter("[IsDeleted] = 0");
});
}
}

View file

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace Sozsoft.Platform.Migrations
{
[DbContext(typeof(PlatformDbContext))]
[Migration("20260517100701_Initial")]
[Migration("20260522085648_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -3339,7 +3339,7 @@ namespace Sozsoft.Platform.Migrations
b.ToTable("Sas_H_ListFormImport", (string)null);
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormImportExecute", b =>
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormImportLog", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
@ -3406,7 +3406,212 @@ namespace Sozsoft.Platform.Migrations
b.HasIndex("ImportId");
b.ToTable("Sas_H_ListFormImportExecute", (string)null);
b.ToTable("Sas_H_ListFormImportLog", (string)null);
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormWorkflow", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<decimal>("Amount")
.HasPrecision(18, 2)
.HasColumnType("decimal(18,2)");
b.Property<string>("AssignedApprover")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<string>("CurrentNodeId")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<Guid?>("DeleterId")
.HasColumnType("uniqueidentifier")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("HistoryJson")
.HasColumnType("text");
b.Property<string>("InformedPerson")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("ListFormCode")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<int>("OrderNo")
.HasColumnType("int");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.HasKey("Id");
b.ToTable("Sas_H_ListFormWorkflow", (string)null);
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormWorkflowCriteria", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<string>("Approver")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<string>("Column")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("CompareOutcomesJson")
.HasColumnType("text");
b.Property<decimal>("CompareValue")
.HasPrecision(18, 2)
.HasColumnType("decimal(18,2)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("uniqueidentifier")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("InformPerson")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("Kind")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("ListFormCode")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("NextOnApprove")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NextOnFalse")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NextOnReject")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NextOnStart")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NextOnTrue")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NodeId")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Operator")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<int>("PositionX")
.HasColumnType("int");
b.Property<int>("PositionY")
.HasColumnType("int");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<Guid>("WorkflowItemId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("WorkflowItemId");
b.HasIndex("ListFormCode", "WorkflowItemId", "NodeId");
b.ToTable("Sas_H_ListFormWorkflowCriteria", (string)null);
});
modelBuilder.Entity("Sozsoft.Platform.Entities.LogEntry", b =>
@ -8130,7 +8335,7 @@ namespace Sozsoft.Platform.Migrations
.IsRequired();
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormImportExecute", b =>
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormImportLog", b =>
{
b.HasOne("Sozsoft.Platform.Entities.ListFormImport", null)
.WithMany()
@ -8139,6 +8344,17 @@ namespace Sozsoft.Platform.Migrations
.IsRequired();
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormWorkflowCriteria", b =>
{
b.HasOne("Sozsoft.Platform.Entities.ListFormWorkflow", "WorkflowItem")
.WithMany("Criteria")
.HasForeignKey("WorkflowItemId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("WorkflowItem");
});
modelBuilder.Entity("Sozsoft.Platform.Entities.OrderItem", b =>
{
b.HasOne("Sozsoft.Platform.Entities.Order", "Order")
@ -8574,6 +8790,11 @@ namespace Sozsoft.Platform.Migrations
b.Navigation("Events");
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormWorkflow", b =>
{
b.Navigation("Criteria");
});
modelBuilder.Entity("Sozsoft.Platform.Entities.Order", b =>
{
b.Navigation("Items");

View file

@ -1388,6 +1388,33 @@ namespace Sozsoft.Platform.Migrations
table.UniqueConstraint("AK_Sas_H_ListForm_ListFormCode", x => x.ListFormCode);
});
migrationBuilder.CreateTable(
name: "Sas_H_ListFormWorkflow",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ListFormCode = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
OrderNo = table.Column<int>(type: "int", nullable: false),
Title = table.Column<string>(type: "nvarchar(150)", maxLength: 150, nullable: false),
Status = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
Amount = table.Column<decimal>(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false),
CurrentNodeId = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
AssignedApprover = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
InformedPerson = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
HistoryJson = table.Column<string>(type: "text", nullable: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Sas_H_ListFormWorkflow", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Sas_H_LogEntry",
columns: table => new
@ -2634,6 +2661,48 @@ namespace Sozsoft.Platform.Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Sas_H_ListFormWorkflowCriteria",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ListFormCode = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
WorkflowItemId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
NodeId = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
Kind = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
Title = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
Column = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
Operator = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
CompareValue = table.Column<decimal>(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false),
Approver = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
InformPerson = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false),
NextOnStart = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
NextOnTrue = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
NextOnFalse = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
NextOnApprove = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
NextOnReject = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
PositionX = table.Column<int>(type: "int", nullable: false),
PositionY = table.Column<int>(type: "int", nullable: false),
CompareOutcomesJson = table.Column<string>(type: "text", nullable: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Sas_H_ListFormWorkflowCriteria", x => x.Id);
table.ForeignKey(
name: "FK_Sas_H_ListFormWorkflowCriteria_Sas_H_ListFormWorkflow_WorkflowItemId",
column: x => x.WorkflowItemId,
principalTable: "Sas_H_ListFormWorkflow",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "Sas_H_NotificationRule",
columns: table => new
@ -3100,7 +3169,7 @@ namespace Sozsoft.Platform.Migrations
});
migrationBuilder.CreateTable(
name: "Sas_H_ListFormImportExecute",
name: "Sas_H_ListFormImportLog",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
@ -3122,9 +3191,9 @@ namespace Sozsoft.Platform.Migrations
},
constraints: table =>
{
table.PrimaryKey("PK_Sas_H_ListFormImportExecute", x => x.Id);
table.PrimaryKey("PK_Sas_H_ListFormImportLog", x => x.Id);
table.ForeignKey(
name: "FK_Sas_H_ListFormImportExecute_Sas_H_ListFormImport_ImportId",
name: "FK_Sas_H_ListFormImportLog_Sas_H_ListFormImport_ImportId",
column: x => x.ImportId,
principalTable: "Sas_H_ListFormImport",
principalColumn: "Id",
@ -3860,10 +3929,20 @@ namespace Sozsoft.Platform.Migrations
column: "ListFormCode");
migrationBuilder.CreateIndex(
name: "IX_Sas_H_ListFormImportExecute_ImportId",
table: "Sas_H_ListFormImportExecute",
name: "IX_Sas_H_ListFormImportLog_ImportId",
table: "Sas_H_ListFormImportLog",
column: "ImportId");
migrationBuilder.CreateIndex(
name: "IX_Sas_H_ListFormWorkflowCriteria_ListFormCode_WorkflowItemId_NodeId",
table: "Sas_H_ListFormWorkflowCriteria",
columns: new[] { "ListFormCode", "WorkflowItemId", "NodeId" });
migrationBuilder.CreateIndex(
name: "IX_Sas_H_ListFormWorkflowCriteria_WorkflowItemId",
table: "Sas_H_ListFormWorkflowCriteria",
column: "WorkflowItemId");
migrationBuilder.CreateIndex(
name: "IX_Sas_H_Menu_Code",
table: "Sas_H_Menu",
@ -4211,7 +4290,10 @@ namespace Sozsoft.Platform.Migrations
name: "Sas_H_ListFormField");
migrationBuilder.DropTable(
name: "Sas_H_ListFormImportExecute");
name: "Sas_H_ListFormImportLog");
migrationBuilder.DropTable(
name: "Sas_H_ListFormWorkflowCriteria");
migrationBuilder.DropTable(
name: "Sas_H_LogEntry");
@ -4318,6 +4400,9 @@ namespace Sozsoft.Platform.Migrations
migrationBuilder.DropTable(
name: "Sas_H_ListFormImport");
migrationBuilder.DropTable(
name: "Sas_H_ListFormWorkflow");
migrationBuilder.DropTable(
name: "Sas_H_NotificationRule");

View file

@ -3336,7 +3336,7 @@ namespace Sozsoft.Platform.Migrations
b.ToTable("Sas_H_ListFormImport", (string)null);
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormImportExecute", b =>
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormImportLog", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
@ -3403,7 +3403,212 @@ namespace Sozsoft.Platform.Migrations
b.HasIndex("ImportId");
b.ToTable("Sas_H_ListFormImportExecute", (string)null);
b.ToTable("Sas_H_ListFormImportLog", (string)null);
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormWorkflow", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<decimal>("Amount")
.HasPrecision(18, 2)
.HasColumnType("decimal(18,2)");
b.Property<string>("AssignedApprover")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<string>("CurrentNodeId")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<Guid?>("DeleterId")
.HasColumnType("uniqueidentifier")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("HistoryJson")
.HasColumnType("text");
b.Property<string>("InformedPerson")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("ListFormCode")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<int>("OrderNo")
.HasColumnType("int");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.HasKey("Id");
b.ToTable("Sas_H_ListFormWorkflow", (string)null);
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormWorkflowCriteria", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<string>("Approver")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<string>("Column")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("CompareOutcomesJson")
.HasColumnType("text");
b.Property<decimal>("CompareValue")
.HasPrecision(18, 2)
.HasColumnType("decimal(18,2)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("uniqueidentifier")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("InformPerson")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("Kind")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("ListFormCode")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("NextOnApprove")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NextOnFalse")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NextOnReject")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NextOnStart")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NextOnTrue")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("NodeId")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Operator")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<int>("PositionX")
.HasColumnType("int");
b.Property<int>("PositionY")
.HasColumnType("int");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<Guid>("WorkflowItemId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("WorkflowItemId");
b.HasIndex("ListFormCode", "WorkflowItemId", "NodeId");
b.ToTable("Sas_H_ListFormWorkflowCriteria", (string)null);
});
modelBuilder.Entity("Sozsoft.Platform.Entities.LogEntry", b =>
@ -8127,7 +8332,7 @@ namespace Sozsoft.Platform.Migrations
.IsRequired();
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormImportExecute", b =>
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormImportLog", b =>
{
b.HasOne("Sozsoft.Platform.Entities.ListFormImport", null)
.WithMany()
@ -8136,6 +8341,17 @@ namespace Sozsoft.Platform.Migrations
.IsRequired();
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormWorkflowCriteria", b =>
{
b.HasOne("Sozsoft.Platform.Entities.ListFormWorkflow", "WorkflowItem")
.WithMany("Criteria")
.HasForeignKey("WorkflowItemId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("WorkflowItem");
});
modelBuilder.Entity("Sozsoft.Platform.Entities.OrderItem", b =>
{
b.HasOne("Sozsoft.Platform.Entities.Order", "Order")
@ -8571,6 +8787,11 @@ namespace Sozsoft.Platform.Migrations
b.Navigation("Events");
});
modelBuilder.Entity("Sozsoft.Platform.Entities.ListFormWorkflow", b =>
{
b.Navigation("Criteria");
});
modelBuilder.Entity("Sozsoft.Platform.Entities.Order", b =>
{
b.Navigation("Items");

View file

@ -18,7 +18,7 @@ import {
import { FileUploadArea } from './FileUploadArea'
import { ImportPreview } from './ImportPreview'
import { ImportProgress } from './ImportProgress'
import { ListFormImportDto, ListFormImportExecuteDto } from '@/proxy/imports/models'
import { ListFormImportDto, ListFormImportLogDto } from '@/proxy/imports/models'
import { ImportService } from '@/services/import.service'
import { GridDto } from '@/proxy/form/models'
import { useLocalization } from '@/utils/hooks/useLocalization'
@ -41,7 +41,7 @@ export const ImportDashboard: React.FC<ImportDashboardProps> = ({ gridDto }) =>
const [generating, setGenerating] = useState(false)
const [expandedSessions, setExpandedSessions] = useState<Set<string>>(new Set())
const [sessionExecutes, setSessionExecutes] = useState<
Record<string, ListFormImportExecuteDto[]>
Record<string, ListFormImportLogDto[]>
>({})
const [loadingExecutes, setLoadingExecutes] = useState<Set<string>>(new Set())
@ -77,7 +77,7 @@ export const ImportDashboard: React.FC<ImportDashboardProps> = ({ gridDto }) =>
// Her zaman fresh data çek - cache'e güvenme
setLoadingExecutes((prev) => new Set([...prev, sessionId]))
try {
const executes = await importService.getListFormImportExecutes(sessionId)
const executes = await importService.getListFormImportLogs(sessionId)
setSessionExecutes((prev) => ({
...prev,
[sessionId]: executes,
@ -153,7 +153,7 @@ export const ImportDashboard: React.FC<ImportDashboardProps> = ({ gridDto }) =>
}
}
const handleImportExecute = async (
const handleImportLog = async (
sessionId: string,
listFormCode: string,
selectedRows?: number[],
@ -497,7 +497,7 @@ export const ImportDashboard: React.FC<ImportDashboardProps> = ({ gridDto }) =>
<ImportPreview
session={currentSession}
gridDto={gridDto}
onExecute={handleImportExecute}
onExecute={handleImportLog}
loading={loading}
importService={importService}
onPreviewLoaded={loadImportHistory}
@ -589,7 +589,7 @@ export const ImportDashboard: React.FC<ImportDashboardProps> = ({ gridDto }) =>
if (sessionExecutes[session.id]) {
setLoadingExecutes((prev) => new Set([...prev, session.id]))
try {
const executes = await importService.getListFormImportExecutes(
const executes = await importService.getListFormImportLogs(
session.id,
)
setSessionExecutes((prev) => ({

View file

@ -9,7 +9,7 @@ export interface ListFormImportDto {
creationTime: string
}
export interface ListFormImportExecuteDto {
export interface ListFormImportLogDto {
id: string
importId: string
blobName: string

View file

@ -2,7 +2,7 @@ import { GridDto } from '@/proxy/form/models'
import {
ImportPreviewData,
ListFormImportDto,
ListFormImportExecuteDto,
ListFormImportLogDto,
} from '@/proxy/imports/models'
import apiService from './api.service'
@ -196,7 +196,7 @@ ${headers
sessionId: string,
listFormCode: string,
selectedRows?: number[],
): Promise<ListFormImportExecuteDto> {
): Promise<ListFormImportLogDto> {
// Get the uploaded file data
const uploadedFile = this._uploadedFiles.get(sessionId)
if (!uploadedFile) {
@ -217,7 +217,7 @@ ${headers
}
// Call backend API to execute import with selected rows data
const response = await apiService.fetchData<ListFormImportExecuteDto>({
const response = await apiService.fetchData<ListFormImportLogDto>({
url: `/api/app/list-form-import/execute`,
method: 'POST',
data: {
@ -249,8 +249,8 @@ ${headers
return response.data
}
async getListFormImportExecutes(sessionId: string): Promise<ListFormImportExecuteDto[]> {
const response = await apiService.fetchData<ListFormImportExecuteDto[]>({
async getListFormImportLogs(sessionId: string): Promise<ListFormImportLogDto[]> {
const response = await apiService.fetchData<ListFormImportLogDto[]>({
url: `/api/app/list-form-import/executes/${sessionId}`,
method: 'GET',
})