query avatar placement
This commit is contained in:
parent
3d0fbdceb8
commit
d0c157ce90
12 changed files with 157 additions and 6 deletions
|
|
@ -156,6 +156,7 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
p.PositionDate,
|
p.PositionDate,
|
||||||
PlacementAppointmentDocs = p.PlacementAppointmentDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
PlacementAppointmentDocs = p.PlacementAppointmentDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
|
|
@ -207,6 +208,7 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
data.PositionNumberOld,
|
data.PositionNumberOld,
|
||||||
data.OrganizationPositionOld,
|
data.OrganizationPositionOld,
|
||||||
data.PositionDate,
|
data.PositionDate,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
Docs = placementAppointmentDocs,
|
Docs = placementAppointmentDocs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1174,5 +1174,14 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
return Success(new { caregiver, commander, chairman = new List<dynamic>() });
|
return Success(new { caregiver, commander, chairman = new List<dynamic>() });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("file/{docId:length(36)}")]
|
||||||
|
public async Task<ActionResult<ResponseObject>> GetPathFile(Guid docId)
|
||||||
|
{
|
||||||
|
if (docId == Guid.Parse("00000000-0000-0000-0000-000000000000"))
|
||||||
|
return Error(GlobalMessages.DataNotFound, 404);
|
||||||
|
var path = await _documentService.ImagesPath(docId);
|
||||||
|
return Success(path);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -127,12 +127,38 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
p.PositionLevelOld,
|
p.PositionLevelOld,
|
||||||
p.PositionNumberOld,
|
p.PositionNumberOld,
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
return Error(GlobalMessages.DataNotFound, 404);
|
return Error(GlobalMessages.DataNotFound, 404);
|
||||||
|
var _data = new
|
||||||
|
{
|
||||||
|
data.Id,
|
||||||
|
data.PrefixId,
|
||||||
|
data.Prefix,
|
||||||
|
data.FirstName,
|
||||||
|
data.LastName,
|
||||||
|
data.ProfileId,
|
||||||
|
data.position,
|
||||||
|
data.posNo,
|
||||||
|
data.positionLevel,
|
||||||
|
data.organizationOrganization,
|
||||||
|
data.Reason,
|
||||||
|
data.Status,
|
||||||
|
data.Organization,
|
||||||
|
data.DateStart,
|
||||||
|
data.DateEnd,
|
||||||
|
data.salary,
|
||||||
|
data.CreatedAt,
|
||||||
|
data.PositionTypeOld,
|
||||||
|
data.PositionLevelOld,
|
||||||
|
data.PositionNumberOld,
|
||||||
|
data.OrganizationPositionOld,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
|
};
|
||||||
|
|
||||||
return Success(data);
|
return Success(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,7 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
p.PositionNumberOld,
|
p.PositionNumberOld,
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
PlacementRelocationDocs = p.PlacementRelocationDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
PlacementRelocationDocs = p.PlacementRelocationDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
|
|
@ -204,6 +205,7 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
data.PositionLevelOld,
|
data.PositionLevelOld,
|
||||||
data.PositionNumberOld,
|
data.PositionNumberOld,
|
||||||
data.OrganizationPositionOld,
|
data.OrganizationPositionOld,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
Docs = placementRelocationDocs,
|
Docs = placementRelocationDocs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,12 +125,37 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
p.PositionLevelOld,
|
p.PositionLevelOld,
|
||||||
p.PositionNumberOld,
|
p.PositionNumberOld,
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
return Error(GlobalMessages.DataNotFound, 404);
|
return Error(GlobalMessages.DataNotFound, 404);
|
||||||
|
var _data = new
|
||||||
|
{
|
||||||
|
data.Id,
|
||||||
|
data.PrefixId,
|
||||||
|
data.Prefix,
|
||||||
|
data.FirstName,
|
||||||
|
data.LastName,
|
||||||
|
data.ProfileId,
|
||||||
|
data.position,
|
||||||
|
data.posNo,
|
||||||
|
data.positionLevel,
|
||||||
|
data.organizationOrganization,
|
||||||
|
data.Reason,
|
||||||
|
data.Status,
|
||||||
|
data.Organization,
|
||||||
|
data.Date,
|
||||||
|
data.salary,
|
||||||
|
data.CreatedAt,
|
||||||
|
data.PositionTypeOld,
|
||||||
|
data.PositionLevelOld,
|
||||||
|
data.PositionNumberOld,
|
||||||
|
data.OrganizationPositionOld,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
|
};
|
||||||
|
|
||||||
return Success(data);
|
return Success(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -169,6 +169,7 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
p.PositionLevelOld,
|
p.PositionLevelOld,
|
||||||
p.PositionNumberOld,
|
p.PositionNumberOld,
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
PlacementTransferDocs = p.PlacementTransferDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
PlacementTransferDocs = p.PlacementTransferDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
|
|
@ -207,6 +208,7 @@ namespace BMA.EHR.Placement.Service.Controllers
|
||||||
data.PositionLevelOld,
|
data.PositionLevelOld,
|
||||||
data.PositionNumberOld,
|
data.PositionNumberOld,
|
||||||
data.OrganizationPositionOld,
|
data.OrganizationPositionOld,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
Docs = placementTransferDocs,
|
Docs = placementTransferDocs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
PathName = p.Document == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Document.Id,
|
PathName = p.Document == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Document.Id,
|
||||||
p.IsActive,
|
p.IsActive,
|
||||||
p.CreatedAt,
|
p.CreatedAt,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
|
|
@ -198,6 +199,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
PathName = data.PathName == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.PathName),
|
PathName = data.PathName == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.PathName),
|
||||||
data.IsActive,
|
data.IsActive,
|
||||||
data.CreatedAt,
|
data.CreatedAt,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
};
|
};
|
||||||
|
|
||||||
return Success(_data);
|
return Success(_data);
|
||||||
|
|
|
||||||
|
|
@ -125,12 +125,37 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
p.PositionLevelOld,
|
p.PositionLevelOld,
|
||||||
p.PositionNumberOld,
|
p.PositionNumberOld,
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
return Error(GlobalMessages.DataNotFound, 404);
|
return Error(GlobalMessages.DataNotFound, 404);
|
||||||
|
var _data = new
|
||||||
|
{
|
||||||
|
data.Id,
|
||||||
|
data.PrefixId,
|
||||||
|
data.Prefix,
|
||||||
|
data.FirstName,
|
||||||
|
data.LastName,
|
||||||
|
data.ProfileId,
|
||||||
|
data.position,
|
||||||
|
data.posNo,
|
||||||
|
data.positionLevel,
|
||||||
|
data.organizationOrganization,
|
||||||
|
data.Reason,
|
||||||
|
data.Status,
|
||||||
|
data.Organization,
|
||||||
|
data.Date,
|
||||||
|
data.salary,
|
||||||
|
data.CreatedAt,
|
||||||
|
data.PositionTypeOld,
|
||||||
|
data.PositionLevelOld,
|
||||||
|
data.PositionNumberOld,
|
||||||
|
data.OrganizationPositionOld,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
|
};
|
||||||
|
|
||||||
return Success(data);
|
return Success(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -125,12 +125,37 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
p.PositionLevelOld,
|
p.PositionLevelOld,
|
||||||
p.PositionNumberOld,
|
p.PositionNumberOld,
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
return Error(GlobalMessages.DataNotFound, 404);
|
return Error(GlobalMessages.DataNotFound, 404);
|
||||||
|
var _data = new
|
||||||
|
{
|
||||||
|
data.Id,
|
||||||
|
data.PrefixId,
|
||||||
|
data.Prefix,
|
||||||
|
data.FirstName,
|
||||||
|
data.LastName,
|
||||||
|
data.ProfileId,
|
||||||
|
data.position,
|
||||||
|
data.posNo,
|
||||||
|
data.positionLevel,
|
||||||
|
data.organizationOrganization,
|
||||||
|
data.Reason,
|
||||||
|
data.Status,
|
||||||
|
data.Organization,
|
||||||
|
data.Date,
|
||||||
|
data.salary,
|
||||||
|
data.CreatedAt,
|
||||||
|
data.PositionTypeOld,
|
||||||
|
data.PositionLevelOld,
|
||||||
|
data.PositionNumberOld,
|
||||||
|
data.OrganizationPositionOld,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
|
};
|
||||||
|
|
||||||
return Success(data);
|
return Success(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
p.PositionNumberOld,
|
p.PositionNumberOld,
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
p.PositionDate,
|
p.PositionDate,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
RetirementOtherDocs = p.RetirementOtherDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
RetirementOtherDocs = p.RetirementOtherDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
|
|
@ -207,6 +208,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
data.PositionNumberOld,
|
data.PositionNumberOld,
|
||||||
data.OrganizationPositionOld,
|
data.OrganizationPositionOld,
|
||||||
data.PositionDate,
|
data.PositionDate,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
Docs = retirementOtherDocs,
|
Docs = retirementOtherDocs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,12 +125,37 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
p.PositionLevelOld,
|
p.PositionLevelOld,
|
||||||
p.PositionNumberOld,
|
p.PositionNumberOld,
|
||||||
p.OrganizationPositionOld,
|
p.OrganizationPositionOld,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (data == null)
|
if (data == null)
|
||||||
return Error(GlobalMessages.DataNotFound, 404);
|
return Error(GlobalMessages.DataNotFound, 404);
|
||||||
|
var _data = new
|
||||||
|
{
|
||||||
|
data.Id,
|
||||||
|
data.PrefixId,
|
||||||
|
data.Prefix,
|
||||||
|
data.FirstName,
|
||||||
|
data.LastName,
|
||||||
|
data.ProfileId,
|
||||||
|
data.position,
|
||||||
|
data.posNo,
|
||||||
|
data.positionLevel,
|
||||||
|
data.organizationOrganization,
|
||||||
|
data.Reason,
|
||||||
|
data.Status,
|
||||||
|
data.Organization,
|
||||||
|
data.Date,
|
||||||
|
data.salary,
|
||||||
|
data.CreatedAt,
|
||||||
|
data.PositionTypeOld,
|
||||||
|
data.PositionLevelOld,
|
||||||
|
data.PositionNumberOld,
|
||||||
|
data.OrganizationPositionOld,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
|
};
|
||||||
|
|
||||||
return Success(data);
|
return Success(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -222,6 +222,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
p.CommanderApproveReason,
|
p.CommanderApproveReason,
|
||||||
p.CommanderRejectReason,
|
p.CommanderRejectReason,
|
||||||
p.CommanderRejectDate,
|
p.CommanderRejectDate,
|
||||||
|
Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id,
|
||||||
RetirementResignDocs = p.RetirementResignDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
RetirementResignDocs = p.RetirementResignDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
|
|
@ -268,6 +269,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
data.CommanderApproveReason,
|
data.CommanderApproveReason,
|
||||||
data.CommanderRejectReason,
|
data.CommanderRejectReason,
|
||||||
data.CommanderRejectDate,
|
data.CommanderRejectDate,
|
||||||
|
Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar),
|
||||||
Docs = retirementResignDocs,
|
Docs = retirementResignDocs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -670,6 +672,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
.Select(p => new
|
.Select(p => new
|
||||||
{
|
{
|
||||||
Id = p.Id,
|
Id = p.Id,
|
||||||
|
PrefixId = p.RetirementResign.Profile.Prefix == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.RetirementResign.Profile.Prefix.Id,
|
||||||
Position = p.RetirementResign.Profile.Position == null ? null : p.RetirementResign.Profile.Position.Name,
|
Position = p.RetirementResign.Profile.Position == null ? null : p.RetirementResign.Profile.Position.Name,
|
||||||
PositionLevel = p.RetirementResign.Profile.PositionLevel == null ? null : p.RetirementResign.Profile.PositionLevel.Name,
|
PositionLevel = p.RetirementResign.Profile.PositionLevel == null ? null : p.RetirementResign.Profile.PositionLevel.Name,
|
||||||
Org = p.RetirementResign.Profile.OcId == null ? null : p.RetirementResign.Profile.OcId,
|
Org = p.RetirementResign.Profile.OcId == null ? null : p.RetirementResign.Profile.OcId,
|
||||||
|
|
@ -694,6 +697,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
Suggestion = p.Suggestion,
|
Suggestion = p.Suggestion,
|
||||||
AppointDate = p.AppointDate,
|
AppointDate = p.AppointDate,
|
||||||
LastUpdatedAt = p.LastUpdatedAt,
|
LastUpdatedAt = p.LastUpdatedAt,
|
||||||
|
OrganizationPositionOld = p.RetirementResign.OrganizationPositionOld,
|
||||||
CreatedAt = p.CreatedAt,
|
CreatedAt = p.CreatedAt,
|
||||||
})
|
})
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
|
|
@ -702,6 +706,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
var _data = new
|
var _data = new
|
||||||
{
|
{
|
||||||
data.Id,
|
data.Id,
|
||||||
|
data.PrefixId,
|
||||||
data.Position,
|
data.Position,
|
||||||
data.PositionLevel,
|
data.PositionLevel,
|
||||||
Org = data.Org == null ? null : FindOCFullPath(data.Org.Value, true),
|
Org = data.Org == null ? null : FindOCFullPath(data.Org.Value, true),
|
||||||
|
|
@ -725,11 +730,12 @@ namespace BMA.EHR.Retirement.Service.Controllers
|
||||||
data.FutureWorkReason,
|
data.FutureWorkReason,
|
||||||
data.Suggestion,
|
data.Suggestion,
|
||||||
data.AppointDate,
|
data.AppointDate,
|
||||||
|
data.OrganizationPositionOld,
|
||||||
data.LastUpdatedAt,
|
data.LastUpdatedAt,
|
||||||
data.CreatedAt,
|
data.CreatedAt,
|
||||||
};
|
};
|
||||||
|
|
||||||
return Success(data);
|
return Success(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue