Skip to content

Commit

Permalink
enhancement in netwrok/companies is done with adding externalid and d…
Browse files Browse the repository at this point in the history
…atecreated fields.
  • Loading branch information
AnuragNagpure committed Aug 12, 2024
1 parent 11b473d commit 43c0161
Show file tree
Hide file tree
Showing 9 changed files with 31 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public interface IRegistrationBusinessLogic
{
Task<CompanyWithAddressData> GetCompanyWithAddressAsync(Guid applicationId);
Task<Pagination.Response<CompanyApplicationDetails>> GetCompanyApplicationDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName);
Task<Pagination.Response<CompanyDetailsOspOnboarding>> GetOspCompanyDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName);
Task<Pagination.Response<CompanyDetailsOspOnboarding>> GetOspCompanyDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName, string? externalId);
Task<Pagination.Response<CompanyApplicationWithCompanyUserDetails>> GetAllCompanyApplicationsDetailsAsync(int page, int size, string? companyName);
Task UpdateCompanyBpn(Guid applicationId, string bpn);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,15 +162,15 @@ private async Task<CompanyWithAddressData> GetCompanyWithAddressAsyncInternal(Gu
.AsAsyncEnumerable()));
}

public Task<Pagination.Response<CompanyDetailsOspOnboarding>> GetOspCompanyDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName)
public Task<Pagination.Response<CompanyDetailsOspOnboarding>> GetOspCompanyDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName, string? externalId)
{
if (!string.IsNullOrEmpty(companyName) && !Company.IsMatch(companyName))
{
throw new ControllerArgumentException("CompanyName length must be 3-40 characters and *+=#%\\s not used as one of the first three characters in the company name", nameof(companyName));
}
var applications = portalRepositories.GetInstance<IApplicationRepository>()
.GetExternalCompanyApplicationsFilteredQuery(_identityData.CompanyId,
companyName?.Length >= 3 ? companyName : null,
companyName?.Length >= 3 ? companyName : null, externalId,
GetCompanyApplicationStatusIds(companyApplicationStatusFilter));

return Pagination.CreateResponseAsync(
Expand All @@ -186,9 +186,11 @@ private async Task<CompanyWithAddressData> GetCompanyWithAddressAsyncInternal(Gu
.Take(take)
.Select(application => new CompanyDetailsOspOnboarding(
application.CompanyId,
application.NetworkRegistration!.ExternalId,
application.Id,
application.ApplicationStatusId,
application.DateCreated,
application.Company!.DateCreated,
application.DateLastChanged,
application.Company!.Name,
application.Company.CompanyAssignedRoles.Select(companyAssignedRoles => companyAssignedRoles.CompanyRoleId),
Expand All @@ -211,7 +213,7 @@ private async Task<CompanyWithAddressData> GetCompanyWithAddressAsyncInternal(Gu
_settings.ApplicationsMaxPageSize,
(skip, take) => new Pagination.AsyncSource<CompanyApplicationWithCompanyUserDetails>(
applications.CountAsync(),
applications.OrderByDescending(application => application.DateCreated)
applications.OrderByDescending(application => application.Company!.DateCreated)
.Skip(skip)
.Take(take)
.Select(application => new
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,7 @@ public async Task<NoContentResult> RetriggerDeleteCentralUser([FromRoute] Guid p
/// <param name="size">size to get number of records</param>
/// <param name="companyApplicationStatusFilter">Search by company applicationstatus</param>
/// <param name="companyName">search by company name</param>
/// <param name="externalId">search by external Id</param>
/// <returns>OSp Company Application Details</returns>
/// <remarks>
/// Example: GET: api/administration/registration/network/companies?companyName=Car&amp;page=0&amp;size=4&amp;companyApplicationStatus=Closed <br />
Expand All @@ -579,6 +580,8 @@ public async Task<NoContentResult> RetriggerDeleteCentralUser([FromRoute] Guid p
[Authorize(Policy = PolicyTypes.ValidCompany)]
[Route("network/companies")]
[ProducesResponseType(typeof(Pagination.Response<CompanyDetailsOspOnboarding>), StatusCodes.Status200OK)]
public Task<Pagination.Response<CompanyDetailsOspOnboarding>> GetOspCompanyDetailsAsync([FromQuery] int page, [FromQuery] int size, [FromQuery] CompanyApplicationStatusFilter? companyApplicationStatusFilter = null, [FromQuery] string? companyName = null) =>
_logic.GetOspCompanyDetailsAsync(page, size, companyApplicationStatusFilter, companyName);
public Task<Pagination.Response<CompanyDetailsOspOnboarding>> GetOspCompanyDetailsAsync([FromQuery] int page, [FromQuery] int size, [FromQuery] CompanyApplicationStatusFilter? companyApplicationStatusFilter = null, [FromQuery] string? companyName = null, [FromQuery] string? externalId = null) =>
_logic.GetOspCompanyDetailsAsync(page, size, companyApplicationStatusFilter, companyName, externalId);
}

Check warning on line 586 in src/administration/Administration.Service/Controllers/RegistrationController.cs

View workflow job for this annotation

GitHub Actions / Build, check and test services (8.0)

Avoid multiple blank lines

Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@ namespace Org.Eclipse.TractusX.Portal.Backend.Administration.Service.Models;
public record CompanyDetailsOspOnboarding(

[property: JsonPropertyName("companyId")] Guid CompanyId,
[property: JsonPropertyName("externalId")] string ExternalId,
[property: JsonPropertyName("applicationId")] Guid ApplicationId,
[property: JsonPropertyName("applicationStatus")] CompanyApplicationStatusId CompanyApplicationStatusId,
[property: JsonPropertyName("applicationDateCreated")] DateTimeOffset DateCreated,
[property: JsonPropertyName("applicationDateCreated")] DateTimeOffset ApplicationDateCreated,
[property: JsonPropertyName("dateCreated")] DateTimeOffset DateCreated,
[property: JsonPropertyName("lastChangedDate")] DateTimeOffset? DateLastChanged,
[property: JsonPropertyName("companyName")] string CompanyName,
[property: JsonPropertyName("companyRoles")] IEnumerable<CompanyRoleId> CompanyRoles,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,13 @@ public IQueryable<CompanyApplication> GetCompanyApplicationsFilteredQuery(string
(companyName == null || EF.Functions.ILike(application.Company!.Name, $"{companyName.EscapeForILike()}%")) &&
(applicationStatusIds == null || applicationStatusIds.Contains(application.ApplicationStatusId)));

public IQueryable<CompanyApplication> GetExternalCompanyApplicationsFilteredQuery(Guid onboardingServiceProviderId, string? companyName, IEnumerable<CompanyApplicationStatusId> applicationStatusIds) =>
public IQueryable<CompanyApplication> GetExternalCompanyApplicationsFilteredQuery(Guid onboardingServiceProviderId, string? companyName, string? externalId, IEnumerable<CompanyApplicationStatusId> applicationStatusIds) =>
portalDbContext.CompanyApplications.AsNoTracking()
.Where(application =>
application.CompanyApplicationTypeId == CompanyApplicationTypeId.EXTERNAL &&
application.OnboardingServiceProviderId == onboardingServiceProviderId &&
(companyName == null || EF.Functions.ILike(application.Company!.Name, $"{companyName.EscapeForILike()}%")) &&
(externalId == null || EF.Functions.ILike(application.NetworkRegistration!.ExternalId, $"{externalId.EscapeForILike()}%")) &&
applicationStatusIds.Contains(application.ApplicationStatusId));

public Task<CompanyApplicationDetailData?> GetCompanyApplicationDetailDataAsync(Guid applicationId, Guid userCompanyId, Guid? companyId) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public interface IApplicationRepository
Task<(bool Exists, bool IsUserOfCompany, CompanyApplicationStatusId ApplicationStatus)> GetOwnCompanyApplicationStatusUserDataUntrackedAsync(Guid applicationId, Guid companyId);
Task<CompanyApplicationUserEmailData?> GetOwnCompanyApplicationUserEmailDataAsync(Guid applicationId, Guid companyUserId, IEnumerable<DocumentTypeId> submitDocumentTypeIds);
IQueryable<CompanyApplication> GetCompanyApplicationsFilteredQuery(string? companyName, IEnumerable<CompanyApplicationStatusId> applicationStatusIds);
IQueryable<CompanyApplication> GetExternalCompanyApplicationsFilteredQuery(Guid onboardingServiceProviderId, string? companyName, IEnumerable<CompanyApplicationStatusId> applicationStatusIds);
IQueryable<CompanyApplication> GetExternalCompanyApplicationsFilteredQuery(Guid onboardingServiceProviderId, string? companyName, string? externalId, IEnumerable<CompanyApplicationStatusId> applicationStatusIds);
Task<CompanyApplicationDetailData?> GetCompanyApplicationDetailDataAsync(Guid applicationId, Guid userCompanyId, Guid? companyId);
Task<(string CompanyName, string? FirstName, string? LastName, string? Email, IEnumerable<(Guid ApplicationId, CompanyApplicationStatusId ApplicationStatusId, IEnumerable<(string? FirstName, string? LastName, string? Email)> InvitedUsers)> Applications)> GetCompanyApplicationsDeclineData(Guid companyUserId, IEnumerable<CompanyApplicationStatusId> applicationStatusIds);
Task<(bool IsValidApplicationId, Guid CompanyId, bool IsSubmitted)> GetCompanyIdSubmissionStatusForApplication(Guid applicationId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public CompanyApplication(Guid id, Guid companyId, CompanyApplicationStatusId ap
public virtual Process? ChecklistProcess { get; set; }
public virtual CompanyApplicationType? CompanyApplicationType { get; set; }
public virtual Company? OnboardingServiceProvider { get; set; }
public virtual NetworkRegistration? NetworkRegistration { get; private set; }
public virtual NetworkRegistration? NetworkRegistration { get; set; }
public virtual Identity? LastEditor { get; private set; }
public virtual CompanyInvitation? CompanyInvitation { get; private set; }
public virtual ICollection<Invitation> Invitations { get; private set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,36 +207,41 @@ public async Task GetOspCompanyApplicationDetailsAsync_WithDefaultRequest_GetsEx
Name = _fixture.Create<string>(),
BusinessPartnerNumber = _fixture.Create<string>(),
},
NetworkRegistration = new NetworkRegistration(Guid.NewGuid(), _fixture.Create<string>(), x.CompanyId, Guid.NewGuid(), Guid.NewGuid(), x.Id, x.Created)
{
ExternalId = _fixture.Create<string>(),
DateCreated = _fixture.Create<DateTimeOffset>(),
},
DateLastChanged = _fixture.Create<DateTimeOffset>()
}).ToImmutableList();

var queryData = new AsyncEnumerableStub<CompanyApplication>(data).AsQueryable();

A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(A<Guid>._, A<string?>._, A<IEnumerable<CompanyApplicationStatusId>>._))
A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(A<Guid>._, A<string?>._, A<string?>._, A<IEnumerable<CompanyApplicationStatusId>>._))
.Returns(queryData);

// Act
var result = await _logic.GetOspCompanyDetailsAsync(0, 3, statusFilter, null);
var result = await _logic.GetOspCompanyDetailsAsync(0, 3, statusFilter, null, null);

// Assert
Assert.IsType<Pagination.Response<CompanyDetailsOspOnboarding>>(result);

switch (statusFilter)
{
case CompanyApplicationStatusFilter.Closed:
A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, A<IEnumerable<CompanyApplicationStatusId>>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.CONFIRMED, CompanyApplicationStatusId.DECLINED }))).MustHaveHappenedOnceExactly();
A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, null, A<IEnumerable<CompanyApplicationStatusId>>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.CONFIRMED, CompanyApplicationStatusId.DECLINED }))).MustHaveHappenedOnceExactly();
break;
case CompanyApplicationStatusFilter.InReview:
A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, A<IEnumerable<CompanyApplicationStatusId>>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.SUBMITTED }))).MustHaveHappenedOnceExactly();
A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, null, A<IEnumerable<CompanyApplicationStatusId>>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.SUBMITTED }))).MustHaveHappenedOnceExactly();
break;
default:
A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, A<IEnumerable<CompanyApplicationStatusId>>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.SUBMITTED, CompanyApplicationStatusId.CONFIRMED, CompanyApplicationStatusId.DECLINED }))).MustHaveHappenedOnceExactly();
A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, null, A<IEnumerable<CompanyApplicationStatusId>>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.SUBMITTED, CompanyApplicationStatusId.CONFIRMED, CompanyApplicationStatusId.DECLINED }))).MustHaveHappenedOnceExactly();
break;
}

result.Meta.NumberOfElements.Should().Be(10);

var sorted = data.OrderByDescending(application => application.DateCreated).ToImmutableArray();
var sorted = data.OrderByDescending(application => application.Company!.DateCreated).ToImmutableArray();

result.Content.Should().HaveCount(3).And.Satisfy(
x => x.ApplicationId == sorted[0].Id && x.CompanyApplicationStatusId == sorted[0].ApplicationStatusId && x.DateCreated == sorted[0].DateCreated && x.DateLastChanged == sorted[0].DateLastChanged && x.CompanyId == sorted[0].CompanyId && x.CompanyName == sorted[0].Company!.Name && x.BusinessPartnerNumber == sorted[0].Company!.BusinessPartnerNumber,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,14 @@ public async Task GetOspCompanyApplicationDetailsAsync_ReturnsCompanyApplication
{
//Arrange
var paginationResponse = new Pagination.Response<CompanyDetailsOspOnboarding>(new Pagination.Metadata(15, 1, 1, 15), _fixture.CreateMany<CompanyDetailsOspOnboarding>(5));
A.CallTo(() => _logic.GetOspCompanyDetailsAsync(0, 15, null, null))
A.CallTo(() => _logic.GetOspCompanyDetailsAsync(0, 15, null, null, null))
.Returns(paginationResponse);

//Act
var result = await _controller.GetOspCompanyDetailsAsync(0, 15, null, null);

//Assert
A.CallTo(() => _logic.GetOspCompanyDetailsAsync(0, 15, null, null)).MustHaveHappenedOnceExactly();
A.CallTo(() => _logic.GetOspCompanyDetailsAsync(0, 15, null, null, null)).MustHaveHappenedOnceExactly();
Assert.IsType<Pagination.Response<CompanyDetailsOspOnboarding>>(result);
result.Content.Should().HaveCount(5);
}
Expand Down

0 comments on commit 43c0161

Please sign in to comment.