namespace SimpleAdmin.Application;
///
/// 合同模板主档案;具体 DOCX 文件、变量与适用范围均挂在此档案下。
///
public class OnboardingContractTemplateService : DbRepository, IOnboardingContractTemplateService
{
public async Task> Page(OnboardingContractTemplatePageInput input)
{
return await Context.Queryable()
.WhereIF(
!string.IsNullOrWhiteSpace(input.TemplateName),
it => it.TemplateName.Contains(input.TemplateName) || it.TemplateCode.Contains(input.TemplateName))
.WhereIF(!string.IsNullOrWhiteSpace(input.ContractType), it => it.ContractType == input.ContractType)
.WhereIF(!string.IsNullOrWhiteSpace(input.Status), it => it.Status == input.Status)
.OrderByIF(!string.IsNullOrWhiteSpace(input.SortField), $"{input.SortField} {input.SortOrder}")
.OrderBy(it => it.TemplateName)
.ToPagedListAsync(input.PageNum, input.PageSize);
}
public async Task Detail(BaseIdInput input)
{
return await GetByIdAsync(input.Id) ?? throw Oops.Bah("合同模板不存在");
}
public async Task Add(OnboardingContractTemplateAddInput input)
{
await EnsureCodeUnique(input.TemplateCode, 0);
await InsertAsync(input.Adapt());
}
public async Task Edit(OnboardingContractTemplateEditInput input)
{
await Detail(new BaseIdInput { Id = input.Id });
await EnsureCodeUnique(input.TemplateCode, input.Id);
await UpdateAsync(input.Adapt());
}
public async Task Delete(BaseIdListInput input)
{
if (input.Ids.Count == 0)
return;
var hasVersions = await Context.Queryable()
.AnyAsync(it => input.Ids.Contains(it.TemplateId));
if (hasVersions)
throw Oops.Bah("模板已有版本,不能删除");
var hasScopes = await Context.Queryable()
.AnyAsync(it => input.Ids.Contains(it.TemplateId));
if (hasScopes)
throw Oops.Bah("模板已配置适用范围,不能删除");
var hasContracts = await Context.Queryable()
.AnyAsync(it => input.Ids.Contains(it.TemplateId));
if (hasContracts)
throw Oops.Bah("模板已生成入职合同,不能删除");
await DeleteByIdsAsync(input.Ids.Cast