111
This commit is contained in:
+3
-87
@@ -75,10 +75,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
.Where(item => item.OnboardingTemplateId == template.Id)
|
||||
.OrderBy(item => item.SortCode)
|
||||
.ToListAsync(),
|
||||
FormFields = await _db.Queryable<ObOnboardingTemplateFormField>()
|
||||
.Where(item => item.OnboardingTemplateId == template.Id)
|
||||
.OrderBy(item => item.SortCode)
|
||||
.ToListAsync(),
|
||||
FormFields = new List<ObOnboardingTemplateFormField>(),
|
||||
Materials = await _db.Queryable<ObOnboardingTemplateMaterial>()
|
||||
.Where(item => item.OnboardingTemplateId == template.Id)
|
||||
.OrderBy(item => item.SortCode)
|
||||
@@ -246,49 +243,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
{
|
||||
if (versions.Any(item => item.VersionStatus != ContractTemplateVersionStatus.Enabled))
|
||||
throw Oops.Bah("启用入职模板前,请先启用全部合同版本");
|
||||
|
||||
var variables = await _db.Queryable<ObTemplateVariable>()
|
||||
.Where(item => versionIds.Contains(item.TemplateVersionId))
|
||||
.ToListAsync();
|
||||
var validTypes = new[]
|
||||
{
|
||||
ContractVariableType.Employee,
|
||||
ContractVariableType.Company,
|
||||
ContractVariableType.Contract,
|
||||
ContractVariableType.System
|
||||
};
|
||||
if (variables.Any(item => !validTypes.Contains(item.VariableType)))
|
||||
throw Oops.Bah("合同中仍有未确认来源的变量,请先完成变量映射");
|
||||
}
|
||||
|
||||
var fieldIds = input.FormFields.Select(item => item.FieldId).ToList();
|
||||
var enabledFields = fieldIds.Count == 0
|
||||
? new List<ObFormField>()
|
||||
: await _db.Queryable<ObFormField>()
|
||||
.Where(item => fieldIds.Contains(item.Id) && item.Status == "enable")
|
||||
.ToListAsync();
|
||||
if (enabledFields.Count != fieldIds.Count)
|
||||
throw Oops.Bah("存在未启用或不存在的动态补充字段");
|
||||
|
||||
if (input.Status == "enable")
|
||||
{
|
||||
var variables = await _db.Queryable<ObTemplateVariable>()
|
||||
.Where(item => versionIds.Contains(item.TemplateVersionId)
|
||||
&& item.VariableType == ContractVariableType.Employee)
|
||||
.ToListAsync();
|
||||
var availableFields = new HashSet<string>(
|
||||
typeof(ObTaskEmployeeInfo).GetProperties().Select(property => property.Name),
|
||||
StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var fieldCode in enabledFields.Select(item => item.FieldCode))
|
||||
availableFields.Add(fieldCode);
|
||||
|
||||
var missingMapping = variables.FirstOrDefault(variable =>
|
||||
!availableFields.Contains(ResolveEmployeeVariableField(variable)));
|
||||
if (missingMapping != null)
|
||||
{
|
||||
throw Oops.Bah(
|
||||
$"合同员工变量“{missingMapping.VariableCode}”没有对应的固定字段或模板补充字段,请先完成字段映射");
|
||||
}
|
||||
}
|
||||
|
||||
var materialIds = input.Materials.Select(item => item.MaterialTypeId).ToList();
|
||||
@@ -301,25 +255,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
}
|
||||
}
|
||||
|
||||
private static string ResolveEmployeeVariableField(ObTemplateVariable variable)
|
||||
{
|
||||
var sourceField = variable.EmployeeField;
|
||||
if (string.IsNullOrWhiteSpace(sourceField))
|
||||
{
|
||||
var separatorIndex = variable.VariableCode?.IndexOf('.') ?? -1;
|
||||
sourceField = separatorIndex >= 0
|
||||
? variable.VariableCode[(separatorIndex + 1)..]
|
||||
: variable.VariableCode;
|
||||
}
|
||||
|
||||
return sourceField?.ToUpperInvariant() switch
|
||||
{
|
||||
"FULLNAME" or "FULL_NAME" or "NAME" => nameof(ObTaskEmployeeInfo.EmployeeName),
|
||||
"MOBILE" or "MOBILEPHONE" or "MOBILE_PHONE" => nameof(ObTaskEmployeeInfo.Phone),
|
||||
"IDNUMBER" or "ID_NUMBER" or "IDENTITYNUMBER" => nameof(ObTaskEmployeeInfo.IdCardNumber),
|
||||
_ => sourceField
|
||||
};
|
||||
}
|
||||
private async Task InsertRelations(long templateId, OnboardingTemplateSaveInput input)
|
||||
{
|
||||
var positions = input.PositionIds.Select(positionId => new ObOnboardingTemplatePosition
|
||||
@@ -342,20 +277,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
}).ToList();
|
||||
await _db.Insertable(contracts).ExecuteCommandAsync();
|
||||
|
||||
if (input.FormFields.Count > 0)
|
||||
{
|
||||
var fields = input.FormFields.Select(item => new ObOnboardingTemplateFormField
|
||||
{
|
||||
Id = global::SimpleAdmin.Core.Utils.CommonUtils.GetSingleId(),
|
||||
OnboardingTemplateId = templateId,
|
||||
FieldId = item.FieldId,
|
||||
Required = item.Required,
|
||||
SortCode = item.SortCode
|
||||
}).ToList();
|
||||
await _db.Insertable(fields).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
if (input.Materials.Count > 0)
|
||||
if (input.Materials != null && input.Materials.Count > 0)
|
||||
{
|
||||
var materials = input.Materials.Select(item => new ObOnboardingTemplateMaterial
|
||||
{
|
||||
@@ -377,9 +299,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
await _db.Deleteable<ObOnboardingTemplateContract>()
|
||||
.Where(item => item.OnboardingTemplateId == templateId)
|
||||
.ExecuteCommandAsync();
|
||||
await _db.Deleteable<ObOnboardingTemplateFormField>()
|
||||
.Where(item => item.OnboardingTemplateId == templateId)
|
||||
.ExecuteCommandAsync();
|
||||
await _db.Deleteable<ObOnboardingTemplateMaterial>()
|
||||
.Where(item => item.OnboardingTemplateId == templateId)
|
||||
.ExecuteCommandAsync();
|
||||
@@ -405,9 +324,6 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
var contracts = await _db.Queryable<ObOnboardingTemplateContract>()
|
||||
.Where(item => templateIds.Contains(item.OnboardingTemplateId))
|
||||
.ToListAsync();
|
||||
var fields = await _db.Queryable<ObOnboardingTemplateFormField>()
|
||||
.Where(item => templateIds.Contains(item.OnboardingTemplateId))
|
||||
.ToListAsync();
|
||||
var materials = await _db.Queryable<ObOnboardingTemplateMaterial>()
|
||||
.Where(item => templateIds.Contains(item.OnboardingTemplateId))
|
||||
.ToListAsync();
|
||||
@@ -432,7 +348,7 @@ public class OnboardingTemplateService : IOnboardingTemplateService
|
||||
.Where(name => !string.IsNullOrWhiteSpace(name))
|
||||
.ToList(),
|
||||
ContractCount = contracts.Count(item => item.OnboardingTemplateId == template.Id),
|
||||
FormFieldCount = fields.Count(item => item.OnboardingTemplateId == template.Id),
|
||||
FormFieldCount = 0,
|
||||
MaterialCount = materials.Count(item => item.OnboardingTemplateId == template.Id)
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
Reference in New Issue
Block a user