diff --git a/Marco.Pms.Services/Controllers/OrganizationController.cs b/Marco.Pms.Services/Controllers/OrganizationController.cs index 61c6ebb..847d380 100644 --- a/Marco.Pms.Services/Controllers/OrganizationController.cs +++ b/Marco.Pms.Services/Controllers/OrganizationController.cs @@ -29,6 +29,7 @@ namespace Marco.Pms.Services.Controllers private readonly ILoggingService _logger; private static readonly Guid PMCProvider = Guid.Parse("b1877a3b-8832-47b1-bbe3-dc7e98672f49"); + private static readonly Guid superTenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26"); public OrganizationController(IDbContextFactory dbContextFactory, IServiceScopeFactory serviceScope, UserHelper userHelper, @@ -43,54 +44,61 @@ namespace Marco.Pms.Services.Controllers tenantId = userHelper.GetTenantId(); } #region =================================================================== Get Functions =================================================================== - //[HttpGet("list")] - //public async Task GetListServiceProviderAsync([FromQuery] string? searchString, [FromQuery] string? filter, [FromQuery] bool active = true, - // [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 1) - //{ - // await using var _context = await _dbContextFactory.CreateDbContextAsync(); - // using var scope = _serviceScope.CreateScope(); - // var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + [HttpGet("list")] + public async Task GetOrganizarionListAsync([FromQuery] string? searchString, [FromQuery] double? sprid, [FromQuery] bool active = true, + [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20) + { + await using var _context = await _dbContextFactory.CreateDbContextAsync(); + using var scope = _serviceScope.CreateScope(); - // var serviceProviderQuery = _context.ServiceProviders - // .Include(sp => sp.ProviderType) - // .Where(sp => sp.TenantId == tenantId && sp.IsActive == active); + var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); - // var filterObject = TryDeserializeServicesProviderFilter(filter); + var organizationQuery = _context.Organizations + .Where(o => o.IsActive == active); - // if (filterObject != null) - // { - // if (filterObject.ProviderTypeIds?.Any() ?? false) - // { - // serviceProviderQuery = serviceProviderQuery.Where(sp => filterObject.ProviderTypeIds.Contains(sp.ProviderTypeId)); - // } - // } + if (tenantId != superTenantId) + { + var organizationIds = await _context.TenantOrgMappings.Where(to => to.TenantId == tenantId && to.IsActive).Select(to => to.OrganizationId).ToListAsync(); + organizationQuery = organizationQuery.Where(o => organizationIds.Contains(o.Id)); + } - // if (!string.IsNullOrWhiteSpace(searchString)) - // { - // if (!(Int32.TryParse(searchString, out int num))) - // { - // num = 0; - // } - // serviceProviderQuery = serviceProviderQuery.Where(sp => - // sp.ProviderName.Contains(searchString) || - // sp.ContactPerson.Contains(searchString) || - // sp.Address.Contains(searchString) || - // sp.Email.Contains(searchString) || - // sp.PhoneNumber.Contains(searchString) || - // sp.SPRID == num); - // } + if (sprid.HasValue) + { + organizationQuery = organizationQuery.Where(o => o.SPRID == sprid.Value); + } - // var serviceProviders = await serviceProviderQuery - // .OrderBy(e => e.ProviderName) - // .Skip((pageNumber - 1) * pageSize) - // .Take(pageSize) - // .ToListAsync(); + if (!string.IsNullOrWhiteSpace(searchString)) + { + organizationQuery = organizationQuery.Where(sp => + sp.Name.Contains(searchString) || + sp.ContactPerson.Contains(searchString) || + sp.Address.Contains(searchString) || + sp.Email.Contains(searchString) || + sp.ContactNumber.Contains(searchString)); + } - // var response = _mapper.Map>(serviceProviders); + var organizations = await organizationQuery + .OrderBy(e => e.Name) + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToListAsync(); - // return Ok(ApiResponse.SuccessResponse(response, "Successfully fetched the Service Provider list", 200)); - //} + var createdByIds = organizations.Where(o => o.CreatedById != null).Select(o => o.CreatedById).ToList(); + var updatedByIds = organizations.Where(o => o.UpdatedById != null).Select(o => o.UpdatedById).ToList(); + + var employees = await _context.Employees.Where(e => createdByIds.Contains(e.Id) || updatedByIds.Contains(e.Id)).ToListAsync(); + + var response = organizations.Select(o => + { + var result = _mapper.Map(o); + result.CreatedBy = employees.Where(e => e.Id == o.CreatedById).Select(e => _mapper.Map(e)).FirstOrDefault(); + result.UpdatedBy = employees.Where(e => e.Id == o.UpdatedById).Select(e => _mapper.Map(e)).FirstOrDefault(); + return result; + }); + + return Ok(ApiResponse.SuccessResponse(response, "Successfully fetched the Service Provider list", 200)); + } #endregion