diff --git a/Marco.Pms.Model/Mapper/ProjectMapper.cs b/Marco.Pms.Model/Mapper/ProjectMapper.cs index 6dc0986..0712fd7 100644 --- a/Marco.Pms.Model/Mapper/ProjectMapper.cs +++ b/Marco.Pms.Model/Mapper/ProjectMapper.cs @@ -1,5 +1,6 @@ using Marco.Pms.Model.Dtos.Project; using Marco.Pms.Model.Projects; +using Marco.Pms.Model.ViewModels; namespace Marco.Pms.Model.Mapper { @@ -61,6 +62,19 @@ namespace Marco.Pms.Model.Mapper }; } - + public static ProjectListVM ToProjectListVMFromProject(this Project project) + { + return new ProjectListVM + { + Id = project.Id, + Name = project.Name, + ProjectAddress = project.ProjectAddress, + ProjectStatusId = project.ProjectStatusId, + ContactPerson = project.ContactPerson, + StartDate = project.StartDate, + EndDate = project.EndDate, + TenantId = project.TenantId + }; + } } } diff --git a/Marco.Pms.Model/Projects/Project.cs b/Marco.Pms.Model/Projects/Project.cs index d040b6c..58095c8 100644 --- a/Marco.Pms.Model/Projects/Project.cs +++ b/Marco.Pms.Model/Projects/Project.cs @@ -1,14 +1,8 @@ -using Marco.Pms.Model.Entitlements; -using Microsoft.AspNetCore.Mvc.ModelBinding; -using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; -using System; -using System.Collections.Generic; -using System.ComponentModel; +using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Marco.Pms.Model.Entitlements; +using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; namespace Marco.Pms.Model.Projects { diff --git a/Marco.Pms.Model/ViewModels/ProjectListVM.cs b/Marco.Pms.Model/ViewModels/ProjectListVM.cs new file mode 100644 index 0000000..ae42584 --- /dev/null +++ b/Marco.Pms.Model/ViewModels/ProjectListVM.cs @@ -0,0 +1,18 @@ +namespace Marco.Pms.Model.ViewModels +{ + public class ProjectListVM + { + public int Id { get; set; } + public string? Name { get; set; } + public string? ProjectAddress { get; set; } + public string? ContactPerson { get; set; } + + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public int ProjectStatusId { get; set; } + public int TenantId { get; set; } + public int TeamSize { get; set; } + public double CompletedWork { get; set; } + public double PlannedWork { get; set; } + } +} diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index b738932..977b468 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -48,11 +48,43 @@ namespace MarcoBMS.Services.Controllers return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } - List project = await _context.Projects.Where(c=>c.TenantId == _userHelper.GetTenantId()).ToListAsync(); + var tenantId = _userHelper.GetTenantId(); + List projects = await _context.Projects.Where(c=>c.TenantId == _userHelper.GetTenantId()).ToListAsync(); - return Ok(ApiResponse.SuccessResponse(project, "Success.", 200)); + + List response = new List(); + foreach (var project in projects) + { + var result = project.ToProjectListVMFromProject(); + var team = await _context.ProjectAllocations.Where(p => p.TenantId == tenantId && p.ProjectId == project.Id && p.IsActive == true).ToListAsync(); + + result.TeamSize = team.Count(); + + List buildings = await _context.Buildings.Where(b => b.ProjectId == project.Id && b.TenantId == tenantId).ToListAsync(); + List idList = buildings.Select(b => b.Id).ToList(); + + List floors = await _context.Floor.Where(f => idList.Contains(f.BuildingId) && f.TenantId == tenantId).ToListAsync(); + idList = floors.Select(f => f.Id).ToList(); + + List workAreas = await _context.WorkAreas.Where(a => idList.Contains(a.FloorId) && a.TenantId == tenantId).ToListAsync(); + idList = workAreas.Select(a => a.Id).ToList(); + + List workItems = await _context.WorkItems.Where(i => idList.Contains(i.WorkAreaId) && i.TenantId == tenantId).Include(i => i.ActivityMaster).ToListAsync(); + double completedTask = 0; + double plannedTask = 0; + foreach (var workItem in workItems) + { + completedTask += workItem.CompletedWork; + plannedTask += workItem.PlannedWork; + } + result.PlannedWork = plannedTask; + result.CompletedWork = completedTask; + response.Add(result); + } + + return Ok(ApiResponse.SuccessResponse(response, "Success.", 200)); } - + [HttpGet("get/{id:int}")] public async Task Get([FromRoute] int id) {