diff --git a/Marco.Pms.Model/Dtos/Projects/AssignServiceDto.cs b/Marco.Pms.Model/Dtos/Projects/AssignServiceDto.cs new file mode 100644 index 0000000..4049ccc --- /dev/null +++ b/Marco.Pms.Model/Dtos/Projects/AssignServiceDto.cs @@ -0,0 +1,8 @@ +namespace Marco.Pms.Model.Dtos.Projects +{ + public class AssignServiceDto + { + public required Guid ProjectId { get; set; } + public required List ServiceIds { get; set; } + } +} diff --git a/Marco.Pms.Model/ViewModels/Organization/AssignOrganizationVm.cs b/Marco.Pms.Model/ViewModels/Organization/AssignOrganizationVm.cs new file mode 100644 index 0000000..e7adddc --- /dev/null +++ b/Marco.Pms.Model/ViewModels/Organization/AssignOrganizationVm.cs @@ -0,0 +1,15 @@ +using Marco.Pms.Model.OrganizationModel; +using Marco.Pms.Model.ViewModels.Master; +using Marco.Pms.Model.ViewModels.Projects; + +namespace Marco.Pms.Model.ViewModels.Organization +{ + public class AssignOrganizationVm + { + public BasicProjectVM? Project { get; set; } + public BasicOrganizationVm? Organization { get; set; } + public BasicOrganizationVm? ParentOrganization { get; set; } + public ServiceMasterVM? Service { get; set; } + public OrgTypeMaster? OrganizationType { get; set; } + } +} diff --git a/Marco.Pms.Model/ViewModels/Organization/BasicOrganizationVm.cs b/Marco.Pms.Model/ViewModels/Organization/BasicOrganizationVm.cs new file mode 100644 index 0000000..f913d97 --- /dev/null +++ b/Marco.Pms.Model/ViewModels/Organization/BasicOrganizationVm.cs @@ -0,0 +1,13 @@ +namespace Marco.Pms.Model.ViewModels.Organization +{ + public class BasicOrganizationVm + { + public Guid Id { get; set; } + public string? Name { get; set; } + public string? Email { get; set; } + public string? ContactPerson { get; set; } + public string? Address { get; set; } + public string? ContactNumber { get; set; } + public double SPRID { get; set; } + } +} diff --git a/Marco.Pms.Services/Controllers/OrganizationController.cs b/Marco.Pms.Services/Controllers/OrganizationController.cs index 366d0e7..e4a2948 100644 --- a/Marco.Pms.Services/Controllers/OrganizationController.cs +++ b/Marco.Pms.Services/Controllers/OrganizationController.cs @@ -6,7 +6,9 @@ using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.OrganizationModel; using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels.Activities; +using Marco.Pms.Model.ViewModels.Master; using Marco.Pms.Model.ViewModels.Organization; +using Marco.Pms.Model.ViewModels.Projects; using Marco.Pms.Services.Service; using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Service; @@ -255,6 +257,18 @@ namespace Marco.Pms.Services.Controllers && sp.PlannedStartDate.Date >= todaysDate && sp.ActualStartDate.Date >= todaysDate).ToListAsync(); }); + var serviceTask = Task.Run(async () => + { + await using var context = await _dbContextFactory.CreateDbContextAsync(); + return await context.ServiceMasters.Where(s => model.ServiceIds.Contains(s.Id) && s.TenantId == tenantId).ToListAsync(); + }); + + var organizationTypeTask = Task.Run(async () => + { + await using var context = await _dbContextFactory.CreateDbContextAsync(); + return await context.OrgTypeMasters.FirstOrDefaultAsync(o => o.Id == model.OrganizationId); + }); + var organizationTask = Task.Run(async () => { await using var context = await _dbContextFactory.CreateDbContextAsync(); @@ -286,8 +300,10 @@ namespace Marco.Pms.Services.Controllers && p.OrganizationTypeId == ServiceProvider); }); - await Task.WhenAll(organizationTask, parentorganizationTask, projectTask, projectServicesTask, isPMCTask, isServiceProviderTask); + await Task.WhenAll(organizationTask, parentorganizationTask, projectTask, projectServicesTask, isPMCTask, isServiceProviderTask, serviceTask, organizationTypeTask); + var services = serviceTask.Result; + var organizationType = organizationTypeTask.Result; var organization = organizationTask.Result; var projectServices = projectServicesTask.Result; var parentorganization = parentorganizationTask.Result; @@ -345,7 +361,7 @@ namespace Marco.Pms.Services.Controllers TenantId = project.TenantId, PlannedStartDate = project.StartDate ?? DateTime.UtcNow, PlannedEndDate = project.EndDate ?? DateTime.UtcNow, - ActualStartDate = DateTime.UtcNow, + ActualStartDate = DateTime.UtcNow }; _context.ProjectServiceMappings.Add(projectService); } @@ -365,7 +381,18 @@ namespace Marco.Pms.Services.Controllers await _context.SaveChangesAsync(); - var response = _mapper.Map(organization); + var organizationVm = _mapper.Map(organization); + var parentorganizationVm = _mapper.Map(parentorganization); + var projectvm = _mapper.Map(project); + + var response = services.Select(s => new AssignOrganizationVm + { + Project = projectvm, + OrganizationType = organizationType, + Organization = organizationVm, + ParentOrganization = parentorganizationVm, + Service = _mapper.Map(s) + }).ToList(); return Ok(ApiResponse.SuccessResponse(response, "Organization successfully assigned to the project", 200)); } diff --git a/Marco.Pms.Services/MappingProfiles/MappingProfile.cs b/Marco.Pms.Services/MappingProfiles/MappingProfile.cs index f73c60b..da5facd 100644 --- a/Marco.Pms.Services/MappingProfiles/MappingProfile.cs +++ b/Marco.Pms.Services/MappingProfiles/MappingProfile.cs @@ -45,6 +45,7 @@ namespace Marco.Pms.Services.MappingProfiles CreateMap(); CreateMap(); + CreateMap(); #endregion @@ -447,4 +448,4 @@ namespace Marco.Pms.Services.MappingProfiles #endregion } } -} +} \ No newline at end of file