Compare commits
	
		
			No commits in common. "ec7e754f590a5caaaf32de1cf92cdc0d4f18126f" and "d95f61cba960a4054e77482ca6ea4c70e28505c7" have entirely different histories.
		
	
	
		
			ec7e754f59
			...
			d95f61cba9
		
	
		
| @ -6,9 +6,8 @@ using Marco.Pms.Model.DocumentManager; | |||||||
| using Marco.Pms.Model.Employees; | using Marco.Pms.Model.Employees; | ||||||
| using Marco.Pms.Model.Entitlements; | using Marco.Pms.Model.Entitlements; | ||||||
| using Marco.Pms.Model.Forum; | using Marco.Pms.Model.Forum; | ||||||
| using Marco.Pms.Model.Master; | using Marco.Pms.Model.Industries; | ||||||
| using Marco.Pms.Model.Projects; | using Marco.Pms.Model.Projects; | ||||||
| using Marco.Pms.Model.Roles; |  | ||||||
| using Marco.Pms.Model.Utilities; | using Marco.Pms.Model.Utilities; | ||||||
| using Microsoft.AspNetCore.Http; | using Microsoft.AspNetCore.Http; | ||||||
| using Microsoft.AspNetCore.Identity; | using Microsoft.AspNetCore.Identity; | ||||||
| @ -88,7 +87,6 @@ namespace Marco.Pms.DataAccess.Data | |||||||
|         public DbSet<TicketTagMaster> TicketTagMasters { get; set; } |         public DbSet<TicketTagMaster> TicketTagMasters { get; set; } | ||||||
|         public DbSet<Document> Documents { get; set; } |         public DbSet<Document> Documents { get; set; } | ||||||
|         public DbSet<TicketTag> TicketTags { get; set; } |         public DbSet<TicketTag> TicketTags { get; set; } | ||||||
|         public DbSet<WorkCategoryMaster> WorkCategoryMasters { get; set; } |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         protected override void OnModelCreating(ModelBuilder modelBuilder) |         protected override void OnModelCreating(ModelBuilder modelBuilder) | ||||||
| @ -404,33 +402,6 @@ namespace Marco.Pms.DataAccess.Data | |||||||
|                     TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26") |                     TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26") | ||||||
|                 } |                 } | ||||||
|                 ); |                 ); | ||||||
|             modelBuilder.Entity<WorkCategoryMaster>().HasData( |  | ||||||
|                 new WorkCategoryMaster |  | ||||||
|                 { |  | ||||||
|                     Id = new Guid("86bb2cc8-f6b5-4fdd-bbee-c389c713a44b"), |  | ||||||
|                     Name = "Fresh Work", |  | ||||||
|                     Description = "Created new task in a professional or creative context", |  | ||||||
|                     IsSystem = true, |  | ||||||
|                     TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26") |  | ||||||
|                 }, |  | ||||||
|                 new WorkCategoryMaster |  | ||||||
|                 { |  | ||||||
|                     Id = new Guid("9ebfa19c-53b9-481b-b863-c25d2f843201"), |  | ||||||
|                     Name = "Rework", |  | ||||||
|                     Description = "Revising, modifying, or correcting a task to improve its quality or fix issues", |  | ||||||
|                     IsSystem = true, |  | ||||||
|                     TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26") |  | ||||||
|                 }, |  | ||||||
|                 new WorkCategoryMaster |  | ||||||
|                 { |  | ||||||
|                     Id = new Guid("11a79929-1d07-42dc-9e98-82d0d2f4a240"), |  | ||||||
|                     Name = "Quality Issue", |  | ||||||
|                     Description = "Any defect, deviation, or non-conformance in a task that fails to meet established standards or customer expectations.", |  | ||||||
|                     IsSystem = true, |  | ||||||
|                     TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26") |  | ||||||
|                 } |  | ||||||
|                 ); |  | ||||||
| 
 |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private static void ManageApplicationStructure(ModelBuilder modelBuilder) |         private static void ManageApplicationStructure(ModelBuilder modelBuilder) | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,63 +0,0 @@ | |||||||
| using System; |  | ||||||
| using Microsoft.EntityFrameworkCore.Migrations; |  | ||||||
| 
 |  | ||||||
| #nullable disable |  | ||||||
| 
 |  | ||||||
| #pragma warning disable CA1814 // Prefer jagged arrays over multidimensional |  | ||||||
| 
 |  | ||||||
| namespace Marco.Pms.DataAccess.Migrations |  | ||||||
| { |  | ||||||
|     /// <inheritdoc /> |  | ||||||
|     public partial class Added_WorkCategory_Master_Table : Migration |  | ||||||
|     { |  | ||||||
|         /// <inheritdoc /> |  | ||||||
|         protected override void Up(MigrationBuilder migrationBuilder) |  | ||||||
|         { |  | ||||||
|             migrationBuilder.CreateTable( |  | ||||||
|                 name: "WorkCategoryMasters", |  | ||||||
|                 columns: table => new |  | ||||||
|                 { |  | ||||||
|                     Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"), |  | ||||||
|                     Name = table.Column<string>(type: "longtext", nullable: false) |  | ||||||
|                         .Annotation("MySql:CharSet", "utf8mb4"), |  | ||||||
|                     Description = table.Column<string>(type: "longtext", nullable: false) |  | ||||||
|                         .Annotation("MySql:CharSet", "utf8mb4"), |  | ||||||
|                     IsSystem = table.Column<bool>(type: "tinyint(1)", nullable: false), |  | ||||||
|                     TenantId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci") |  | ||||||
|                 }, |  | ||||||
|                 constraints: table => |  | ||||||
|                 { |  | ||||||
|                     table.PrimaryKey("PK_WorkCategoryMasters", x => x.Id); |  | ||||||
|                     table.ForeignKey( |  | ||||||
|                         name: "FK_WorkCategoryMasters_Tenants_TenantId", |  | ||||||
|                         column: x => x.TenantId, |  | ||||||
|                         principalTable: "Tenants", |  | ||||||
|                         principalColumn: "Id", |  | ||||||
|                         onDelete: ReferentialAction.Cascade); |  | ||||||
|                 }) |  | ||||||
|                 .Annotation("MySql:CharSet", "utf8mb4"); |  | ||||||
| 
 |  | ||||||
|             migrationBuilder.InsertData( |  | ||||||
|                 table: "WorkCategoryMasters", |  | ||||||
|                 columns: new[] { "Id", "Description", "IsSystem", "Name", "TenantId" }, |  | ||||||
|                 values: new object[,] |  | ||||||
|                 { |  | ||||||
|                     { new Guid("11a79929-1d07-42dc-9e98-82d0d2f4a240"), "Any defect, deviation, or non-conformance in a task that fails to meet established standards or customer expectations.", true, "Quality Issue", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }, |  | ||||||
|                     { new Guid("86bb2cc8-f6b5-4fdd-bbee-c389c713a44b"), "Created new task in a professional or creative context", true, "Fresh Work", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }, |  | ||||||
|                     { new Guid("9ebfa19c-53b9-481b-b863-c25d2f843201"), "Revising, modifying, or correcting a task to improve its quality or fix issues", true, "Rework", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") } |  | ||||||
|                 }); |  | ||||||
| 
 |  | ||||||
|             migrationBuilder.CreateIndex( |  | ||||||
|                 name: "IX_WorkCategoryMasters_TenantId", |  | ||||||
|                 table: "WorkCategoryMasters", |  | ||||||
|                 column: "TenantId"); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /// <inheritdoc /> |  | ||||||
|         protected override void Down(MigrationBuilder migrationBuilder) |  | ||||||
|         { |  | ||||||
|             migrationBuilder.DropTable( |  | ||||||
|                 name: "WorkCategoryMasters"); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,9 +0,0 @@ | |||||||
| namespace Marco.Pms.Model.Dtos.Master |  | ||||||
| { |  | ||||||
|     public class WorkCategoryMasterDto |  | ||||||
|     { |  | ||||||
|         public Guid? Id { get; set; } |  | ||||||
|         public string Name { get; set; } = string.Empty; |  | ||||||
|         public string? Description { get; set; } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,31 +0,0 @@ | |||||||
| using Marco.Pms.Model.Dtos.Master; |  | ||||||
| using Marco.Pms.Model.Master; |  | ||||||
| using Marco.Pms.Model.ViewModels.Master; |  | ||||||
| 
 |  | ||||||
| namespace Marco.Pms.Model.Mapper |  | ||||||
| { |  | ||||||
|     public static class MasterMapper |  | ||||||
|     { |  | ||||||
|         // --------------------------------  Work Category  -------------------------------- |  | ||||||
|         public static WorkCategoryMaster ToWorkCategoryMasterFromWorkCategoryMasterDto(this WorkCategoryMasterDto categoryMasterDto, Guid tenantId) |  | ||||||
|         { |  | ||||||
|             return new WorkCategoryMaster |  | ||||||
|             { |  | ||||||
|                 Id = categoryMasterDto.Id ?? Guid.Empty, |  | ||||||
|                 Name = categoryMasterDto.Name, |  | ||||||
|                 Description = categoryMasterDto.Description ?? "", |  | ||||||
|                 TenantId = tenantId |  | ||||||
|             }; |  | ||||||
|         } |  | ||||||
|         public static WorkCategoryMasterVM ToWorkCategoryMasterVMFromWorkCategoryMaster(this WorkCategoryMaster categoryMaster) |  | ||||||
|         { |  | ||||||
|             return new WorkCategoryMasterVM |  | ||||||
|             { |  | ||||||
|                 Id = categoryMaster.Id, |  | ||||||
|                 Name = categoryMaster.Name, |  | ||||||
|                 Description = categoryMaster.Description ?? "", |  | ||||||
|                 IsSystem = categoryMaster.IsSystem |  | ||||||
|             }; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| using Marco.Pms.Model.Utilities; |  | ||||||
| 
 |  | ||||||
| namespace Marco.Pms.Model.Master |  | ||||||
| { |  | ||||||
|     public class WorkCategoryMaster : TenantRelation |  | ||||||
|     { |  | ||||||
|         public Guid Id { get; set; } |  | ||||||
|         public string Name { get; set; } = string.Empty; |  | ||||||
|         public string Description { get; set; } = string.Empty; |  | ||||||
|         public bool IsSystem { get; set; } = false; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,11 +0,0 @@ | |||||||
|  |  | ||||||
| namespace Marco.Pms.Model.ViewModels.Master |  | ||||||
| { |  | ||||||
|     public class WorkCategoryMasterVM |  | ||||||
|     { |  | ||||||
|         public Guid? Id { get; set; } |  | ||||||
|         public string Name { get; set; } = string.Empty; |  | ||||||
|         public string? Description { get; set; } |  | ||||||
|         public bool IsSystem { get; set; } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,14 +1,12 @@ | |||||||
| using Marco.Pms.DataAccess.Data; | using Marco.Pms.DataAccess.Data; | ||||||
| using Marco.Pms.Model.Dtos.Activities; | using Marco.Pms.Model.Dtos.Activities; | ||||||
| using Marco.Pms.Model.Dtos.Master; | using Marco.Pms.Model.Dtos.Forum; | ||||||
| using Marco.Pms.Model.Entitlements; | using Marco.Pms.Model.Entitlements; | ||||||
| using Marco.Pms.Model.Forum; | using Marco.Pms.Model.Forum; | ||||||
| using Marco.Pms.Model.Mapper; | using Marco.Pms.Model.Mapper; | ||||||
| using Marco.Pms.Model.Master; |  | ||||||
| using Marco.Pms.Model.Utilities; | using Marco.Pms.Model.Utilities; | ||||||
| using Marco.Pms.Model.ViewModels.Activities; | using Marco.Pms.Model.ViewModels.Activities; | ||||||
| using Marco.Pms.Model.ViewModels.Forum; | using Marco.Pms.Model.ViewModels.Forum; | ||||||
| using Marco.Pms.Model.ViewModels.Master; |  | ||||||
| using MarcoBMS.Services.Helpers; | using MarcoBMS.Services.Helpers; | ||||||
| using MarcoBMS.Services.Service; | using MarcoBMS.Services.Service; | ||||||
| using Microsoft.AspNetCore.Authorization; | using Microsoft.AspNetCore.Authorization; | ||||||
| @ -31,8 +29,6 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             _userHelper = userHelper; |             _userHelper = userHelper; | ||||||
|             _logger = logger; |             _logger = logger; | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         // --------------------------------  Activity  -------------------------------- |  | ||||||
|         [HttpGet] |         [HttpGet] | ||||||
|         [Route("activities")] |         [Route("activities")] | ||||||
|         public async Task<IActionResult> GetActivitiesMaster() |         public async Task<IActionResult> GetActivitiesMaster() | ||||||
| @ -182,9 +178,6 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             _logger.LogInfo("Activity Deleted Successfully from tenant {tenantId}", tenantId); |             _logger.LogInfo("Activity Deleted Successfully from tenant {tenantId}", tenantId); | ||||||
|             return Ok(ApiResponse<object>.SuccessResponse(new { }, "Activity Deleted Successfully", 200)); |             return Ok(ApiResponse<object>.SuccessResponse(new { }, "Activity Deleted Successfully", 200)); | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         // --------------------------------  Industry  -------------------------------- |  | ||||||
| 
 |  | ||||||
|         [HttpGet] |         [HttpGet] | ||||||
|         [Route("industries")] |         [Route("industries")] | ||||||
|         public async Task<IActionResult> GetIndustries() |         public async Task<IActionResult> GetIndustries() | ||||||
| @ -196,8 +189,6 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             return Ok(ApiResponse<object>.SuccessResponse(industries, System.String.Format("{0} industry records fetched successfully", industries.Count), 200)); |             return Ok(ApiResponse<object>.SuccessResponse(industries, System.String.Format("{0} industry records fetched successfully", industries.Count), 200)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // -------------------------------- Ticket Status  -------------------------------- |  | ||||||
| 
 |  | ||||||
|         [HttpGet("ticket-status")] |         [HttpGet("ticket-status")] | ||||||
|         public async Task<IActionResult> GetTicketStatusMaster() |         public async Task<IActionResult> GetTicketStatusMaster() | ||||||
|         { |         { | ||||||
| @ -213,6 +204,51 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             return Ok(ApiResponse<object>.SuccessResponse(statusVMs, System.String.Format("{0} Ticket Status records fetched successfully", statusVMs.Count), 200)); |             return Ok(ApiResponse<object>.SuccessResponse(statusVMs, System.String.Format("{0} Ticket Status records fetched successfully", statusVMs.Count), 200)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         [HttpGet("ticket-types")] | ||||||
|  |         public async Task<IActionResult> GetTicketTypeMaster() | ||||||
|  |         { | ||||||
|  |             Guid tenantId = _userHelper.GetTenantId(); | ||||||
|  |             List<TicketTypeVM> typeVMs = new List<TicketTypeVM>(); | ||||||
|  |             List<TicketTypeMaster> typeMasters = await _context.TicketTypeMasters.Where(s => s.TenantId == tenantId).ToListAsync(); | ||||||
|  |             foreach (var typeMaster in typeMasters) | ||||||
|  |             { | ||||||
|  |                 typeVMs.Add(typeMaster.ToTicketTypeVMFromTicketTypeMaster()); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             _logger.LogInfo("{count} Ticket Type records fetched successfully from tenant {tenantId}", typeVMs.Count, tenantId); | ||||||
|  |             return Ok(ApiResponse<object>.SuccessResponse(typeVMs, System.String.Format("{0} Ticket Type records fetched successfully", typeVMs.Count), 200)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [HttpGet("ticket-priorities")] | ||||||
|  |         public async Task<IActionResult> GetTicketPriorityMaster() | ||||||
|  |         { | ||||||
|  |             Guid tenantId = _userHelper.GetTenantId(); | ||||||
|  |             List<TicketPriorityVM> priorityVMs = new List<TicketPriorityVM>(); | ||||||
|  |             List<TicketPriorityMaster> priorityMasters = await _context.TicketPriorityMasters.Where(s => s.TenantId == tenantId).ToListAsync(); | ||||||
|  |             foreach (var priorityMaster in priorityMasters) | ||||||
|  |             { | ||||||
|  |                 priorityVMs.Add(priorityMaster.ToTicketPriorityVMFromTicketPriorityMaster()); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             _logger.LogInfo("{count} Ticket Priority records fetched successfully from tenant {tenantId}", priorityVMs.Count, tenantId); | ||||||
|  |             return Ok(ApiResponse<object>.SuccessResponse(priorityVMs, System.String.Format("{0} Ticket Priority records fetched successfully", priorityVMs.Count), 200)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [HttpGet("ticket-tags")] | ||||||
|  |         public async Task<IActionResult> GetTicketTagMaster() | ||||||
|  |         { | ||||||
|  |             Guid tenantId = _userHelper.GetTenantId(); | ||||||
|  |             List<TicketTagVM> tagVMs = new List<TicketTagVM>(); | ||||||
|  |             List<TicketTagMaster> tagMasters = await _context.TicketTagMasters.Where(s => s.TenantId == tenantId).ToListAsync(); | ||||||
|  |             foreach (var tagMaster in tagMasters) | ||||||
|  |             { | ||||||
|  |                 tagVMs.Add(tagMaster.ToTicketTagVMFromTicketTagMaster()); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             _logger.LogInfo("{count} Ticket Tag records fetched successfully from tenant {tenantId}", tagVMs.Count, tenantId); | ||||||
|  |             return Ok(ApiResponse<object>.SuccessResponse(tagVMs, System.String.Format("{0} Ticket Tag records fetched successfully", tagVMs.Count), 200)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         [HttpPost("ticket-status")] |         [HttpPost("ticket-status")] | ||||||
|         public async Task<IActionResult> CreateTicketStatusMaster(TicketStatusMasterDto statusMasterDto) |         public async Task<IActionResult> CreateTicketStatusMaster(TicketStatusMasterDto statusMasterDto) | ||||||
|         { |         { | ||||||
| @ -231,6 +267,63 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("Sent Empty payload", "Sent Empty payload", 400)); |             return BadRequest(ApiResponse<object>.ErrorResponse("Sent Empty payload", "Sent Empty payload", 400)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         [HttpPost("ticket-types")] | ||||||
|  |         public async Task<IActionResult> CreateTicketTypeMaster(TicketTypeMasterDto typeMasterDto) | ||||||
|  |         { | ||||||
|  |             Guid tenantId = _userHelper.GetTenantId(); | ||||||
|  |             if (typeMasterDto != null) | ||||||
|  |             { | ||||||
|  |                 TicketTypeMaster? typeMaster = typeMasterDto.ToTicketTypeMasterFromTicketTypeMasterDto(tenantId); | ||||||
|  |                 _context.TicketTypeMasters.Update(typeMaster); | ||||||
|  |                 await _context.SaveChangesAsync(); | ||||||
|  | 
 | ||||||
|  |                 TicketTypeVM typeVM = typeMaster.ToTicketTypeVMFromTicketTypeMaster(); | ||||||
|  |                 _logger.LogInfo("Ticket Type master {TicketTypeId} added successfully from tenant {tenantId}", typeMaster.Id, tenantId); | ||||||
|  |                 return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket type master added successfully", 200)); | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |             _logger.LogError("User sent empyt payload"); | ||||||
|  |             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [HttpPost("ticket-priorities")] | ||||||
|  |         public async Task<IActionResult> CreateTicketPriorityMaster(TicketPriorityMasterDto priorityMasterDto) | ||||||
|  |         { | ||||||
|  | 
 | ||||||
|  |             Guid tenantId = _userHelper.GetTenantId(); | ||||||
|  |             if (priorityMasterDto != null) | ||||||
|  |             { | ||||||
|  |                 TicketPriorityMaster? typeMaster = priorityMasterDto.ToTicketPriorityMasterFromTicketPriorityMasterDto(tenantId); | ||||||
|  |                 _context.TicketPriorityMasters.Update(typeMaster); | ||||||
|  |                 await _context.SaveChangesAsync(); | ||||||
|  | 
 | ||||||
|  |                 TicketPriorityVM typeVM = typeMaster.ToTicketPriorityVMFromTicketPriorityMaster(); | ||||||
|  |                 _logger.LogInfo("Ticket Priority master {TicketPriorityId} added successfully from tenant {tenantId}", typeMaster.Id, tenantId); | ||||||
|  |                 return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket Priority master added successfully", 200)); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             _logger.LogError("User sent empyt payload"); | ||||||
|  |             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [HttpPost("ticket-tags")] | ||||||
|  |         public async Task<IActionResult> CreateTicketTagMaster(TicketTagMasterDto tagMasterDto) | ||||||
|  |         { | ||||||
|  |             Guid tenantId = _userHelper.GetTenantId(); | ||||||
|  |             if (tagMasterDto != null) | ||||||
|  |             { | ||||||
|  |                 TicketTagMaster? tagMaster = tagMasterDto.ToTicketTagMasterFromTicketTagMasterDto(tenantId); | ||||||
|  |                 _context.TicketTagMasters.Update(tagMaster); | ||||||
|  |                 await _context.SaveChangesAsync(); | ||||||
|  | 
 | ||||||
|  |                 TicketTagVM typeVM = tagMaster.ToTicketTagVMFromTicketTagMaster(); | ||||||
|  |                 _logger.LogInfo("Ticket Tag master {TicketTypeId} added successfully from tenant {tenantId}", tagMaster.Id, tenantId); | ||||||
|  |                 return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket tag master added successfully", 200)); | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |             _logger.LogError("User sent empyt payload"); | ||||||
|  |             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); | ||||||
|  |         } | ||||||
|         [HttpPost("ticket-status/edit")] |         [HttpPost("ticket-status/edit")] | ||||||
|         public async Task<IActionResult> UpdateTicketStatusMaster(TicketStatusMasterDto statusMasterDto) |         public async Task<IActionResult> UpdateTicketStatusMaster(TicketStatusMasterDto statusMasterDto) | ||||||
|         { |         { | ||||||
| @ -255,6 +348,78 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("Sent Empty payload", "Sent Empty payload", 400)); |             return BadRequest(ApiResponse<object>.ErrorResponse("Sent Empty payload", "Sent Empty payload", 400)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         [HttpPost("ticket-types/edit")] | ||||||
|  |         public async Task<IActionResult> UpdateTicketTypeMaster(TicketTypeMasterDto typeMasterDto) | ||||||
|  |         { | ||||||
|  |             Guid tenantId = _userHelper.GetTenantId(); | ||||||
|  |             if (typeMasterDto != null) | ||||||
|  |             { | ||||||
|  |                 TicketTypeMaster? typeMaster = await _context.TicketTypeMasters.AsNoTracking().FirstOrDefaultAsync(s => s.TenantId == tenantId && s.Id == typeMasterDto.Id); | ||||||
|  |                 if (typeMaster != null) | ||||||
|  |                 { | ||||||
|  |                     typeMaster = typeMasterDto.ToTicketTypeMasterFromTicketTypeMasterDto(tenantId); | ||||||
|  |                     _context.TicketTypeMasters.Update(typeMaster); | ||||||
|  |                     await _context.SaveChangesAsync(); | ||||||
|  | 
 | ||||||
|  |                     TicketTypeVM typeVM = typeMaster.ToTicketTypeVMFromTicketTypeMaster(); | ||||||
|  |                     _logger.LogInfo("Ticket Type master {TicketTypeId} updated successfully from tenant {tenantId}", typeMaster.Id, tenantId); | ||||||
|  |                     return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket type master updated successfully", 200)); | ||||||
|  |                 } | ||||||
|  |                 _logger.LogError("Ticket type master {TicketTypeId} not found in database", typeMasterDto.Id != null ? typeMasterDto.Id.Value : Guid.Empty); | ||||||
|  |                 return NotFound(ApiResponse<object>.ErrorResponse("Ticket type master not found", "Ticket type master not found", 404)); | ||||||
|  |             } | ||||||
|  |             _logger.LogError("User sent empyt payload"); | ||||||
|  |             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [HttpPost("ticket-priorities/edit")] | ||||||
|  |         public async Task<IActionResult> UpdateTicketPriorityMaster(TicketPriorityMasterDto priorityMasterDto) | ||||||
|  |         { | ||||||
|  |             Guid tenantId = _userHelper.GetTenantId(); | ||||||
|  |             if (priorityMasterDto != null) | ||||||
|  |             { | ||||||
|  |                 TicketPriorityMaster? typeMaster = await _context.TicketPriorityMasters.AsNoTracking().FirstOrDefaultAsync(s => s.TenantId == tenantId && s.Id == priorityMasterDto.Id); | ||||||
|  |                 if (typeMaster != null) | ||||||
|  |                 { | ||||||
|  |                     typeMaster = priorityMasterDto.ToTicketPriorityMasterFromTicketPriorityMasterDto(tenantId); | ||||||
|  |                     _context.TicketPriorityMasters.Update(typeMaster); | ||||||
|  |                     await _context.SaveChangesAsync(); | ||||||
|  | 
 | ||||||
|  |                     TicketPriorityVM typeVM = typeMaster.ToTicketPriorityVMFromTicketPriorityMaster(); | ||||||
|  |                     _logger.LogInfo("Ticket Priority master {TicketPriorityId} updated successfully from tenant {tenantId}", typeMaster.Id, tenantId); | ||||||
|  |                     return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket Priority master updated successfully", 200)); | ||||||
|  |                 } | ||||||
|  |                 _logger.LogError("Ticket Priority master {TicketPriorityId} not found in database", priorityMasterDto.Id != null ? priorityMasterDto.Id.Value : Guid.Empty); | ||||||
|  |                 return NotFound(ApiResponse<object>.ErrorResponse("Ticket Priority master not found", "Ticket Priority master not found", 404)); | ||||||
|  |             } | ||||||
|  |             _logger.LogError("User sent empyt payload"); | ||||||
|  |             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [HttpPost("ticket-tags/edit")] | ||||||
|  |         public async Task<IActionResult> UpdateTicketTagMaster(TicketTagMasterDto tagMasterDto) | ||||||
|  |         { | ||||||
|  |             var tenantId = _userHelper.GetTenantId(); | ||||||
|  |             if (tagMasterDto != null) | ||||||
|  |             { | ||||||
|  |                 TicketTagMaster? tagMaster = await _context.TicketTagMasters.AsNoTracking().FirstOrDefaultAsync(s => s.TenantId == tenantId && s.Id == tagMasterDto.Id); | ||||||
|  |                 if (tagMaster != null) | ||||||
|  |                 { | ||||||
|  |                     tagMaster = tagMasterDto.ToTicketTagMasterFromTicketTagMasterDto(tenantId); | ||||||
|  |                     _context.TicketTagMasters.Update(tagMaster); | ||||||
|  |                     await _context.SaveChangesAsync(); | ||||||
|  | 
 | ||||||
|  |                     TicketTagVM typeVM = tagMaster.ToTicketTagVMFromTicketTagMaster(); | ||||||
|  |                     _logger.LogInfo("Ticket Tag master {TicketTypeId} updated successfully from tenant {tenantId}", tagMaster.Id, tenantId); | ||||||
|  |                     return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket tag master updated successfully", 200)); | ||||||
|  |                 } | ||||||
|  |                 _logger.LogError("Ticket tag master {TicketTypeId} not found in database", tagMasterDto.Id != null ? tagMasterDto.Id.Value : Guid.Empty); | ||||||
|  |                 return NotFound(ApiResponse<object>.ErrorResponse("Ticket tag master not found", "Ticket tag master not found", 404)); | ||||||
|  |             } | ||||||
|  |             _logger.LogError("User sent empyt payload"); | ||||||
|  |             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         [HttpDelete("ticket-status/{id}")] |         [HttpDelete("ticket-status/{id}")] | ||||||
|         public async Task<IActionResult> DeleteTicketStatusMaster(Guid id) |         public async Task<IActionResult> DeleteTicketStatusMaster(Guid id) | ||||||
|         { |         { | ||||||
| @ -283,66 +448,6 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // -------------------------------- Ticket Type  -------------------------------- |  | ||||||
| 
 |  | ||||||
|         [HttpGet("ticket-types")] |  | ||||||
|         public async Task<IActionResult> GetTicketTypeMaster() |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             List<TicketTypeVM> typeVMs = new List<TicketTypeVM>(); |  | ||||||
|             List<TicketTypeMaster> typeMasters = await _context.TicketTypeMasters.Where(s => s.TenantId == tenantId).ToListAsync(); |  | ||||||
|             foreach (var typeMaster in typeMasters) |  | ||||||
|             { |  | ||||||
|                 typeVMs.Add(typeMaster.ToTicketTypeVMFromTicketTypeMaster()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             _logger.LogInfo("{count} Ticket Type records fetched successfully from tenant {tenantId}", typeVMs.Count, tenantId); |  | ||||||
|             return Ok(ApiResponse<object>.SuccessResponse(typeVMs, System.String.Format("{0} Ticket Type records fetched successfully", typeVMs.Count), 200)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpPost("ticket-types")] |  | ||||||
|         public async Task<IActionResult> CreateTicketTypeMaster(TicketTypeMasterDto typeMasterDto) |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             if (typeMasterDto != null) |  | ||||||
|             { |  | ||||||
|                 TicketTypeMaster? typeMaster = typeMasterDto.ToTicketTypeMasterFromTicketTypeMasterDto(tenantId); |  | ||||||
|                 _context.TicketTypeMasters.Add(typeMaster); |  | ||||||
|                 await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                 TicketTypeVM typeVM = typeMaster.ToTicketTypeVMFromTicketTypeMaster(); |  | ||||||
|                 _logger.LogInfo("Ticket Type master {TicketTypeId} added successfully from tenant {tenantId}", typeMaster.Id, tenantId); |  | ||||||
|                 return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket type master added successfully", 200)); |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|             _logger.LogError("User sent empyt payload"); |  | ||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpPost("ticket-types/edit")] |  | ||||||
|         public async Task<IActionResult> UpdateTicketTypeMaster(TicketTypeMasterDto typeMasterDto) |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             if (typeMasterDto != null) |  | ||||||
|             { |  | ||||||
|                 TicketTypeMaster? typeMaster = await _context.TicketTypeMasters.AsNoTracking().FirstOrDefaultAsync(s => s.TenantId == tenantId && s.Id == typeMasterDto.Id); |  | ||||||
|                 if (typeMaster != null) |  | ||||||
|                 { |  | ||||||
|                     typeMaster = typeMasterDto.ToTicketTypeMasterFromTicketTypeMasterDto(tenantId); |  | ||||||
|                     _context.TicketTypeMasters.Update(typeMaster); |  | ||||||
|                     await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                     TicketTypeVM typeVM = typeMaster.ToTicketTypeVMFromTicketTypeMaster(); |  | ||||||
|                     _logger.LogInfo("Ticket Type master {TicketTypeId} updated successfully from tenant {tenantId}", typeMaster.Id, tenantId); |  | ||||||
|                     return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket type master updated successfully", 200)); |  | ||||||
|                 } |  | ||||||
|                 _logger.LogError("Ticket type master {TicketTypeId} not found in database", typeMasterDto.Id != null ? typeMasterDto.Id.Value : Guid.Empty); |  | ||||||
|                 return NotFound(ApiResponse<object>.ErrorResponse("Ticket type master not found", "Ticket type master not found", 404)); |  | ||||||
|             } |  | ||||||
|             _logger.LogError("User sent empyt payload"); |  | ||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpDelete("ticket-types/{id}")] |         [HttpDelete("ticket-types/{id}")] | ||||||
|         public async Task<IActionResult> DeleteTicketTypeMaster(Guid id) |         public async Task<IActionResult> DeleteTicketTypeMaster(Guid id) | ||||||
|         { |         { | ||||||
| @ -371,66 +476,6 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // --------------------------------  Ticket Priority  -------------------------------- |  | ||||||
| 
 |  | ||||||
|         [HttpGet("ticket-priorities")] |  | ||||||
|         public async Task<IActionResult> GetTicketPriorityMaster() |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             List<TicketPriorityVM> priorityVMs = new List<TicketPriorityVM>(); |  | ||||||
|             List<TicketPriorityMaster> priorityMasters = await _context.TicketPriorityMasters.Where(s => s.TenantId == tenantId).ToListAsync(); |  | ||||||
|             foreach (var priorityMaster in priorityMasters) |  | ||||||
|             { |  | ||||||
|                 priorityVMs.Add(priorityMaster.ToTicketPriorityVMFromTicketPriorityMaster()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             _logger.LogInfo("{count} Ticket Priority records fetched successfully from tenant {tenantId}", priorityVMs.Count, tenantId); |  | ||||||
|             return Ok(ApiResponse<object>.SuccessResponse(priorityVMs, System.String.Format("{0} Ticket Priority records fetched successfully", priorityVMs.Count), 200)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpPost("ticket-priorities")] |  | ||||||
|         public async Task<IActionResult> CreateTicketPriorityMaster(TicketPriorityMasterDto priorityMasterDto) |  | ||||||
|         { |  | ||||||
| 
 |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             if (priorityMasterDto != null) |  | ||||||
|             { |  | ||||||
|                 TicketPriorityMaster? typeMaster = priorityMasterDto.ToTicketPriorityMasterFromTicketPriorityMasterDto(tenantId); |  | ||||||
|                 _context.TicketPriorityMasters.Add(typeMaster); |  | ||||||
|                 await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                 TicketPriorityVM typeVM = typeMaster.ToTicketPriorityVMFromTicketPriorityMaster(); |  | ||||||
|                 _logger.LogInfo("Ticket Priority master {TicketPriorityId} added successfully from tenant {tenantId}", typeMaster.Id, tenantId); |  | ||||||
|                 return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket Priority master added successfully", 200)); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             _logger.LogError("User sent empyt payload"); |  | ||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); |  | ||||||
|         } |  | ||||||
|         [HttpPost("ticket-priorities/edit")] |  | ||||||
|         public async Task<IActionResult> UpdateTicketPriorityMaster(TicketPriorityMasterDto priorityMasterDto) |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             if (priorityMasterDto != null) |  | ||||||
|             { |  | ||||||
|                 TicketPriorityMaster? typeMaster = await _context.TicketPriorityMasters.AsNoTracking().FirstOrDefaultAsync(s => s.TenantId == tenantId && s.Id == priorityMasterDto.Id); |  | ||||||
|                 if (typeMaster != null) |  | ||||||
|                 { |  | ||||||
|                     typeMaster = priorityMasterDto.ToTicketPriorityMasterFromTicketPriorityMasterDto(tenantId); |  | ||||||
|                     _context.TicketPriorityMasters.Update(typeMaster); |  | ||||||
|                     await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                     TicketPriorityVM typeVM = typeMaster.ToTicketPriorityVMFromTicketPriorityMaster(); |  | ||||||
|                     _logger.LogInfo("Ticket Priority master {TicketPriorityId} updated successfully from tenant {tenantId}", typeMaster.Id, tenantId); |  | ||||||
|                     return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket Priority master updated successfully", 200)); |  | ||||||
|                 } |  | ||||||
|                 _logger.LogError("Ticket Priority master {TicketPriorityId} not found in database", priorityMasterDto.Id != null ? priorityMasterDto.Id.Value : Guid.Empty); |  | ||||||
|                 return NotFound(ApiResponse<object>.ErrorResponse("Ticket Priority master not found", "Ticket Priority master not found", 404)); |  | ||||||
|             } |  | ||||||
|             _logger.LogError("User sent empyt payload"); |  | ||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpDelete("ticket-priorities/{id}")] |         [HttpDelete("ticket-priorities/{id}")] | ||||||
|         public async Task<IActionResult> DeleteTicketPriorityMaster(Guid id) |         public async Task<IActionResult> DeleteTicketPriorityMaster(Guid id) | ||||||
|         { |         { | ||||||
| @ -459,66 +504,6 @@ namespace Marco.Pms.Services.Controllers | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // -------------------------------- Ticket Tag  -------------------------------- |  | ||||||
| 
 |  | ||||||
|         [HttpGet("ticket-tags")] |  | ||||||
|         public async Task<IActionResult> GetTicketTagMaster() |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             List<TicketTagVM> tagVMs = new List<TicketTagVM>(); |  | ||||||
|             List<TicketTagMaster> tagMasters = await _context.TicketTagMasters.Where(s => s.TenantId == tenantId).ToListAsync(); |  | ||||||
|             foreach (var tagMaster in tagMasters) |  | ||||||
|             { |  | ||||||
|                 tagVMs.Add(tagMaster.ToTicketTagVMFromTicketTagMaster()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             _logger.LogInfo("{count} Ticket Tag records fetched successfully from tenant {tenantId}", tagVMs.Count, tenantId); |  | ||||||
|             return Ok(ApiResponse<object>.SuccessResponse(tagVMs, System.String.Format("{0} Ticket Tag records fetched successfully", tagVMs.Count), 200)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpPost("ticket-tags")] |  | ||||||
|         public async Task<IActionResult> CreateTicketTagMaster(TicketTagMasterDto tagMasterDto) |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             if (tagMasterDto != null) |  | ||||||
|             { |  | ||||||
|                 TicketTagMaster? tagMaster = tagMasterDto.ToTicketTagMasterFromTicketTagMasterDto(tenantId); |  | ||||||
|                 _context.TicketTagMasters.Add(tagMaster); |  | ||||||
|                 await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                 TicketTagVM typeVM = tagMaster.ToTicketTagVMFromTicketTagMaster(); |  | ||||||
|                 _logger.LogInfo("Ticket Tag master {TicketTypeId} added successfully from tenant {tenantId}", tagMaster.Id, tenantId); |  | ||||||
|                 return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket tag master added successfully", 200)); |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|             _logger.LogError("User sent empyt payload"); |  | ||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpPost("ticket-tags/edit")] |  | ||||||
|         public async Task<IActionResult> UpdateTicketTagMaster(TicketTagMasterDto tagMasterDto) |  | ||||||
|         { |  | ||||||
|             var tenantId = _userHelper.GetTenantId(); |  | ||||||
|             if (tagMasterDto != null) |  | ||||||
|             { |  | ||||||
|                 TicketTagMaster? tagMaster = await _context.TicketTagMasters.AsNoTracking().FirstOrDefaultAsync(s => s.TenantId == tenantId && s.Id == tagMasterDto.Id); |  | ||||||
|                 if (tagMaster != null) |  | ||||||
|                 { |  | ||||||
|                     tagMaster = tagMasterDto.ToTicketTagMasterFromTicketTagMasterDto(tenantId); |  | ||||||
|                     _context.TicketTagMasters.Update(tagMaster); |  | ||||||
|                     await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                     TicketTagVM typeVM = tagMaster.ToTicketTagVMFromTicketTagMaster(); |  | ||||||
|                     _logger.LogInfo("Ticket Tag master {TicketTypeId} updated successfully from tenant {tenantId}", tagMaster.Id, tenantId); |  | ||||||
|                     return Ok(ApiResponse<object>.SuccessResponse(typeVM, "Ticket tag master updated successfully", 200)); |  | ||||||
|                 } |  | ||||||
|                 _logger.LogError("Ticket tag master {TicketTypeId} not found in database", tagMasterDto.Id != null ? tagMasterDto.Id.Value : Guid.Empty); |  | ||||||
|                 return NotFound(ApiResponse<object>.ErrorResponse("Ticket tag master not found", "Ticket tag master not found", 404)); |  | ||||||
|             } |  | ||||||
|             _logger.LogError("User sent empyt payload"); |  | ||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpDelete("ticket-tags/{id}")] |         [HttpDelete("ticket-tags/{id}")] | ||||||
|         public async Task<IActionResult> DeleteTicketTagMaster(Guid id) |         public async Task<IActionResult> DeleteTicketTagMaster(Guid id) | ||||||
|         { |         { | ||||||
| @ -546,126 +531,5 @@ namespace Marco.Pms.Services.Controllers | |||||||
|                 return NotFound(ApiResponse<object>.ErrorResponse("Ticket tag not found", "Ticket tag not found", 404)); |                 return NotFound(ApiResponse<object>.ErrorResponse("Ticket tag not found", "Ticket tag not found", 404)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         // -------------------------------- Work Category  -------------------------------- |  | ||||||
| 
 |  | ||||||
|         [HttpGet("work-categories")] |  | ||||||
|         public async Task<IActionResult> GetWorkCategoryMasterList() |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             List<WorkCategoryMasterVM> workCategoryMasterVMs = new List<WorkCategoryMasterVM>(); |  | ||||||
|             List<WorkCategoryMaster> workCategories = await _context.WorkCategoryMasters.Where(s => s.TenantId == tenantId).ToListAsync(); |  | ||||||
|             foreach (var workCategory in workCategories) |  | ||||||
|             { |  | ||||||
|                 workCategoryMasterVMs.Add(workCategory.ToWorkCategoryMasterVMFromWorkCategoryMaster()); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             _logger.LogInfo("{count} Work Category records fetched successfully from tenant {tenantId}", workCategoryMasterVMs.Count, tenantId); |  | ||||||
|             return Ok(ApiResponse<object>.SuccessResponse(workCategoryMasterVMs, System.String.Format("{0} Work Category records fetched successfully", workCategoryMasterVMs.Count), 200)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpGet("work-category/{id})")] |  | ||||||
|         public async Task<IActionResult> GetWorkCategoryMaster(Guid id) |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             WorkCategoryMaster? workCategory = await _context.WorkCategoryMasters.FirstOrDefaultAsync(s => s.TenantId == tenantId && s.Id == id); |  | ||||||
|             if (workCategory != null) |  | ||||||
|             { |  | ||||||
|                 WorkCategoryMasterVM workCategoryMasterVM = workCategory.ToWorkCategoryMasterVMFromWorkCategoryMaster(); |  | ||||||
|                 _logger.LogInfo("{WorkCategoryId} Work Category fetched successfully from tenant {tenantId}", workCategoryMasterVM.Id ?? Guid.Empty, tenantId); |  | ||||||
|                 return Ok(ApiResponse<object>.SuccessResponse(workCategoryMasterVM, "Work Category fetched successfully", 200)); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             _logger.LogInfo("{WorkCategoryId} Work Category not found in database", id); |  | ||||||
|             return NotFound(ApiResponse<object>.ErrorResponse("Work Category not found", "Work Category not found", 404)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpPost("work-category")] |  | ||||||
|         public async Task<IActionResult> CreateWorkCategoryMaster(WorkCategoryMasterDto workCategoryMasterDto) |  | ||||||
|         { |  | ||||||
|             Guid tenantId = _userHelper.GetTenantId(); |  | ||||||
|             if (workCategoryMasterDto != null) |  | ||||||
|             { |  | ||||||
|                 WorkCategoryMaster? existingWorkCategory = await _context.WorkCategoryMasters.FirstOrDefaultAsync(w => w.Name == workCategoryMasterDto.Name); |  | ||||||
|                 if (existingWorkCategory != null) |  | ||||||
|                 { |  | ||||||
|                     _logger.LogWarning("Work Category of name {WorkCategoryName} already exist", existingWorkCategory.Name); |  | ||||||
|                     return Conflict(ApiResponse<object>.ErrorResponse("Work Category already exist", "Work Category already exist", 409)); |  | ||||||
|                 } |  | ||||||
|                 WorkCategoryMaster? workCategory = workCategoryMasterDto.ToWorkCategoryMasterFromWorkCategoryMasterDto(tenantId); |  | ||||||
|                 WorkCategoryMasterVM workCategoryMasterVM = new WorkCategoryMasterVM(); |  | ||||||
|                 if (workCategory != null && workCategory.Id == Guid.Empty) |  | ||||||
|                 { |  | ||||||
| 
 |  | ||||||
|                     _context.WorkCategoryMasters.Add(workCategory); |  | ||||||
|                     await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                     workCategoryMasterVM = workCategory.ToWorkCategoryMasterVMFromWorkCategoryMaster(); |  | ||||||
|                 } |  | ||||||
|                 _logger.LogInfo("Work category master {WorkCategoryId} added successfully from tenant {tenantId}", workCategoryMasterVM.Id ?? Guid.Empty, tenantId); |  | ||||||
|                 return Ok(ApiResponse<object>.SuccessResponse(workCategoryMasterVM, "Work category master added successfully", 200)); |  | ||||||
| 
 |  | ||||||
|             } |  | ||||||
|             _logger.LogError("User sent empyt payload"); |  | ||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpPost("work-category/edit")] |  | ||||||
|         public async Task<IActionResult> UpdateWorkCategoryMaster(WorkCategoryMasterDto workCategoryMasterDto) |  | ||||||
|         { |  | ||||||
|             var tenantId = _userHelper.GetTenantId(); |  | ||||||
|             if (workCategoryMasterDto != null) |  | ||||||
|             { |  | ||||||
|                 WorkCategoryMaster? workCategory = await _context.WorkCategoryMasters.AsNoTracking().FirstOrDefaultAsync(s => s.TenantId == tenantId && s.Id == workCategoryMasterDto.Id); |  | ||||||
|                 if (workCategory != null) |  | ||||||
|                 { |  | ||||||
|                     if (workCategory.IsSystem) |  | ||||||
|                     { |  | ||||||
|                         _logger.LogError("User tries to update system-defined work category"); |  | ||||||
|                         return BadRequest(ApiResponse<object>.ErrorResponse("Cannot update system-defined work", "Cannot update system-defined work", 400)); |  | ||||||
|                     } |  | ||||||
|                     workCategory = workCategoryMasterDto.ToWorkCategoryMasterFromWorkCategoryMasterDto(tenantId); |  | ||||||
|                     _context.WorkCategoryMasters.Update(workCategory); |  | ||||||
|                     await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                     WorkCategoryMasterVM workCategoryMasterVM = workCategory.ToWorkCategoryMasterVMFromWorkCategoryMaster(); |  | ||||||
|                     _logger.LogInfo("Work category master {WorkCategoryId} updated successfully from tenant {tenantId}", workCategory.Id, tenantId); |  | ||||||
|                     return Ok(ApiResponse<object>.SuccessResponse(workCategoryMasterVM, "Work category master updated successfully", 200)); |  | ||||||
|                 } |  | ||||||
|                 _logger.LogError("Work category master {WorkCategoryId} not found in database", workCategoryMasterDto.Id ?? Guid.Empty); |  | ||||||
|                 return NotFound(ApiResponse<object>.ErrorResponse("Work category master not found", "Work category master not found", 404)); |  | ||||||
|             } |  | ||||||
|             _logger.LogError("User sent empyt payload"); |  | ||||||
|             return BadRequest(ApiResponse<object>.ErrorResponse("User sent Empty payload", "User sent Empty payload", 400)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         [HttpDelete("work-category/{id}")] |  | ||||||
|         public async Task<IActionResult> DeleteWorkCategoryMaster(Guid id) |  | ||||||
|         { |  | ||||||
|             var tenantId = _userHelper.GetTenantId(); |  | ||||||
|             var LoggedEmployee = await _userHelper.GetCurrentEmployeeAsync(); |  | ||||||
|             WorkCategoryMaster? workCategory = await _context.WorkCategoryMasters.FirstOrDefaultAsync(t => t.TenantId == tenantId && t.Id == id); |  | ||||||
|             if (workCategory != null) |  | ||||||
|             { |  | ||||||
|                 if (workCategory.IsSystem == false) |  | ||||||
|                 { |  | ||||||
|                     _context.WorkCategoryMasters.Remove(workCategory); |  | ||||||
|                     await _context.SaveChangesAsync(); |  | ||||||
| 
 |  | ||||||
|                     _logger.LogInfo("Work category {WorkCategoryId} deleted successfully from tenant {tenantId}", id, tenantId); |  | ||||||
|                     return Ok(ApiResponse<object>.SuccessResponse(new { }, "Work category deleted successfully", 200)); |  | ||||||
|                 } |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     _logger.LogWarning("Employee with {LoggedEmployeeId} tries to delete system-defined work category {WorkCategoryId}", LoggedEmployee.Id, id); |  | ||||||
|                     return BadRequest(ApiResponse<object>.ErrorResponse("Can not delete system-defined work category", "Can not delete system-defined work category", 400)); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             else |  | ||||||
|             { |  | ||||||
|                 _logger.LogError("Work category {WorkCategoryId} not found in database", id); |  | ||||||
|                 return NotFound(ApiResponse<object>.ErrorResponse("Work category not found", "Work category not found", 404)); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user