修复相关bug
This commit is contained in:
+63
-2
@@ -147,7 +147,7 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
"合同模板");
|
||||
NormalizeInput(input);
|
||||
await ValidateBusinessScope(input.CompanyId, input.DepartmentId, input.PositionIds);
|
||||
await ValidateReferencedOnboardingTemplates(input);
|
||||
await ValidateReferencedOnboardingTemplates(input, template.Status);
|
||||
await EnsureCodeUnique(input.TemplateCode, input.Id);
|
||||
|
||||
var entity = BuildEntity(input.Id, input);
|
||||
@@ -370,6 +370,18 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
?? throw Oops.Bah("模板版本不存在");
|
||||
await EnsureTemplateCanManage(version.TemplateId);
|
||||
|
||||
if (version.VersionStatus == ContractTemplateVersionStatus.Enabled
|
||||
&& input.VersionStatus == ContractTemplateVersionStatus.Disabled)
|
||||
{
|
||||
var referencedNames = await GetEnabledOnboardingTemplateNames(
|
||||
version.TemplateId,
|
||||
version.Id);
|
||||
if (referencedNames.Count > 0)
|
||||
{
|
||||
throw Oops.Bah(
|
||||
$"该签署材料版本正在被启用中的入职模板{FormatTemplateNames(referencedNames)}引用,不能停用,请先调整或停用这些入职模板");
|
||||
}
|
||||
}
|
||||
if (input.VersionStatus == ContractTemplateVersionStatus.Enabled)
|
||||
{
|
||||
ContractTemplateVersionValidity.ValidateRange(version.EffectiveDate, version.ExpiryDate);
|
||||
@@ -550,7 +562,8 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
/// 防止修改合同模板归属后破坏已经保存的入职模板配置。
|
||||
/// </summary>
|
||||
private async Task ValidateReferencedOnboardingTemplates(
|
||||
OnboardingContractTemplateEditInput input)
|
||||
OnboardingContractTemplateEditInput input,
|
||||
string currentStatus)
|
||||
{
|
||||
var relations = await Context.Queryable<ObOnboardingTemplateContract>()
|
||||
.Where(item => item.ContractTemplateId == input.Id)
|
||||
@@ -565,6 +578,21 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
var onboardingTemplates = await Context.Queryable<ObOnboardingTemplate>()
|
||||
.Where(item => onboardingTemplateIds.Contains(item.Id))
|
||||
.ToListAsync();
|
||||
if (string.Equals(currentStatus, "enable", StringComparison.OrdinalIgnoreCase)
|
||||
&& !string.Equals(input.Status, "enable", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var enabledTemplateNames = onboardingTemplates
|
||||
.Where(item => !item.IsDelete && item.Status == "enable")
|
||||
.Select(item => item.TemplateName)
|
||||
.Distinct()
|
||||
.OrderBy(item => item)
|
||||
.ToList();
|
||||
if (enabledTemplateNames.Count > 0)
|
||||
{
|
||||
throw Oops.Bah(
|
||||
$"该签署材料模板正在被启用中的入职模板{FormatTemplateNames(enabledTemplateNames)}引用,不能停用,请先调整或停用这些入职模板");
|
||||
}
|
||||
}
|
||||
var positionRelations = await Context.Queryable<ObOnboardingTemplatePosition>()
|
||||
.Where(item => onboardingTemplateIds.Contains(item.OnboardingTemplateId))
|
||||
.ToListAsync();
|
||||
@@ -589,6 +617,39 @@ public class OnboardingContractTemplateService : DbRepository<ObContractTemplate
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<List<string>> GetEnabledOnboardingTemplateNames(
|
||||
long contractTemplateId,
|
||||
long? contractTemplateVersionId = null)
|
||||
{
|
||||
var relations = await Context.Queryable<ObOnboardingTemplateContract>()
|
||||
.Where(item => item.ContractTemplateId == contractTemplateId)
|
||||
.WhereIF(contractTemplateVersionId.HasValue,
|
||||
item => item.ContractTemplateVersionId == contractTemplateVersionId.Value)
|
||||
.ToListAsync();
|
||||
if (relations.Count == 0)
|
||||
return new List<string>();
|
||||
|
||||
var onboardingTemplateIds = relations
|
||||
.Select(item => item.OnboardingTemplateId)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var names = await Context.Queryable<ObOnboardingTemplate>()
|
||||
.Where(item => onboardingTemplateIds.Contains(item.Id)
|
||||
&& !item.IsDelete
|
||||
&& item.Status == "enable")
|
||||
.Select(item => item.TemplateName)
|
||||
.ToListAsync();
|
||||
return names
|
||||
.Where(item => !string.IsNullOrWhiteSpace(item))
|
||||
.Distinct()
|
||||
.OrderBy(item => item)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private static string FormatTemplateNames(IEnumerable<string> templateNames)
|
||||
{
|
||||
return string.Join("、", templateNames.Select(item => $"“{item}”"));
|
||||
}
|
||||
/// <summary>
|
||||
/// 构建合同模板主档案实体。
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user