Added the global services ids list parameter in create tenant DTO

This commit is contained in:
ashutosh.nehete 2025-09-25 09:54:08 +05:30
parent fef3db297c
commit 44d2827dcc
2 changed files with 51 additions and 1 deletions

View File

@ -17,5 +17,6 @@
public required string OrganizationSize { get; set; } public required string OrganizationSize { get; set; }
public required Guid IndustryId { get; set; } public required Guid IndustryId { get; set; }
public required string Reference { get; set; } public required string Reference { get; set; }
public required List<Guid> ServiceIds { get; set; }
} }
} }

View File

@ -6,6 +6,7 @@ using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Filters; using Marco.Pms.Model.Filters;
using Marco.Pms.Model.MongoDBModels.Utility; using Marco.Pms.Model.MongoDBModels.Utility;
using Marco.Pms.Model.OrganizationModel;
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
using Marco.Pms.Model.Roles; using Marco.Pms.Model.Roles;
using Marco.Pms.Model.TenantModels; using Marco.Pms.Model.TenantModels;
@ -473,6 +474,27 @@ namespace Marco.Pms.Services.Controllers
await using var transaction = await _context.Database.BeginTransactionAsync(); await using var transaction = await _context.Database.BeginTransactionAsync();
try try
{ {
// Get last SPRID and increment for new organization
var lastOrganization = await _context.Organizations.OrderByDescending(sp => sp.SPRID).FirstOrDefaultAsync();
double lastSPRID = lastOrganization?.SPRID ?? 5400;
// Map DTO to entity and set defaults
Organization organization = new Organization
{
Name = model.OrganizationName,
Email = model.Email,
ContactPerson = $"{model.FirstName} {model.LastName}",
Address = model.BillingAddress,
ContactNumber = model.ContactNumber,
SPRID = lastSPRID + 1,
logoImage = model.logoImage,
CreatedAt = DateTime.UtcNow,
CreatedById = loggedInEmployee.Id,
IsActive = true
};
_context.Organizations.Add(organization);
// Create the primary Tenant entity // Create the primary Tenant entity
var tenant = _mapper.Map<Tenant>(model); var tenant = _mapper.Map<Tenant>(model);
@ -480,6 +502,7 @@ namespace Marco.Pms.Services.Controllers
tenant.TenantStatusId = tenantActiveStatus; tenant.TenantStatusId = tenantActiveStatus;
tenant.CreatedById = loggedInEmployee.Id; tenant.CreatedById = loggedInEmployee.Id;
tenant.IsSuperTenant = false; tenant.IsSuperTenant = false;
tenant.OrganizationId = organization.Id;
_context.Tenants.Add(tenant); _context.Tenants.Add(tenant);
@ -526,7 +549,7 @@ namespace Marco.Pms.Services.Controllers
ApplicationUserId = applicationUser.Id, ApplicationUserId = applicationUser.Id,
JobRole = adminJobRole, // Link to the newly created role JobRole = adminJobRole, // Link to the newly created role
CurrentAddress = model.BillingAddress, CurrentAddress = model.BillingAddress,
TenantId = tenant.Id OrganizationId = organization.Id
}; };
_context.Employees.Add(employeeUser); _context.Employees.Add(employeeUser);
@ -559,6 +582,21 @@ namespace Marco.Pms.Services.Controllers
{ {
ApplicationRoleId = applicationRole.Id, ApplicationRoleId = applicationRole.Id,
FeaturePermissionId = PermissionsMaster.ViewMasters FeaturePermissionId = PermissionsMaster.ViewMasters
},
new RolePermissionMappings
{
ApplicationRoleId = applicationRole.Id,
FeaturePermissionId = PermissionsMaster.ViewOrganization
},
new RolePermissionMappings
{
ApplicationRoleId = applicationRole.Id,
FeaturePermissionId = PermissionsMaster.AddOrganization
},
new RolePermissionMappings
{
ApplicationRoleId = applicationRole.Id,
FeaturePermissionId = PermissionsMaster.EditOrganization
} }
}; };
_context.RolePermissionMappings.AddRange(rolePermissionMappigs); _context.RolePermissionMappings.AddRange(rolePermissionMappigs);
@ -579,6 +617,8 @@ namespace Marco.Pms.Services.Controllers
ProjectAddress = model.BillingAddress, ProjectAddress = model.BillingAddress,
StartDate = model.OnBoardingDate, StartDate = model.OnBoardingDate,
EndDate = DateTime.MaxValue, EndDate = DateTime.MaxValue,
PromoterId = organization.Id,
PMCId = organization.Id,
ContactPerson = tenant.ContactName, ContactPerson = tenant.ContactName,
TenantId = tenant.Id TenantId = tenant.Id
}; };
@ -595,6 +635,15 @@ namespace Marco.Pms.Services.Controllers
}; };
_context.ProjectAllocations.Add(projectAllocation); _context.ProjectAllocations.Add(projectAllocation);
// Map organization services
var serviceOrgMappings = model.ServiceIds.Select(s => new OrgServiceMapping
{
ServiceId = s,
OrganizationId = organization.Id
}).ToList();
_context.OrgServiceMappings.AddRange(serviceOrgMappings);
// All entities are now added to the context. Save them all in a single database operation. // All entities are now added to the context. Save them all in a single database operation.
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();