From 43c016157f617c4bdf9cea34794d82c29db260bd Mon Sep 17 00:00:00 2001 From: AnuragNagpure Date: Mon, 12 Aug 2024 15:35:29 +0530 Subject: [PATCH] enhancement in netwrok/companies is done with adding externalid and datecreated fields. --- .../BusinessLogic/IRegistrationBusinessLogic.cs | 2 +- .../BusinessLogic/RegistrationBusinessLogic.cs | 8 +++++--- .../Controllers/RegistrationController.cs | 7 +++++-- .../Models/CompanyDetailsOspOnboarding.cs | 4 +++- .../Repositories/ApplicationRepository.cs | 3 ++- .../Repositories/IApplicationRepository.cs | 2 +- .../Entities/CompanyApplication.cs | 2 +- .../RegistrationBusinessLogicTest.cs | 17 +++++++++++------ .../Controllers/RegistrationControllerTest.cs | 4 ++-- 9 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/administration/Administration.Service/BusinessLogic/IRegistrationBusinessLogic.cs b/src/administration/Administration.Service/BusinessLogic/IRegistrationBusinessLogic.cs index 1ce740c945..867054ac01 100644 --- a/src/administration/Administration.Service/BusinessLogic/IRegistrationBusinessLogic.cs +++ b/src/administration/Administration.Service/BusinessLogic/IRegistrationBusinessLogic.cs @@ -32,7 +32,7 @@ public interface IRegistrationBusinessLogic { Task GetCompanyWithAddressAsync(Guid applicationId); Task> GetCompanyApplicationDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName); - Task> GetOspCompanyDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName); + Task> GetOspCompanyDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName, string? externalId); Task> GetAllCompanyApplicationsDetailsAsync(int page, int size, string? companyName); Task UpdateCompanyBpn(Guid applicationId, string bpn); diff --git a/src/administration/Administration.Service/BusinessLogic/RegistrationBusinessLogic.cs b/src/administration/Administration.Service/BusinessLogic/RegistrationBusinessLogic.cs index df02c3c6b0..c930411dde 100644 --- a/src/administration/Administration.Service/BusinessLogic/RegistrationBusinessLogic.cs +++ b/src/administration/Administration.Service/BusinessLogic/RegistrationBusinessLogic.cs @@ -162,7 +162,7 @@ private async Task GetCompanyWithAddressAsyncInternal(Gu .AsAsyncEnumerable())); } - public Task> GetOspCompanyDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName) + public Task> GetOspCompanyDetailsAsync(int page, int size, CompanyApplicationStatusFilter? companyApplicationStatusFilter, string? companyName, string? externalId) { if (!string.IsNullOrEmpty(companyName) && !Company.IsMatch(companyName)) { @@ -170,7 +170,7 @@ private async Task GetCompanyWithAddressAsyncInternal(Gu } var applications = portalRepositories.GetInstance() .GetExternalCompanyApplicationsFilteredQuery(_identityData.CompanyId, - companyName?.Length >= 3 ? companyName : null, + companyName?.Length >= 3 ? companyName : null, externalId, GetCompanyApplicationStatusIds(companyApplicationStatusFilter)); return Pagination.CreateResponseAsync( @@ -186,9 +186,11 @@ private async Task 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), @@ -211,7 +213,7 @@ private async Task GetCompanyWithAddressAsyncInternal(Gu _settings.ApplicationsMaxPageSize, (skip, take) => new Pagination.AsyncSource( applications.CountAsync(), - applications.OrderByDescending(application => application.DateCreated) + applications.OrderByDescending(application => application.Company!.DateCreated) .Skip(skip) .Take(take) .Select(application => new diff --git a/src/administration/Administration.Service/Controllers/RegistrationController.cs b/src/administration/Administration.Service/Controllers/RegistrationController.cs index 6dfd31b77a..1b66debe21 100644 --- a/src/administration/Administration.Service/Controllers/RegistrationController.cs +++ b/src/administration/Administration.Service/Controllers/RegistrationController.cs @@ -568,6 +568,7 @@ public async Task RetriggerDeleteCentralUser([FromRoute] Guid p /// size to get number of records /// Search by company applicationstatus /// search by company name + /// search by external Id /// OSp Company Application Details /// /// Example: GET: api/administration/registration/network/companies?companyName=Car&page=0&size=4&companyApplicationStatus=Closed
@@ -579,6 +580,8 @@ public async Task RetriggerDeleteCentralUser([FromRoute] Guid p [Authorize(Policy = PolicyTypes.ValidCompany)] [Route("network/companies")] [ProducesResponseType(typeof(Pagination.Response), StatusCodes.Status200OK)] - public Task> GetOspCompanyDetailsAsync([FromQuery] int page, [FromQuery] int size, [FromQuery] CompanyApplicationStatusFilter? companyApplicationStatusFilter = null, [FromQuery] string? companyName = null) => - _logic.GetOspCompanyDetailsAsync(page, size, companyApplicationStatusFilter, companyName); + public Task> 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); } + + diff --git a/src/administration/Administration.Service/Models/CompanyDetailsOspOnboarding.cs b/src/administration/Administration.Service/Models/CompanyDetailsOspOnboarding.cs index d6088add81..23a3279827 100644 --- a/src/administration/Administration.Service/Models/CompanyDetailsOspOnboarding.cs +++ b/src/administration/Administration.Service/Models/CompanyDetailsOspOnboarding.cs @@ -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 CompanyRoles, diff --git a/src/portalbackend/PortalBackend.DBAccess/Repositories/ApplicationRepository.cs b/src/portalbackend/PortalBackend.DBAccess/Repositories/ApplicationRepository.cs index a4d2f39cc2..2e643621bd 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Repositories/ApplicationRepository.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Repositories/ApplicationRepository.cs @@ -134,12 +134,13 @@ public IQueryable GetCompanyApplicationsFilteredQuery(string (companyName == null || EF.Functions.ILike(application.Company!.Name, $"{companyName.EscapeForILike()}%")) && (applicationStatusIds == null || applicationStatusIds.Contains(application.ApplicationStatusId))); - public IQueryable GetExternalCompanyApplicationsFilteredQuery(Guid onboardingServiceProviderId, string? companyName, IEnumerable applicationStatusIds) => + public IQueryable GetExternalCompanyApplicationsFilteredQuery(Guid onboardingServiceProviderId, string? companyName, string? externalId, IEnumerable 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 GetCompanyApplicationDetailDataAsync(Guid applicationId, Guid userCompanyId, Guid? companyId) => diff --git a/src/portalbackend/PortalBackend.DBAccess/Repositories/IApplicationRepository.cs b/src/portalbackend/PortalBackend.DBAccess/Repositories/IApplicationRepository.cs index 0c9bf25cdb..e82b9f21fc 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Repositories/IApplicationRepository.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Repositories/IApplicationRepository.cs @@ -34,7 +34,7 @@ public interface IApplicationRepository Task<(bool Exists, bool IsUserOfCompany, CompanyApplicationStatusId ApplicationStatus)> GetOwnCompanyApplicationStatusUserDataUntrackedAsync(Guid applicationId, Guid companyId); Task GetOwnCompanyApplicationUserEmailDataAsync(Guid applicationId, Guid companyUserId, IEnumerable submitDocumentTypeIds); IQueryable GetCompanyApplicationsFilteredQuery(string? companyName, IEnumerable applicationStatusIds); - IQueryable GetExternalCompanyApplicationsFilteredQuery(Guid onboardingServiceProviderId, string? companyName, IEnumerable applicationStatusIds); + IQueryable GetExternalCompanyApplicationsFilteredQuery(Guid onboardingServiceProviderId, string? companyName, string? externalId, IEnumerable applicationStatusIds); Task 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 applicationStatusIds); Task<(bool IsValidApplicationId, Guid CompanyId, bool IsSubmitted)> GetCompanyIdSubmissionStatusForApplication(Guid applicationId); diff --git a/src/portalbackend/PortalBackend.PortalEntities/Entities/CompanyApplication.cs b/src/portalbackend/PortalBackend.PortalEntities/Entities/CompanyApplication.cs index 170514cd1d..e400325c99 100644 --- a/src/portalbackend/PortalBackend.PortalEntities/Entities/CompanyApplication.cs +++ b/src/portalbackend/PortalBackend.PortalEntities/Entities/CompanyApplication.cs @@ -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 Invitations { get; private set; } diff --git a/tests/administration/Administration.Service.Tests/BusinessLogic/RegistrationBusinessLogicTest.cs b/tests/administration/Administration.Service.Tests/BusinessLogic/RegistrationBusinessLogicTest.cs index 0572449a24..633dcf658a 100644 --- a/tests/administration/Administration.Service.Tests/BusinessLogic/RegistrationBusinessLogicTest.cs +++ b/tests/administration/Administration.Service.Tests/BusinessLogic/RegistrationBusinessLogicTest.cs @@ -207,16 +207,21 @@ public async Task GetOspCompanyApplicationDetailsAsync_WithDefaultRequest_GetsEx Name = _fixture.Create(), BusinessPartnerNumber = _fixture.Create(), }, + NetworkRegistration = new NetworkRegistration(Guid.NewGuid(), _fixture.Create(), x.CompanyId, Guid.NewGuid(), Guid.NewGuid(), x.Id, x.Created) + { + ExternalId = _fixture.Create(), + DateCreated = _fixture.Create(), + }, DateLastChanged = _fixture.Create() }).ToImmutableList(); var queryData = new AsyncEnumerableStub(data).AsQueryable(); - A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(A._, A._, A>._)) + A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(A._, A._, A._, A>._)) .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>(result); @@ -224,19 +229,19 @@ public async Task GetOspCompanyApplicationDetailsAsync_WithDefaultRequest_GetsEx switch (statusFilter) { case CompanyApplicationStatusFilter.Closed: - A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, A>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.CONFIRMED, CompanyApplicationStatusId.DECLINED }))).MustHaveHappenedOnceExactly(); + A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, null, A>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.CONFIRMED, CompanyApplicationStatusId.DECLINED }))).MustHaveHappenedOnceExactly(); break; case CompanyApplicationStatusFilter.InReview: - A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, A>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.SUBMITTED }))).MustHaveHappenedOnceExactly(); + A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, null, A>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.SUBMITTED }))).MustHaveHappenedOnceExactly(); break; default: - A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, A>.That.IsSameSequenceAs(new[] { CompanyApplicationStatusId.SUBMITTED, CompanyApplicationStatusId.CONFIRMED, CompanyApplicationStatusId.DECLINED }))).MustHaveHappenedOnceExactly(); + A.CallTo(() => _applicationRepository.GetExternalCompanyApplicationsFilteredQuery(CompanyId, null, null, A>.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, diff --git a/tests/administration/Administration.Service.Tests/Controllers/RegistrationControllerTest.cs b/tests/administration/Administration.Service.Tests/Controllers/RegistrationControllerTest.cs index 2b5035c287..74130ece34 100644 --- a/tests/administration/Administration.Service.Tests/Controllers/RegistrationControllerTest.cs +++ b/tests/administration/Administration.Service.Tests/Controllers/RegistrationControllerTest.cs @@ -75,14 +75,14 @@ public async Task GetOspCompanyApplicationDetailsAsync_ReturnsCompanyApplication { //Arrange var paginationResponse = new Pagination.Response(new Pagination.Metadata(15, 1, 1, 15), _fixture.CreateMany(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>(result); result.Content.Should().HaveCount(5); }