Resolved the rebase issues
This commit is contained in:
commit
de41db6219
@ -5,6 +5,7 @@ using Marco.Pms.Model.Directory;
|
||||
using Marco.Pms.Model.DocumentManager;
|
||||
using Marco.Pms.Model.Employees;
|
||||
using Marco.Pms.Model.Entitlements;
|
||||
using Marco.Pms.Model.Expenses;
|
||||
using Marco.Pms.Model.Forum;
|
||||
using Marco.Pms.Model.Mail;
|
||||
using Marco.Pms.Model.Master;
|
||||
@ -97,6 +98,17 @@ namespace Marco.Pms.DataAccess.Data
|
||||
public DbSet<OTPDetails> OTPDetails { get; set; }
|
||||
public DbSet<MPINDetails> MPINDetails { get; set; }
|
||||
|
||||
public DbSet<Expenses> Expenses { get; set; }
|
||||
public DbSet<ExpenseLog> ExpenseLogs { get; set; }
|
||||
public DbSet<ExpensesTypeMaster> ExpensesTypeMaster { get; set; }
|
||||
public DbSet<PaymentModeMatser> PaymentModeMatser { get; set; }
|
||||
public DbSet<ExpensesStatusMaster> ExpensesStatusMaster { get; set; }
|
||||
public DbSet<BillAttachments> BillAttachments { get; set; }
|
||||
public DbSet<ExpensesReimburse> ExpensesReimburse { get; set; }
|
||||
public DbSet<ExpensesReimburseMapping> ExpensesReimburseMapping { get; set; }
|
||||
public DbSet<StatusPermissionMapping> StatusPermissionMapping { get; set; }
|
||||
public DbSet<ExpensesStatusMapping> ExpensesStatusMapping { get; set; }
|
||||
|
||||
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
@ -105,8 +117,6 @@ namespace Marco.Pms.DataAccess.Data
|
||||
|
||||
ManageApplicationStructure(modelBuilder);
|
||||
|
||||
|
||||
|
||||
modelBuilder.Entity<RefreshToken>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
@ -242,7 +252,7 @@ namespace Marco.Pms.DataAccess.Data
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
Name = "In Review",
|
||||
Description = "These issues are currently under review",
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
IsDefault = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
@ -415,7 +425,318 @@ namespace Marco.Pms.DataAccess.Data
|
||||
|
||||
|
||||
|
||||
modelBuilder.Entity<ExpensesStatusMaster>().HasData(
|
||||
new ExpensesStatusMaster
|
||||
{
|
||||
Id = Guid.Parse("297e0d8f-f668-41b5-bfea-e03b354251c8"),
|
||||
Name = "Draft",
|
||||
DisplayName = "Draft",
|
||||
Description = "Expense has been created but not yet submitted.",
|
||||
Color = "#8592a3",
|
||||
IsSystem = true,
|
||||
IsActive = true
|
||||
},
|
||||
new ExpensesStatusMaster
|
||||
{
|
||||
Id = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||
Name = "Review Pending",
|
||||
DisplayName = "Submit",
|
||||
Description = "Reviewer is currently reviewing the expense.",
|
||||
Color = "#696cff",
|
||||
IsSystem = true,
|
||||
IsActive = true
|
||||
},
|
||||
new ExpensesStatusMaster
|
||||
{
|
||||
Id = Guid.Parse("965eda62-7907-4963-b4a1-657fb0b2724b"),
|
||||
Name = "Rejected by Reviewer",
|
||||
DisplayName = "Reject",
|
||||
Description = "Expense was declined, often with a reason(review rejected).",
|
||||
Color = "#ff3e1d",
|
||||
IsSystem = true,
|
||||
IsActive = true
|
||||
},
|
||||
new ExpensesStatusMaster
|
||||
{
|
||||
Id = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
||||
Name = "Approval Pending",
|
||||
DisplayName = "Mark as Reviewed",
|
||||
Description = "Review is completed, waiting for action of approver.",
|
||||
Color = "#03c3ec",
|
||||
IsSystem = true,
|
||||
IsActive = true
|
||||
},
|
||||
new ExpensesStatusMaster
|
||||
{
|
||||
Id = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
||||
Name = "Rejected by Approver",
|
||||
DisplayName = "Reject",
|
||||
Description = "Expense was declined, often with a reason(approval rejected).",
|
||||
Color = "#ff3e1d",
|
||||
IsSystem = true,
|
||||
IsActive = true
|
||||
},
|
||||
new ExpensesStatusMaster
|
||||
{
|
||||
Id = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
||||
Name = "Payment Pending",
|
||||
DisplayName = "Mark as Approved",
|
||||
Description = "Approved expense is awaiting final payment.",
|
||||
Color = "#ffab00",
|
||||
IsSystem = true,
|
||||
IsActive = true
|
||||
},
|
||||
new ExpensesStatusMaster
|
||||
{
|
||||
Id = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95"),
|
||||
Name = "Processed",
|
||||
DisplayName = "Mark as Processed",
|
||||
Description = "Expense has been settled.",
|
||||
Color = "#71dd37",
|
||||
IsSystem = true,
|
||||
IsActive = true
|
||||
}
|
||||
);
|
||||
|
||||
modelBuilder.Entity<ExpensesStatusMapping>().HasData(
|
||||
// Process to processed
|
||||
new ExpensesStatusMapping
|
||||
{
|
||||
Id = Guid.Parse("5cf7f1df-9d1f-4289-add0-1775ad614f25"),
|
||||
StatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
||||
NextStatusId = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95")
|
||||
},
|
||||
// Rejected by Approver to Review
|
||||
new ExpensesStatusMapping
|
||||
{
|
||||
Id = Guid.Parse("4ddddc10-0ffd-4884-accf-d4fa0bd97f54"),
|
||||
StatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
||||
NextStatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||
},
|
||||
// Approve to Rejected by Approver
|
||||
new ExpensesStatusMapping
|
||||
{
|
||||
Id = Guid.Parse("36c00548-241c-43ec-bc95-cacebedb925c"),
|
||||
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
||||
NextStatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729")
|
||||
},
|
||||
// Approve to Process
|
||||
new ExpensesStatusMapping
|
||||
{
|
||||
Id = Guid.Parse("1fca1700-1266-477d-bba4-9ac3753aa33c"),
|
||||
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
||||
NextStatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27")
|
||||
},
|
||||
// Rejected by Reviewer to Review
|
||||
new ExpensesStatusMapping
|
||||
{
|
||||
Id = Guid.Parse("9e2ec648-1ca2-4747-9329-e911b18edb3e"),
|
||||
StatusId = Guid.Parse("965eda62-7907-4963-b4a1-657fb0b2724b"),
|
||||
NextStatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||
},
|
||||
// Review to Rejected by Reviewer
|
||||
new ExpensesStatusMapping
|
||||
{
|
||||
Id = Guid.Parse("6b867bec-66e6-42a7-9611-f4595af9b9ce"),
|
||||
StatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||
NextStatusId = Guid.Parse("965eda62-7907-4963-b4a1-657fb0b2724b")
|
||||
},
|
||||
// Review to Aprrove
|
||||
new ExpensesStatusMapping
|
||||
{
|
||||
Id = Guid.Parse("ef1fcfbc-60e0-4f17-9308-c583a05d48fd"),
|
||||
StatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||
NextStatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8")
|
||||
},
|
||||
// Draft to Review
|
||||
new ExpensesStatusMapping
|
||||
{
|
||||
Id = Guid.Parse("af1e4492-98ee-4451-8ab7-fd8323f29c32"),
|
||||
StatusId = Guid.Parse("297e0d8f-f668-41b5-bfea-e03b354251c8"),
|
||||
NextStatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||
}
|
||||
);
|
||||
|
||||
modelBuilder.Entity<StatusPermissionMapping>().HasData(
|
||||
// Draft Permission Mapping
|
||||
new StatusPermissionMapping
|
||||
{
|
||||
Id = Guid.Parse("722b0c3c-5a78-456d-b9bb-b6ba1b21d59b"),
|
||||
PermissionId = Guid.Parse("0f57885d-bcb2-4711-ac95-d841ace6d5a7"),
|
||||
StatusId = Guid.Parse("297e0d8f-f668-41b5-bfea-e03b354251c8")
|
||||
},
|
||||
// Review Permission Mapping
|
||||
new StatusPermissionMapping
|
||||
{
|
||||
Id = Guid.Parse("7deb0945-e1c9-411f-8b3c-c9bdbe3c3c2d"),
|
||||
PermissionId = Guid.Parse("0f57885d-bcb2-4711-ac95-d841ace6d5a7"),
|
||||
StatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||
},
|
||||
// Rejected by Reviewer Permission Mapping
|
||||
new StatusPermissionMapping
|
||||
{
|
||||
Id = Guid.Parse("9e2ec648-1ca2-4747-9329-e911b18edb3e"),
|
||||
PermissionId = Guid.Parse("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
||||
StatusId = Guid.Parse("965eda62-7907-4963-b4a1-657fb0b2724b")
|
||||
},
|
||||
// Approval Pending Permission Mapping
|
||||
new StatusPermissionMapping
|
||||
{
|
||||
Id = Guid.Parse("0b7926fc-a34b-4a5b-8c7d-1003480cf0fa"),
|
||||
PermissionId = Guid.Parse("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
||||
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8")
|
||||
},
|
||||
// Rejected by Approver Permission Mapping
|
||||
new StatusPermissionMapping
|
||||
{
|
||||
Id = Guid.Parse("cd15f9b9-be45-4deb-9c71-2f23f872dbcd"),
|
||||
PermissionId = Guid.Parse("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
||||
StatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729")
|
||||
},
|
||||
// Payment Pending Permission Mapping
|
||||
new StatusPermissionMapping
|
||||
{
|
||||
Id = Guid.Parse("f6f26b2f-2fa6-40b7-8601-cbd4bcdda0cc"),
|
||||
PermissionId = Guid.Parse("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
||||
StatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27")
|
||||
},
|
||||
// Processed Permission Mapping
|
||||
new StatusPermissionMapping
|
||||
{
|
||||
Id = Guid.Parse("214354e5-daad-4569-ad69-eb5bf4e87fbc"),
|
||||
PermissionId = Guid.Parse("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"),
|
||||
StatusId = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95")
|
||||
});
|
||||
|
||||
modelBuilder.Entity<ExpensesTypeMaster>().HasData(
|
||||
new ExpensesTypeMaster
|
||||
{
|
||||
Id = Guid.Parse("5e0c6227-d49d-41ff-9f1f-781f0aee2469"),
|
||||
Name = "Procurement",
|
||||
Description = "Materials, equipment and supplies purchased for site operations.",
|
||||
NoOfPersonsRequired = false,
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new ExpensesTypeMaster
|
||||
{
|
||||
Id = Guid.Parse("2de53163-0dbd-404b-8e60-1b02e6b4886a"),
|
||||
Name = "Transport",
|
||||
Description = "Vehicle fuel, logistics services and delivery of goods or personnel.",
|
||||
NoOfPersonsRequired = false,
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new ExpensesTypeMaster
|
||||
{
|
||||
Id = Guid.Parse("dd120bc4-ab0a-45ba-8450-5cd45ff221ca"),
|
||||
Name = "Travelling",
|
||||
Description = "Delivery of personnel.",
|
||||
NoOfPersonsRequired = true,
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new ExpensesTypeMaster
|
||||
{
|
||||
Id = Guid.Parse("52484820-1b54-4865-8f0f-baa2b1d339b9"),
|
||||
Name = "Mobilization",
|
||||
Description = "Site setup costs including equipment deployment and temporary infrastructure.",
|
||||
NoOfPersonsRequired = false,
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new ExpensesTypeMaster
|
||||
{
|
||||
Id = Guid.Parse("fc59eb90-98ea-481c-b421-54bfa9e42d8f"),
|
||||
Name = "Employee Welfare",
|
||||
Description = " Worker amenities like snacks, meals, safety gear, accommodation, medical support etc.",
|
||||
NoOfPersonsRequired = true,
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new ExpensesTypeMaster
|
||||
{
|
||||
Id = Guid.Parse("77013784-9324-4d8b-bd36-d6f928e68942"),
|
||||
Name = "Maintenance & Utilities",
|
||||
Description = "Machinery servicing, electricity, water, and temporary office needs.",
|
||||
NoOfPersonsRequired = false,
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new ExpensesTypeMaster
|
||||
{
|
||||
Id = Guid.Parse("1e2d697a-76b4-4be8-bc66-87144561a1a0"),
|
||||
Name = "Vendor/Supplier Payments",
|
||||
Description = "Scheduled payments for external services or goods.",
|
||||
NoOfPersonsRequired = false,
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new ExpensesTypeMaster
|
||||
{
|
||||
Id = Guid.Parse("4842fa61-64eb-4241-aebd-8282065af9f9"),
|
||||
Name = "Compliance & Safety",
|
||||
Description = "Government fees, insurance, inspections and safety-related expenditures.",
|
||||
NoOfPersonsRequired = false,
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
}
|
||||
);
|
||||
|
||||
modelBuilder.Entity<PaymentModeMatser>().HasData(
|
||||
new PaymentModeMatser
|
||||
{
|
||||
Id = Guid.Parse("24e6b0df-7929-47d2-88a3-4cf14c1f28f9"),
|
||||
Name = "Cash",
|
||||
Description = "Physical currency; still used for small or informal transactions.",
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new PaymentModeMatser
|
||||
{
|
||||
Id = Guid.Parse("48d9b462-5d87-4dec-8dec-2bc943943172"),
|
||||
Name = "Cheque",
|
||||
Description = "Paper-based payment order; less common now due to processing delays and fraud risks.",
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new PaymentModeMatser
|
||||
{
|
||||
Id = Guid.Parse("ed667353-8eea-4fd1-8750-719405932480"),
|
||||
Name = "NetBanking",
|
||||
Description = "Online banking portals used to transfer funds directly between accounts",
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
},
|
||||
new PaymentModeMatser
|
||||
{
|
||||
Id = Guid.Parse("2e919e94-694c-41d9-9489-0a2b4208a027"),
|
||||
Name = "UPI",
|
||||
Description = "Real-time bank-to-bank transfer using mobile apps; widely used for peer-to-peer and merchant payments.",
|
||||
IsActive = true,
|
||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
||||
}
|
||||
);
|
||||
|
||||
modelBuilder.Entity<Module>().HasData(new Module
|
||||
{
|
||||
Id = new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"),
|
||||
Name = "Project",
|
||||
Description = "Project Module",
|
||||
Key = "b04da7e9-0406-409c-ac7f-b97256e6ea02"
|
||||
}, new Module
|
||||
{
|
||||
Id = new Guid("2a231490-bcb1-4bdd-91f1-f25fb7f25b23"),
|
||||
Name = "Employee",
|
||||
Description = "Employee Module",
|
||||
Key = "0971c7fb-6ce1-458a-ae3f-8d3205893637"
|
||||
}, new Module
|
||||
{
|
||||
Id = new Guid("c43db8c7-ab73-47f4-9d3b-f83e81357924"),
|
||||
Name = "Masters",
|
||||
Description = "Masters Module",
|
||||
Key = "504ec132-e6a9-422f-8f85-050602cfce05"
|
||||
});
|
||||
modelBuilder.Entity<SubscriptionStatus>().HasData(
|
||||
new SubscriptionStatus
|
||||
{
|
||||
@ -463,13 +784,13 @@ namespace Marco.Pms.DataAccess.Data
|
||||
Key = "504ec132-e6a9-422f-8f85-050602cfce05"
|
||||
});
|
||||
|
||||
|
||||
|
||||
modelBuilder.Entity<Feature>().HasData(
|
||||
// Project Module
|
||||
new Feature { Id = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), Description = "Manage Project", Name = "Project Management", ModuleId = new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"), IsActive = true },
|
||||
//new Feature { Id = new Guid("9666de86-d7c7-4d3d-acaa-fcd6d6b81f3c"), Description = "Manage Infra", Name = "Manage Infra", ModuleId = new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"), IsActive = true },
|
||||
new Feature { Id = new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), Description = "Expense Management is the systematic process of tracking, controlling, and reporting business-related expenditures.", Name = "Expense Management", ModuleId = new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"), IsActive = true },
|
||||
new Feature { Id = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), Description = "Manage Tasks", Name = "Task Management", ModuleId = new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"), IsActive = true },
|
||||
|
||||
// Employee Module
|
||||
new Feature { Id = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), Description = "Manage Employee", Name = "Employee Management", ModuleId = new Guid("2a231490-bcb1-4bdd-91f1-f25fb7f25b23"), IsActive = true },
|
||||
new Feature { Id = new Guid("52c9cf54-1eb2-44d2-81bb-524cf29c0a94"), Description = "Attendance", Name = "Attendance Management", ModuleId = new Guid("2a231490-bcb1-4bdd-91f1-f25fb7f25b23"), IsActive = true },
|
||||
|
||||
@ -484,36 +805,49 @@ namespace Marco.Pms.DataAccess.Data
|
||||
new FeaturePermission { Id = new Guid("00e20637-ce8d-4417-bec4-9b31b5e65092"), FeatureId = new Guid("2f3509b7-160d-410a-b9b6-daadd96c986d"), IsEnabled = true, Name = "Modify Tenant", Description = "Modify only his tenant." },
|
||||
new FeaturePermission { Id = new Guid("647145c6-2108-4c98-aab4-178602236e55"), FeatureId = new Guid("2f3509b7-160d-410a-b9b6-daadd96c986d"), IsEnabled = true, Name = "View Tenant", Description = "Asscess information related to tenant." },
|
||||
|
||||
// Project Management Feature
|
||||
new FeaturePermission { Id = new Guid("6ea44136-987e-44ba-9e5d-1cf8f5837ebc"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "View Project", Description = "Access all information related to the project." },
|
||||
new FeaturePermission { Id = new Guid("172fc9b6-755b-4f62-ab26-55c34a330614"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "Manage Project", Description = "Potentially edit the project name, description, start/end dates, or status." },
|
||||
new FeaturePermission { Id = new Guid("b94802ce-0689-4643-9e1d-11c86950c35b"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "Manage Team", Description = "The \"Manage Team\" feature allows authorized users to organize project personnel by adding, removing, and assigning employee to projects." },
|
||||
new FeaturePermission { Id = new Guid("8d7cc6e3-9147-41f7-aaa7-fa507e450bd4"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "View Project Infra", Description = "Grants a user comprehensive read-only access to all details concerning the project's underlying systems, technologies, resources, and configurations" },
|
||||
new FeaturePermission { Id = new Guid("cf2825ad-453b-46aa-91d9-27c124d63373"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "Manage Project Infra", Description = "This allows them to create, modify, and manage all aspects of the supporting infrastructure." },
|
||||
new FeaturePermission { Id = new Guid("172fc9b6-755b-4f62-ab26-55c34a330614"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "Manage Project", Description = "Potentially edit the project name, description, start/end dates, or status." },
|
||||
new FeaturePermission { Id = new Guid("b94802ce-0689-4643-9e1d-11c86950c35b"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "Manage Team", Description = "The \"Manage Team\" feature allows authorized users to organize project personnel by adding, removing, and assigning employee to projects." },
|
||||
new FeaturePermission { Id = new Guid("8d7cc6e3-9147-41f7-aaa7-fa507e450bd4"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "View Project Infra", Description = "Grants a user comprehensive read-only access to all details concerning the project's underlying systems, technologies, resources, and configurations" },
|
||||
new FeaturePermission { Id = new Guid("cf2825ad-453b-46aa-91d9-27c124d63373"), FeatureId = new Guid("53176ebf-c75d-42e5-839f-4508ffac3def"), IsEnabled = true, Name = "Manage Project Infra", Description = "This allows them to create, modify, and manage all aspects of the supporting infrastructure." },
|
||||
|
||||
// Task Management Feature
|
||||
new FeaturePermission { Id = new Guid("9fcc5f87-25e3-4846-90ac-67a71ab92e3c"), FeatureId = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), IsEnabled = true, Name = "View Task", Description = "Grants a user comprehensive read-only access to all details associated with tasks within a project. This includes task descriptions, statuses, assignees, due dates, dependencies, progress, history, and any related attachments or discussions." },
|
||||
new FeaturePermission { Id = new Guid("08752f33-3b29-4816-b76b-ea8a968ed3c5"), FeatureId = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), IsEnabled = true, Name = "Add/Edit Task", Description = "This allows them to create new tasks, modify existing task attributes (description, status, assignee, due date, etc.)," },
|
||||
new FeaturePermission { Id = new Guid("6a32379b-8b3f-49a6-8c48-4b7ac1b55dc2"), FeatureId = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), IsEnabled = true, Name = "Assign/Report Progress", Description = "Grants a user the ability to designate team members responsible for specific tasks and to update the completion status or provide progress updates for those tasks" },
|
||||
new FeaturePermission { Id = new Guid("db4e40c5-2ba9-4b6d-b8a6-a16a250ff99c"), FeatureId = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), IsEnabled = true, Name = "Approve Task", Description = "Grants a user the authority to officially confirm the completion or acceptance of a task, often signifying that it meets the required standards or criteria" },
|
||||
|
||||
new FeaturePermission { Id = new Guid("9fcc5f87-25e3-4846-90ac-67a71ab92e3c"), FeatureId = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), IsEnabled = true, Name = "View Task", Description = "Grants a user comprehensive read-only access to all details associated with tasks within a project. This includes task descriptions, statuses, assignees, due dates, dependencies, progress, history, and any related attachments or discussions." },
|
||||
new FeaturePermission { Id = new Guid("08752f33-3b29-4816-b76b-ea8a968ed3c5"), FeatureId = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), IsEnabled = true, Name = "Add/Edit Task", Description = "This allows them to create new tasks, modify existing task attributes (description, status, assignee, due date, etc.)," },
|
||||
new FeaturePermission { Id = new Guid("6a32379b-8b3f-49a6-8c48-4b7ac1b55dc2"), FeatureId = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), IsEnabled = true, Name = "Assign/Report Progress", Description = "Grants a user the ability to designate team members responsible for specific tasks and to update the completion status or provide progress updates for those tasks" },
|
||||
new FeaturePermission { Id = new Guid("db4e40c5-2ba9-4b6d-b8a6-a16a250ff99c"), FeatureId = new Guid("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), IsEnabled = true, Name = "Approve Task", Description = "Grants a user the authority to officially confirm the completion or acceptance of a task, often signifying that it meets the required standards or criteria" },
|
||||
// Employee Management Feature
|
||||
new FeaturePermission { Id = new Guid("60611762-7f8a-4fb5-b53f-b1139918796b"), FeatureId = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), IsEnabled = true, Name = "View All Employees", Description = "Grants a user read-only access to details about the all individuals within the system. This typically includes names, contact information, roles, departments, and potentially other relevant employee data" },
|
||||
new FeaturePermission { Id = new Guid("b82d2b7e-0d52-45f3-997b-c008ea460e7f"), FeatureId = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), IsEnabled = true, Name = "View Team Members", Description = "Grants a user read-only access to details about the individuals within the system which are is assigned to same projects as user. This typically includes names, contact information, roles, departments, and potentially other relevant employee data" },
|
||||
new FeaturePermission { Id = new Guid("a97d366a-c2bb-448d-be93-402bd2324566"), FeatureId = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), IsEnabled = true, Name = "Add/Edit Employee", Description = "Grants a user the authority to create new employee profiles and modify existing employee details within the system. This typically includes adding or updating information such as names, contact details, roles, departments, skills, and potentially other personal or professional data" },
|
||||
new FeaturePermission { Id = new Guid("fbd213e0-0250-46f1-9f5f-4b2a1e6e76a3"), FeatureId = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), IsEnabled = true, Name = "Assign Roles", Description = "Grants a user the authority to manage employee application roles, enabling them to assign or revoke access privileges within the system." },
|
||||
|
||||
// Attendance Management Feature
|
||||
new FeaturePermission { Id = new Guid("915e6bff-65f6-4e3f-aea8-3fd217d3ea9e"), FeatureId = new Guid("52c9cf54-1eb2-44d2-81bb-524cf29c0a94"), IsEnabled = true, Name = "Team Attendance ", Description = "Team Attendance refers to tracking and managing the attendance of all team members collectively, often monitored by a team lead or manager." },
|
||||
new FeaturePermission { Id = new Guid("57802c4a-00aa-4a1f-a048-fd2f70dd44b6"), FeatureId = new Guid("52c9cf54-1eb2-44d2-81bb-524cf29c0a94"), IsEnabled = true, Name = "Regularize Attendance", Description = "Grants a user the authority to approve requests from employees to adjust or correct their recorded attendance. This typically involves reviewing the reason for the regularization, verifying any supporting documentation, and then officially accepting the changes to the employee's attendance records" },
|
||||
new FeaturePermission { Id = new Guid("ccb0589f-712b-43de-92ed-5b6088e7dc4e"), FeatureId = new Guid("52c9cf54-1eb2-44d2-81bb-524cf29c0a94"), IsEnabled = true, Name = "Self Attendance", Description = "Team Attendance refers to tracking and managing the attendance of all team members collectively, often monitored by a team lead or manager." },
|
||||
|
||||
new FeaturePermission { Id = new Guid("60611762-7f8a-4fb5-b53f-b1139918796b"), FeatureId = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), IsEnabled = true, Name = "View All Employees", Description = "Grants a user read-only access to details about the all individuals within the system. This typically includes names, contact information, roles, departments, and potentially other relevant employee data" },
|
||||
new FeaturePermission { Id = new Guid("b82d2b7e-0d52-45f3-997b-c008ea460e7f"), FeatureId = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), IsEnabled = true, Name = "View Team Members", Description = "Grants a user read-only access to details about the individuals within the system which are is assigned to same projects as user. This typically includes names, contact information, roles, departments, and potentially other relevant employee data" },
|
||||
new FeaturePermission { Id = new Guid("a97d366a-c2bb-448d-be93-402bd2324566"), FeatureId = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), IsEnabled = true, Name = "Add/Edit Employee", Description = "Grants a user the authority to create new employee profiles and modify existing employee details within the system. This typically includes adding or updating information such as names, contact details, roles, departments, skills, and potentially other personal or professional data" },
|
||||
new FeaturePermission { Id = new Guid("fbd213e0-0250-46f1-9f5f-4b2a1e6e76a3"), FeatureId = new Guid("81ab8a87-8ccd-4015-a917-0627cee6a100"), IsEnabled = true, Name = "Assign Roles", Description = "Grants a user the authority to manage employee application roles, enabling them to assign or revoke access privileges within the system." },
|
||||
// Masters Feature
|
||||
new FeaturePermission { Id = new Guid("5ffbafe0-7ab0-48b1-bb50-c1bf76b65f9d"), FeatureId = new Guid("be3b3afc-6ccf-4566-b9b6-aafcb65546be"), IsEnabled = true, Name = "View Masters", Description = "Grants a user read-only access to foundational or reference data within the system. \"Masters\" typically refer to predefined lists, categories, or templates that are used throughout the application to standardize information and maintain consistency" },
|
||||
new FeaturePermission { Id = new Guid("588a8824-f924-4955-82d8-fc51956cf323"), FeatureId = new Guid("be3b3afc-6ccf-4566-b9b6-aafcb65546be"), IsEnabled = true, Name = "Manage Masters", Description = "Grants a user the authority to create, modify, and delete foundational or reference data within the system. These \"masters\" are typically the core lists, categories, and configurations that other data and functionalities rely upon, such as departments, job titles, product categories" },
|
||||
|
||||
// Directory Management Feature
|
||||
new FeaturePermission { Id = new Guid("4286a13b-bb40-4879-8c6d-18e9e393beda"), FeatureId = new Guid("39e66f81-efc6-446c-95bd-46bff6cfb606"), IsEnabled = true, Name = "Directory Admin", Description = "Full control over all directories, including the ability to manage permissions for all directories in the system." },
|
||||
new FeaturePermission { Id = new Guid("62668630-13ce-4f52-a0f0-db38af2230c5"), FeatureId = new Guid("39e66f81-efc6-446c-95bd-46bff6cfb606"), IsEnabled = true, Name = "Directory Manager", Description = "Full control over directories they created or have been assigned. Can also manage permissions for those directories." },
|
||||
new FeaturePermission { Id = new Guid("0f919170-92d4-4337-abd3-49b66fc871bb"), FeatureId = new Guid("39e66f81-efc6-446c-95bd-46bff6cfb606"), IsEnabled = true, Name = "Directory User", Description = "Full control over directories they created. Can view contacts in directories they either created or were assigned to. Can manage permissions only for directories they created." },
|
||||
|
||||
new FeaturePermission { Id = new Guid("915e6bff-65f6-4e3f-aea8-3fd217d3ea9e"), FeatureId = new Guid("52c9cf54-1eb2-44d2-81bb-524cf29c0a94"), IsEnabled = true, Name = "Team Attendance ", Description = "Team Attendance refers to tracking and managing the attendance of all team members collectively, often monitored by a team lead or manager." },
|
||||
new FeaturePermission { Id = new Guid("57802c4a-00aa-4a1f-a048-fd2f70dd44b6"), FeatureId = new Guid("52c9cf54-1eb2-44d2-81bb-524cf29c0a94"), IsEnabled = true, Name = "Regularize Attendance", Description = "Grants a user the authority to approve requests from employees to adjust or correct their recorded attendance. This typically involves reviewing the reason for the regularization, verifying any supporting documentation, and then officially accepting the changes to the employee's attendance records" },
|
||||
new FeaturePermission { Id = new Guid("ccb0589f-712b-43de-92ed-5b6088e7dc4e"), FeatureId = new Guid("52c9cf54-1eb2-44d2-81bb-524cf29c0a94"), IsEnabled = true, Name = "Self Attendance", Description = "Team Attendance refers to tracking and managing the attendance of all team members collectively, often monitored by a team lead or manager." },
|
||||
// Expense Management Feature
|
||||
new FeaturePermission { Id = new Guid("385be49f-8fde-440e-bdbc-3dffeb8dd116"), FeatureId = new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), IsEnabled = true, Name = "View Self", Description = "Allows a user to view only the expense records that they have personally submitted" },
|
||||
new FeaturePermission { Id = new Guid("01e06444-9ca7-4df4-b900-8c3fa051b92f"), FeatureId = new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), IsEnabled = true, Name = "View All", Description = "Allows a user to view all expense records across the organization or project, regardless of who submitted or paid them" },
|
||||
new FeaturePermission { Id = new Guid("0f57885d-bcb2-4711-ac95-d841ace6d5a7"), FeatureId = new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), IsEnabled = true, Name = "Upload", Description = "Allows a user to create and submit new expense records, including attaching relevant documents like receipts or invoices." },
|
||||
new FeaturePermission { Id = new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"), FeatureId = new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), IsEnabled = true, Name = "Review", Description = "Allows a user to examine submitted expenses for accuracy, completeness, and policy compliance before they are approved or rejected." },
|
||||
new FeaturePermission { Id = new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"), FeatureId = new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), IsEnabled = true, Name = "Approve", Description = "Allows a user to authorize or reject submitted expenses, making them officially accepted or declined within the system." },
|
||||
new FeaturePermission { Id = new Guid("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"), FeatureId = new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), IsEnabled = true, Name = "Process", Description = "Allows a user to handle post-approval actions such as recording payments, updating financial records, or marking expenses as reimbursed or settled." },
|
||||
new FeaturePermission { Id = new Guid("bdee29a2-b73b-402d-8dd1-c4b1f81ccbc3"), FeatureId = new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), IsEnabled = true, Name = "Manage", Description = "Allows a user to configure and control system settings, such as managing expense types, payment modes, permissions, and overall workflow rules." }
|
||||
|
||||
new FeaturePermission { Id = new Guid("5ffbafe0-7ab0-48b1-bb50-c1bf76b65f9d"), FeatureId = new Guid("be3b3afc-6ccf-4566-b9b6-aafcb65546be"), IsEnabled = true, Name = "View Masters", Description = "Grants a user read-only access to foundational or reference data within the system. \"Masters\" typically refer to predefined lists, categories, or templates that are used throughout the application to standardize information and maintain consistency" },
|
||||
new FeaturePermission { Id = new Guid("588a8824-f924-4955-82d8-fc51956cf323"), FeatureId = new Guid("be3b3afc-6ccf-4566-b9b6-aafcb65546be"), IsEnabled = true, Name = "Manage Masters", Description = "Grants a user the authority to create, modify, and delete foundational or reference data within the system. These \"masters\" are typically the core lists, categories, and configurations that other data and functionalities rely upon, such as departments, job titles, product categories" },
|
||||
|
||||
new FeaturePermission { Id = new Guid("4286a13b-bb40-4879-8c6d-18e9e393beda"), FeatureId = new Guid("39e66f81-efc6-446c-95bd-46bff6cfb606"), IsEnabled = true, Name = "Directory Admin", Description = "Full control over all directories, including the ability to manage permissions for all directories in the system." },
|
||||
new FeaturePermission { Id = new Guid("62668630-13ce-4f52-a0f0-db38af2230c5"), FeatureId = new Guid("39e66f81-efc6-446c-95bd-46bff6cfb606"), IsEnabled = true, Name = "Directory Manager", Description = "Full control over directories they created or have been assigned. Can also manage permissions for those directories." },
|
||||
new FeaturePermission { Id = new Guid("0f919170-92d4-4337-abd3-49b66fc871bb"), FeatureId = new Guid("39e66f81-efc6-446c-95bd-46bff6cfb606"), IsEnabled = true, Name = "Directory User", Description = "Full control over directories they created. Can view contacts in directories they either created or were assigned to. Can manage permissions only for directories they created." }
|
||||
//new FeaturePermission { Id = new Guid("6b1a6d97-a951-4de5-9b19-709bac7c4f18"), FeatureId = new Guid("660131a4-788c-4739-a082-cbbf7879cbf2"), IsEnabled = true, Name = "Manage Masters", Description = "" }
|
||||
);
|
||||
|
||||
);
|
||||
|
||||
|
@ -1274,7 +1274,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1295,7 +1295,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
columns: new[] { "Id", "ColorCode", "Description", "IsDefault", "Name", "TenantId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"), "#6c757d", "These issues are currently under review", true, "In Review", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"), "#8592a3", "These issues are currently under review", true, "In Review", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("6b0c409b-3e80-4165-8b39-f3fcacb4c797"), "#FFCC99", "This is a newly created issue.", true, "New", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("6c5ac37d-5b7d-40f3-adec-2dabaa5cca86"), "#E6FF99", "Assigned to employee or team of employees", true, "Assigned", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("7f96bcd5-0c66-411b-8a1d-9d1a4785194e"), "#99E6FF", "These issues are currently in progress", true, "In Progress", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
|
@ -1216,7 +1216,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1222,7 +1222,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1299,7 +1299,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1299,7 +1299,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1267,7 +1267,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1602,7 +1602,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1626,7 +1626,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1593,7 +1593,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1633,7 +1633,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1358,7 +1358,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1366,7 +1366,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1425,7 +1425,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1425,7 +1425,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1428,7 +1428,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1428,7 +1428,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1811,7 +1811,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1835,7 +1835,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1835,7 +1835,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1817,7 +1817,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1857,7 +1857,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1857,7 +1857,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1857,7 +1857,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
@ -1862,7 +1862,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
new
|
||||
{
|
||||
Id = new Guid("5c72b630-6923-4215-bf2c-b1622afd76e7"),
|
||||
ColorCode = "#6c757d",
|
||||
ColorCode = "#8592a3",
|
||||
Description = "These issues are currently under review",
|
||||
IsDefault = true,
|
||||
Name = "In Review",
|
||||
|
4345
Marco.Pms.DataAccess/Migrations/20250721124928_Added_Expense_Related_Tables.Designer.cs
generated
Normal file
4345
Marco.Pms.DataAccess/Migrations/20250721124928_Added_Expense_Related_Tables.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,664 @@
|
||||
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_Expense_Related_Tables : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "ExpensesReimburse",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
ReimburseTransactionId = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
ReimburseDate = table.Column<DateTime>(type: "datetime(6)", nullable: false),
|
||||
ReimburseById = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
ReimburseNote = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
TenantId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci")
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_ExpensesReimburse", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesReimburse_Employees_ReimburseById",
|
||||
column: x => x.ReimburseById,
|
||||
principalTable: "Employees",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesReimburse_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "ExpensesStatusMaster",
|
||||
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"),
|
||||
DisplayName = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
Description = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
Color = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
IsSystem = table.Column<bool>(type: "tinyint(1)", nullable: false),
|
||||
IsActive = 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_ExpensesStatusMaster", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesStatusMaster_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "ExpensesTypeMaster",
|
||||
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"),
|
||||
NoOfPersonsRequired = table.Column<bool>(type: "tinyint(1)", nullable: false),
|
||||
Description = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
IsActive = 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_ExpensesTypeMaster", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesTypeMaster_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "PaymentModeMatser",
|
||||
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"),
|
||||
IsActive = 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_PaymentModeMatser", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_PaymentModeMatser_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "ExpensesStatusMapping",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
StatusId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
NextStatusId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
TenantId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci")
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_ExpensesStatusMapping", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesStatusMapping_ExpensesStatusMaster_NextStatusId",
|
||||
column: x => x.NextStatusId,
|
||||
principalTable: "ExpensesStatusMaster",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesStatusMapping_ExpensesStatusMaster_StatusId",
|
||||
column: x => x.StatusId,
|
||||
principalTable: "ExpensesStatusMaster",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesStatusMapping_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "StatusPermissionMapping",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
StatusId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
PermissionId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
TenantId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci")
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_StatusPermissionMapping", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_StatusPermissionMapping_ExpensesStatusMaster_StatusId",
|
||||
column: x => x.StatusId,
|
||||
principalTable: "ExpensesStatusMaster",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_StatusPermissionMapping_FeaturePermissions_PermissionId",
|
||||
column: x => x.PermissionId,
|
||||
principalTable: "FeaturePermissions",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_StatusPermissionMapping_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Expenses",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
ProjectId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
ExpensesTypeId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
PaymentModeId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
PaidById = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
CreatedById = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
TransactionDate = table.Column<DateTime>(type: "datetime(6)", nullable: false),
|
||||
CreatedAt = table.Column<DateTime>(type: "datetime(6)", nullable: false),
|
||||
TransactionId = table.Column<string>(type: "longtext", nullable: true)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
Description = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
Location = table.Column<string>(type: "longtext", nullable: true)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
GSTNumber = table.Column<string>(type: "longtext", nullable: true)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
SupplerName = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
Amount = table.Column<double>(type: "double", nullable: false),
|
||||
NoOfPersons = table.Column<int>(type: "int", nullable: true),
|
||||
StatusId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
PreApproved = table.Column<bool>(type: "tinyint(1)", nullable: false),
|
||||
IsActive = 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_Expenses", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_Expenses_Employees_CreatedById",
|
||||
column: x => x.CreatedById,
|
||||
principalTable: "Employees",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_Expenses_Employees_PaidById",
|
||||
column: x => x.PaidById,
|
||||
principalTable: "Employees",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_Expenses_ExpensesStatusMaster_StatusId",
|
||||
column: x => x.StatusId,
|
||||
principalTable: "ExpensesStatusMaster",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_Expenses_ExpensesTypeMaster_ExpensesTypeId",
|
||||
column: x => x.ExpensesTypeId,
|
||||
principalTable: "ExpensesTypeMaster",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_Expenses_PaymentModeMatser_PaymentModeId",
|
||||
column: x => x.PaymentModeId,
|
||||
principalTable: "PaymentModeMatser",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_Expenses_Projects_ProjectId",
|
||||
column: x => x.ProjectId,
|
||||
principalTable: "Projects",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_Expenses_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "BillAttachments",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
ExpensesId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
DocumentId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
TenantId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci")
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_BillAttachments", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_BillAttachments_Documents_DocumentId",
|
||||
column: x => x.DocumentId,
|
||||
principalTable: "Documents",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_BillAttachments_Expenses_ExpensesId",
|
||||
column: x => x.ExpensesId,
|
||||
principalTable: "Expenses",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_BillAttachments_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "ExpenseLogs",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
ExpenseId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
UpdatedById = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
Action = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
Comment = table.Column<string>(type: "longtext", nullable: true)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
TenantId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci")
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_ExpenseLogs", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpenseLogs_Employees_UpdatedById",
|
||||
column: x => x.UpdatedById,
|
||||
principalTable: "Employees",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpenseLogs_Expenses_ExpenseId",
|
||||
column: x => x.ExpenseId,
|
||||
principalTable: "Expenses",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpenseLogs_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "ExpensesReimburseMapping",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
ExpensesId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
ExpensesReimburseId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
TenantId = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci")
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_ExpensesReimburseMapping", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesReimburseMapping_ExpensesReimburse_ExpensesReimburse~",
|
||||
column: x => x.ExpensesReimburseId,
|
||||
principalTable: "ExpensesReimburse",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesReimburseMapping_Expenses_ExpensesId",
|
||||
column: x => x.ExpensesId,
|
||||
principalTable: "Expenses",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_ExpensesReimburseMapping_Tenants_TenantId",
|
||||
column: x => x.TenantId,
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "ExpensesStatusMaster",
|
||||
columns: new[] { "Id", "Color", "Description", "DisplayName", "IsActive", "IsSystem", "Name", "TenantId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("297e0d8f-f668-41b5-bfea-e03b354251c8"), "#8592a3", "Expense has been created but not yet submitted.", "Draft", true, true, "Draft", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"), "#03c3ec", "Review is completed, waiting for action of approver.", "Mark as Reviewed", true, true, "Approval Pending", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("61578360-3a49-4c34-8604-7b35a3787b95"), "#71dd37", "Expense has been settled.", "Mark as Paid", true, true, "Paid", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), "#696cff", "Reviewer is currently reviewing the expense.", "Submit", true, true, "Review Pending", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), "#ff3e1d", "Expense was declined, often with a reason(either review rejected or approval rejected.", "Reject", true, true, "Rejected", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"), "#ffab00", "Approved expense is awaiting final payment.", "Mark as Approved", true, true, "Payment Pending", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "ExpensesTypeMaster",
|
||||
columns: new[] { "Id", "Description", "IsActive", "Name", "NoOfPersonsRequired", "TenantId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("1e2d697a-76b4-4be8-bc66-87144561a1a0"), "Scheduled payments for external services or goods.", true, "Vendor/Supplier Payments", false, new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("2de53163-0dbd-404b-8e60-1b02e6b4886a"), "Vehicle fuel, logistics services and delivery of goods or personnel.", true, "Transport", false, new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("4842fa61-64eb-4241-aebd-8282065af9f9"), "Government fees, insurance, inspections and safety-related expenditures.", true, "Compliance & Safety", false, new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("52484820-1b54-4865-8f0f-baa2b1d339b9"), "Site setup costs including equipment deployment and temporary infrastructure.", true, "Mobilization", false, new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("5e0c6227-d49d-41ff-9f1f-781f0aee2469"), "Materials, equipment and supplies purchased for site operations.", true, "Procurement", false, new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("77013784-9324-4d8b-bd36-d6f928e68942"), "Machinery servicing, electricity, water, and temporary office needs.", true, "Maintenance & Utilities", false, new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("dd120bc4-ab0a-45ba-8450-5cd45ff221ca"), "Delivery of personnel.", true, "Travelling", true, new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("fc59eb90-98ea-481c-b421-54bfa9e42d8f"), " Worker amenities like snacks, meals, safety gear, accommodation, medical support etc.", true, "Employee Welfare", true, new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "Features",
|
||||
columns: new[] { "Id", "Description", "IsActive", "ModuleId", "Name" },
|
||||
values: new object[] { new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), "Expense Management is the systematic process of tracking, controlling, and reporting business-related expenditures.", true, new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"), "Expense Management" });
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "PaymentModeMatser",
|
||||
columns: new[] { "Id", "Description", "IsActive", "Name", "TenantId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("24e6b0df-7929-47d2-88a3-4cf14c1f28f9"), "Physical currency; still used for small or informal transactions.", true, "Cash", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("2e919e94-694c-41d9-9489-0a2b4208a027"), "Real-time bank-to-bank transfer using mobile apps; widely used for peer-to-peer and merchant payments.", true, "UPI", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("48d9b462-5d87-4dec-8dec-2bc943943172"), "Paper-based payment order; less common now due to processing delays and fraud risks.", true, "Cheque", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("ed667353-8eea-4fd1-8750-719405932480"), "Online banking portals used to transfer funds directly between accounts", true, "NetBanking", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "ExpensesStatusMapping",
|
||||
columns: new[] { "Id", "NextStatusId", "StatusId", "TenantId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("1fca1700-1266-477d-bba4-9ac3753aa33c"), new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"), new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("36c00548-241c-43ec-bc95-cacebedb925c"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("5cf7f1df-9d1f-4289-add0-1775ad614f25"), new Guid("61578360-3a49-4c34-8604-7b35a3787b95"), new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("75bbda6a-6a53-47d1-ad71-5f5f9446a11e"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("af1e4492-98ee-4451-8ab7-fd8323f29c32"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), new Guid("297e0d8f-f668-41b5-bfea-e03b354251c8"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("ef1fcfbc-60e0-4f17-9308-c583a05d48fd"), new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("fddaaf20-4ccc-4f4e-a724-dd310272b356"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "FeaturePermissions",
|
||||
columns: new[] { "Id", "Description", "FeatureId", "IsEnabled", "Name" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("01e06444-9ca7-4df4-b900-8c3fa051b92f"), "Allows a user to view all expense records across the organization or project, regardless of who submitted or paid them", new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), true, "View All" },
|
||||
{ new Guid("0f57885d-bcb2-4711-ac95-d841ace6d5a7"), "Allows a user to create and submit new expense records, including attaching relevant documents like receipts or invoices.", new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), true, "Upload" },
|
||||
{ new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"), "Allows a user to examine submitted expenses for accuracy, completeness, and policy compliance before they are approved or rejected.", new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), true, "Review" },
|
||||
{ new Guid("385be49f-8fde-440e-bdbc-3dffeb8dd116"), "Allows a user to view only the expense records that they have personally submitted", new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), true, "View Self" },
|
||||
{ new Guid("bdee29a2-b73b-402d-8dd1-c4b1f81ccbc3"), "Allows a user to configure and control system settings, such as managing expense types, payment modes, permissions, and overall workflow rules.", new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), true, "Manage" },
|
||||
{ new Guid("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"), "Allows a user to handle post-approval actions such as recording payments, updating financial records, or marking expenses as reimbursed or settled.", new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), true, "Process" },
|
||||
{ new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"), "Allows a user to authorize or reject submitted expenses, making them officially accepted or declined within the system.", new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"), true, "Approve" }
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "StatusPermissionMapping",
|
||||
columns: new[] { "Id", "PermissionId", "StatusId", "TenantId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("214354e5-daad-4569-ad69-eb5bf4e87fbc"), new Guid("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"), new Guid("61578360-3a49-4c34-8604-7b35a3787b95"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("4652d73f-fc71-4fe1-9f2f-1e48b342d741"), new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("cd15f9b9-be45-4deb-9c71-2f23f872dbcd"), new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("ed893799-1a5f-4311-a077-de93c86ca8fd"), new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"), new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("f6f26b2f-2fa6-40b7-8601-cbd4bcdda0cc"), new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"), new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_BillAttachments_DocumentId",
|
||||
table: "BillAttachments",
|
||||
column: "DocumentId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_BillAttachments_ExpensesId",
|
||||
table: "BillAttachments",
|
||||
column: "ExpensesId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_BillAttachments_TenantId",
|
||||
table: "BillAttachments",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpenseLogs_ExpenseId",
|
||||
table: "ExpenseLogs",
|
||||
column: "ExpenseId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpenseLogs_TenantId",
|
||||
table: "ExpenseLogs",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpenseLogs_UpdatedById",
|
||||
table: "ExpenseLogs",
|
||||
column: "UpdatedById");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_CreatedById",
|
||||
table: "Expenses",
|
||||
column: "CreatedById");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_ExpensesTypeId",
|
||||
table: "Expenses",
|
||||
column: "ExpensesTypeId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_PaidById",
|
||||
table: "Expenses",
|
||||
column: "PaidById");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_PaymentModeId",
|
||||
table: "Expenses",
|
||||
column: "PaymentModeId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_ProjectId",
|
||||
table: "Expenses",
|
||||
column: "ProjectId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_StatusId",
|
||||
table: "Expenses",
|
||||
column: "StatusId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_TenantId",
|
||||
table: "Expenses",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesReimburse_ReimburseById",
|
||||
table: "ExpensesReimburse",
|
||||
column: "ReimburseById");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesReimburse_TenantId",
|
||||
table: "ExpensesReimburse",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesReimburseMapping_ExpensesId",
|
||||
table: "ExpensesReimburseMapping",
|
||||
column: "ExpensesId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesReimburseMapping_ExpensesReimburseId",
|
||||
table: "ExpensesReimburseMapping",
|
||||
column: "ExpensesReimburseId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesReimburseMapping_TenantId",
|
||||
table: "ExpensesReimburseMapping",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesStatusMapping_NextStatusId",
|
||||
table: "ExpensesStatusMapping",
|
||||
column: "NextStatusId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesStatusMapping_StatusId",
|
||||
table: "ExpensesStatusMapping",
|
||||
column: "StatusId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesStatusMapping_TenantId",
|
||||
table: "ExpensesStatusMapping",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesStatusMaster_TenantId",
|
||||
table: "ExpensesStatusMaster",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesTypeMaster_TenantId",
|
||||
table: "ExpensesTypeMaster",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_PaymentModeMatser_TenantId",
|
||||
table: "PaymentModeMatser",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_StatusPermissionMapping_PermissionId",
|
||||
table: "StatusPermissionMapping",
|
||||
column: "PermissionId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_StatusPermissionMapping_StatusId",
|
||||
table: "StatusPermissionMapping",
|
||||
column: "StatusId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_StatusPermissionMapping_TenantId",
|
||||
table: "StatusPermissionMapping",
|
||||
column: "TenantId");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "BillAttachments");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "ExpenseLogs");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "ExpensesReimburseMapping");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "ExpensesStatusMapping");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "StatusPermissionMapping");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "ExpensesReimburse");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Expenses");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "ExpensesStatusMaster");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "ExpensesTypeMaster");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "PaymentModeMatser");
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("01e06444-9ca7-4df4-b900-8c3fa051b92f"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("0f57885d-bcb2-4711-ac95-d841ace6d5a7"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("385be49f-8fde-440e-bdbc-3dffeb8dd116"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("bdee29a2-b73b-402d-8dd1-c4b1f81ccbc3"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "Features",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("a4e25142-449b-4334-a6e5-22f70e4732d7"));
|
||||
}
|
||||
}
|
||||
}
|
4346
Marco.Pms.DataAccess/Migrations/20250730063711_Change_ExpenseStatus_To_Be_System_Scope.Designer.cs
generated
Normal file
4346
Marco.Pms.DataAccess/Migrations/20250730063711_Change_ExpenseStatus_To_Be_System_Scope.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,437 @@
|
||||
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 Change_ExpenseStatus_To_Be_System_Scope : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_ExpensesStatusMapping_Tenants_TenantId",
|
||||
table: "ExpensesStatusMapping");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_ExpensesStatusMaster_Tenants_TenantId",
|
||||
table: "ExpensesStatusMaster");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_StatusPermissionMapping_Tenants_TenantId",
|
||||
table: "StatusPermissionMapping");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_StatusPermissionMapping_TenantId",
|
||||
table: "StatusPermissionMapping");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_ExpensesStatusMaster_TenantId",
|
||||
table: "ExpensesStatusMaster");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_ExpensesStatusMapping_TenantId",
|
||||
table: "ExpensesStatusMapping");
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("75bbda6a-6a53-47d1-ad71-5f5f9446a11e"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("fddaaf20-4ccc-4f4e-a724-dd310272b356"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("4652d73f-fc71-4fe1-9f2f-1e48b342d741"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("ed893799-1a5f-4311-a077-de93c86ca8fd"));
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "TenantId",
|
||||
table: "StatusPermissionMapping");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "TenantId",
|
||||
table: "ExpensesStatusMaster");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "TenantId",
|
||||
table: "ExpensesStatusMapping");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "ApprovedById",
|
||||
table: "Expenses",
|
||||
type: "char(36)",
|
||||
nullable: true,
|
||||
collation: "ascii_general_ci");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "ProcessedById",
|
||||
table: "Expenses",
|
||||
type: "char(36)",
|
||||
nullable: true,
|
||||
collation: "ascii_general_ci");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "ReviewedById",
|
||||
table: "Expenses",
|
||||
type: "char(36)",
|
||||
nullable: true,
|
||||
collation: "ascii_general_ci");
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "ExpensesStatusMapping",
|
||||
columns: new[] { "Id", "NextStatusId", "StatusId" },
|
||||
values: new object[] { new Guid("4ddddc10-0ffd-4884-accf-d4fa0bd97f54"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729") });
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("61578360-3a49-4c34-8604-7b35a3787b95"),
|
||||
columns: new[] { "DisplayName", "Name" },
|
||||
values: new object[] { "Mark as Processed", "Processed" });
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
||||
columns: new[] { "Description", "Name" },
|
||||
values: new object[] { "Expense was declined, often with a reason(approval rejected).", "Rejected by Approver" });
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "ExpensesStatusMaster",
|
||||
columns: new[] { "Id", "Color", "Description", "DisplayName", "IsActive", "IsSystem", "Name" },
|
||||
values: new object[] { new Guid("965eda62-7907-4963-b4a1-657fb0b2724b"), "#ff3e1d", "Expense was declined, often with a reason(review rejected).", "Reject", true, true, "Rejected by Reviewer" });
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "StatusPermissionMapping",
|
||||
columns: new[] { "Id", "PermissionId", "StatusId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("0b7926fc-a34b-4a5b-8c7d-1003480cf0fa"), new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"), new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8") },
|
||||
{ new Guid("722b0c3c-5a78-456d-b9bb-b6ba1b21d59b"), new Guid("0f57885d-bcb2-4711-ac95-d841ace6d5a7"), new Guid("297e0d8f-f668-41b5-bfea-e03b354251c8") },
|
||||
{ new Guid("7deb0945-e1c9-411f-8b3c-c9bdbe3c3c2d"), new Guid("0f57885d-bcb2-4711-ac95-d841ace6d5a7"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7") }
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "ExpensesStatusMapping",
|
||||
columns: new[] { "Id", "NextStatusId", "StatusId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("6b867bec-66e6-42a7-9611-f4595af9b9ce"), new Guid("965eda62-7907-4963-b4a1-657fb0b2724b"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7") },
|
||||
{ new Guid("9e2ec648-1ca2-4747-9329-e911b18edb3e"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), new Guid("965eda62-7907-4963-b4a1-657fb0b2724b") }
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "StatusPermissionMapping",
|
||||
columns: new[] { "Id", "PermissionId", "StatusId" },
|
||||
values: new object[] { new Guid("9e2ec648-1ca2-4747-9329-e911b18edb3e"), new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"), new Guid("965eda62-7907-4963-b4a1-657fb0b2724b") });
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_ApprovedById",
|
||||
table: "Expenses",
|
||||
column: "ApprovedById");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_ProcessedById",
|
||||
table: "Expenses",
|
||||
column: "ProcessedById");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_ReviewedById",
|
||||
table: "Expenses",
|
||||
column: "ReviewedById");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Expenses_Employees_ApprovedById",
|
||||
table: "Expenses",
|
||||
column: "ApprovedById",
|
||||
principalTable: "Employees",
|
||||
principalColumn: "Id");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Expenses_Employees_ProcessedById",
|
||||
table: "Expenses",
|
||||
column: "ProcessedById",
|
||||
principalTable: "Employees",
|
||||
principalColumn: "Id");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Expenses_Employees_ReviewedById",
|
||||
table: "Expenses",
|
||||
column: "ReviewedById",
|
||||
principalTable: "Employees",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Expenses_Employees_ApprovedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Expenses_Employees_ProcessedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Expenses_Employees_ReviewedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_Expenses_ApprovedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_Expenses_ProcessedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_Expenses_ReviewedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("4ddddc10-0ffd-4884-accf-d4fa0bd97f54"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("6b867bec-66e6-42a7-9611-f4595af9b9ce"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("9e2ec648-1ca2-4747-9329-e911b18edb3e"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("0b7926fc-a34b-4a5b-8c7d-1003480cf0fa"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("722b0c3c-5a78-456d-b9bb-b6ba1b21d59b"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("7deb0945-e1c9-411f-8b3c-c9bdbe3c3c2d"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("9e2ec648-1ca2-4747-9329-e911b18edb3e"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("965eda62-7907-4963-b4a1-657fb0b2724b"));
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "ApprovedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "ProcessedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "ReviewedById",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "TenantId",
|
||||
table: "StatusPermissionMapping",
|
||||
type: "char(36)",
|
||||
nullable: false,
|
||||
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
|
||||
collation: "ascii_general_ci");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "TenantId",
|
||||
table: "ExpensesStatusMaster",
|
||||
type: "char(36)",
|
||||
nullable: false,
|
||||
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
|
||||
collation: "ascii_general_ci");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "TenantId",
|
||||
table: "ExpensesStatusMapping",
|
||||
type: "char(36)",
|
||||
nullable: false,
|
||||
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
|
||||
collation: "ascii_general_ci");
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("1fca1700-1266-477d-bba4-9ac3753aa33c"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("36c00548-241c-43ec-bc95-cacebedb925c"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("5cf7f1df-9d1f-4289-add0-1775ad614f25"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("af1e4492-98ee-4451-8ab7-fd8323f29c32"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("ef1fcfbc-60e0-4f17-9308-c583a05d48fd"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "ExpensesStatusMapping",
|
||||
columns: new[] { "Id", "NextStatusId", "StatusId", "TenantId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("75bbda6a-6a53-47d1-ad71-5f5f9446a11e"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("fddaaf20-4ccc-4f4e-a724-dd310272b356"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }
|
||||
});
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("297e0d8f-f668-41b5-bfea-e03b354251c8"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("61578360-3a49-4c34-8604-7b35a3787b95"),
|
||||
columns: new[] { "DisplayName", "Name", "TenantId" },
|
||||
values: new object[] { "Mark as Paid", "Paid", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") });
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
||||
columns: new[] { "Description", "Name", "TenantId" },
|
||||
values: new object[] { "Expense was declined, often with a reason(either review rejected or approval rejected.", "Rejected", new Guid("b3466e83-7e11-464c-b93a-daf047838b26") });
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "ExpensesStatusMaster",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("214354e5-daad-4569-ad69-eb5bf4e87fbc"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("cd15f9b9-be45-4deb-9c71-2f23f872dbcd"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.UpdateData(
|
||||
table: "StatusPermissionMapping",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("f6f26b2f-2fa6-40b7-8601-cbd4bcdda0cc"),
|
||||
column: "TenantId",
|
||||
value: new Guid("b3466e83-7e11-464c-b93a-daf047838b26"));
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "StatusPermissionMapping",
|
||||
columns: new[] { "Id", "PermissionId", "StatusId", "TenantId" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("4652d73f-fc71-4fe1-9f2f-1e48b342d741"), new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"), new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") },
|
||||
{ new Guid("ed893799-1a5f-4311-a077-de93c86ca8fd"), new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"), new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"), new Guid("b3466e83-7e11-464c-b93a-daf047838b26") }
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_StatusPermissionMapping_TenantId",
|
||||
table: "StatusPermissionMapping",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesStatusMaster_TenantId",
|
||||
table: "ExpensesStatusMaster",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_ExpensesStatusMapping_TenantId",
|
||||
table: "ExpensesStatusMapping",
|
||||
column: "TenantId");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_ExpensesStatusMapping_Tenants_TenantId",
|
||||
table: "ExpensesStatusMapping",
|
||||
column: "TenantId",
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_ExpensesStatusMaster_Tenants_TenantId",
|
||||
table: "ExpensesStatusMaster",
|
||||
column: "TenantId",
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_StatusPermissionMapping_Tenants_TenantId",
|
||||
table: "StatusPermissionMapping",
|
||||
column: "TenantId",
|
||||
principalTable: "Tenants",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
}
|
||||
}
|
4430
Marco.Pms.DataAccess/Migrations/20250730070549_Added_CurrencyMaster_Table.Designer.cs
generated
Normal file
4430
Marco.Pms.DataAccess/Migrations/20250730070549_Added_CurrencyMaster_Table.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,57 @@
|
||||
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_CurrencyMaster_Table : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "CurrencyMaster",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
|
||||
CurrencyCode = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
CurrencyName = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
Symbol = table.Column<string>(type: "longtext", nullable: false)
|
||||
.Annotation("MySql:CharSet", "utf8mb4"),
|
||||
IsActive = table.Column<bool>(type: "tinyint(1)", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_CurrencyMaster", x => x.Id);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "CurrencyMaster",
|
||||
columns: new[] { "Id", "CurrencyCode", "CurrencyName", "IsActive", "Symbol" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("297e237a-56d3-48f6-b39d-ec3991dea8bf"), "JPY", "Japanese Yen", true, "¥" },
|
||||
{ new Guid("2f672568-a67b-4961-acb2-a8c7834e1762"), "USD", "US Dollar", true, "$" },
|
||||
{ new Guid("3e456237-ef06-4ea1-a261-188c9b0c6df6"), "GBP", "Pound Sterling", true, "£" },
|
||||
{ new Guid("4d1155bb-1448-4d97-a732-96c92eb99c45"), "EUR", "Euro", true, "€" },
|
||||
{ new Guid("78e96e4a-7ce0-4164-ae3a-c833ad45ec2c"), "INR", "Indian Rupee", true, "₹" },
|
||||
{ new Guid("b960166a-f7e9-49e3-bb4b-28511f126c08"), "CNY", "Chinese Yuan (Renminbi)", true, "¥" },
|
||||
{ new Guid("efe9b4f6-64d6-446e-a42d-1c7aaf6dd70d"), "RUB", "Russian Ruble", true, "₽" }
|
||||
});
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "CurrencyMaster");
|
||||
}
|
||||
}
|
||||
}
|
4437
Marco.Pms.DataAccess/Migrations/20250804053705_Added_Updated_At_In_UpdateLogs.Designer.cs
generated
Normal file
4437
Marco.Pms.DataAccess/Migrations/20250804053705_Added_Updated_At_In_UpdateLogs.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Marco.Pms.DataAccess.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class Added_Updated_At_In_UpdateLogs : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<DateTime>(
|
||||
name: "UpdateAt",
|
||||
table: "ExpenseLogs",
|
||||
type: "datetime(6)",
|
||||
nullable: true);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "UpdateAt",
|
||||
table: "ExpenseLogs");
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,9 @@
|
||||
using Marco.Pms.Model.MongoDBModels;
|
||||
using Marco.Pms.Model.MongoDBModels.Employees;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using MongoDB.Driver;
|
||||
|
||||
namespace Marco.Pms.CacheHelper
|
||||
namespace Marco.Pms.Helpers.CacheHelper
|
||||
{
|
||||
public class EmployeeCache
|
||||
{
|
||||
@ -27,6 +27,7 @@ namespace Marco.Pms.CacheHelper
|
||||
|
||||
var update = Builders<EmployeePermissionMongoDB>.Update
|
||||
.AddToSetEach(e => e.ApplicationRoleIds, newRoleIds)
|
||||
.Set(r => r.ExpireAt, DateTime.UtcNow.Date.AddDays(1))
|
||||
.AddToSetEach(e => e.PermissionIds, newPermissionIds);
|
||||
|
||||
var options = new UpdateOptions { IsUpsert = true };
|
||||
@ -46,6 +47,7 @@ namespace Marco.Pms.CacheHelper
|
||||
var filter = Builders<EmployeePermissionMongoDB>.Filter.Eq(e => e.Id, employeeId.ToString());
|
||||
|
||||
var update = Builders<EmployeePermissionMongoDB>.Update
|
||||
.Set(r => r.ExpireAt, DateTime.UtcNow.Date.AddDays(1))
|
||||
.AddToSetEach(e => e.ProjectIds, newprojectIds);
|
||||
|
||||
var result = await _collection.UpdateOneAsync(filter, update, new UpdateOptions { IsUpsert = true });
|
||||
@ -187,17 +189,12 @@ namespace Marco.Pms.CacheHelper
|
||||
// A private method to handle the one-time setup of the collection's indexes.
|
||||
private async Task InitializeCollectionAsync()
|
||||
{
|
||||
// 1. Define the TTL (Time-To-Live) index on the 'ExpireAt' field.
|
||||
var indexKeys = Builders<EmployeePermissionMongoDB>.IndexKeys.Ascending(x => x.ExpireAt);
|
||||
var indexOptions = new CreateIndexOptions
|
||||
{
|
||||
// This tells MongoDB to automatically delete documents when their 'ExpireAt' time is reached.
|
||||
ExpireAfter = TimeSpan.FromSeconds(0)
|
||||
ExpireAfter = TimeSpan.Zero // required for fixed expiration time
|
||||
};
|
||||
var indexModel = new CreateIndexModel<EmployeePermissionMongoDB>(indexKeys, indexOptions);
|
||||
|
||||
// 2. Create the index. This is an idempotent operation if the index already exists.
|
||||
// Use CreateOneAsync since we are only creating a single index.
|
||||
await _collection.Indexes.CreateOneAsync(indexModel);
|
||||
}
|
||||
}
|
178
Marco.Pms.Helpers/CacheHelper/ExpenseCache.cs
Normal file
178
Marco.Pms.Helpers/CacheHelper/ExpenseCache.cs
Normal file
@ -0,0 +1,178 @@
|
||||
using Marco.Pms.Model.MongoDBModels.Expenses;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Driver;
|
||||
|
||||
namespace Marco.Pms.Helpers.CacheHelper
|
||||
{
|
||||
public class ExpenseCache
|
||||
{
|
||||
private readonly IMongoCollection<ExpenseDetailsMongoDB> _collection;
|
||||
public ExpenseCache(IConfiguration configuration)
|
||||
{
|
||||
|
||||
var connectionString = configuration["MongoDB:ConnectionString"];
|
||||
var mongoUrl = new MongoUrl(connectionString);
|
||||
var client = new MongoClient(mongoUrl); // Your MongoDB connection string
|
||||
var mongoDB = client.GetDatabase(mongoUrl.DatabaseName); // Your MongoDB Database name
|
||||
_collection = mongoDB.GetCollection<ExpenseDetailsMongoDB>("Expenses");
|
||||
}
|
||||
public async Task AddExpenseToCacheAsync(ExpenseDetailsMongoDB expense)
|
||||
{
|
||||
await _collection.InsertOneAsync(expense);
|
||||
|
||||
await InitializeCollectionAsync();
|
||||
}
|
||||
public async Task AddExpensesListToCacheAsync(List<ExpenseDetailsMongoDB> expenses)
|
||||
{
|
||||
// 1. Add a guard clause to avoid an unnecessary database call for an empty list.
|
||||
if (expenses == null || !expenses.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. Perform the insert operation. This is the only responsibility of this method.
|
||||
await _collection.InsertManyAsync(expenses);
|
||||
await InitializeCollectionAsync();
|
||||
}
|
||||
public async Task<(int totalPages, long totalCount, List<ExpenseDetailsMongoDB> expenseList)> GetExpenseListFromCacheAsync(Guid tenantId, Guid loggedInEmployeeId, bool viewAll,
|
||||
bool viewSelf, int pageNumber, int pageSize, ExpensesFilter? expenseFilter, string? searchString)
|
||||
{
|
||||
var filterBuilder = Builders<ExpenseDetailsMongoDB>.Filter;
|
||||
var filter = filterBuilder.Empty;
|
||||
|
||||
// Permission-based filter
|
||||
if (!viewAll && viewSelf)
|
||||
{
|
||||
filter &= filterBuilder.Eq(e => e.CreatedBy.Id, loggedInEmployeeId.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
filter &= filterBuilder.Or(
|
||||
filterBuilder.Eq(e => e.CreatedBy.Id, loggedInEmployeeId.ToString()),
|
||||
filterBuilder.Ne(e => e.Status.Id, "297e0d8f-f668-41b5-bfea-e03b354251c8")
|
||||
);
|
||||
}
|
||||
|
||||
// Apply filters
|
||||
|
||||
if (expenseFilter != null)
|
||||
{
|
||||
if (expenseFilter.StartDate.HasValue && expenseFilter.EndDate.HasValue && expenseFilter.IsTransactionDate == false)
|
||||
{
|
||||
filter &= filterBuilder.Gte(e => e.CreatedAt, expenseFilter.StartDate.Value.Date)
|
||||
& filterBuilder.Lte(e => e.CreatedAt, expenseFilter.EndDate.Value.Date.AddDays(1).AddTicks(-1));
|
||||
}
|
||||
|
||||
if (expenseFilter.StartDate.HasValue && expenseFilter.EndDate.HasValue && expenseFilter.IsTransactionDate)
|
||||
{
|
||||
filter &= filterBuilder.Gte(e => e.TransactionDate, expenseFilter.StartDate.Value.Date)
|
||||
& filterBuilder.Lte(e => e.TransactionDate, expenseFilter.EndDate.Value.Date.AddDays(1).AddTicks(-1));
|
||||
}
|
||||
|
||||
if (expenseFilter.ProjectIds?.Any() == true)
|
||||
{
|
||||
filter &= filterBuilder.In(e => e.Project.Id, expenseFilter.ProjectIds.Select(p => p.ToString()).ToList());
|
||||
}
|
||||
|
||||
if (expenseFilter.StatusIds?.Any() == true)
|
||||
{
|
||||
filter &= filterBuilder.In(e => e.Status.Id, expenseFilter.StatusIds.Select(p => p.ToString()).ToList());
|
||||
}
|
||||
|
||||
if (expenseFilter.PaidById?.Any() == true)
|
||||
{
|
||||
filter &= filterBuilder.In(e => e.PaidBy.Id, expenseFilter.PaidById.Select(p => p.ToString()).ToList());
|
||||
}
|
||||
|
||||
if (expenseFilter.CreatedByIds?.Any() == true && viewAll)
|
||||
{
|
||||
filter &= filterBuilder.In(e => e.CreatedBy.Id, expenseFilter.CreatedByIds.Select(p => p.ToString()).ToList());
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchString))
|
||||
{
|
||||
var searchPattern = new BsonRegularExpression(searchString, "i");
|
||||
|
||||
// The base text searches remain the same
|
||||
var searchClauses = new List<FilterDefinition<ExpenseDetailsMongoDB>>
|
||||
{
|
||||
filterBuilder.Regex(e => e.Description, searchPattern),
|
||||
filterBuilder.Regex(e => e.TransactionId, searchPattern)
|
||||
};
|
||||
|
||||
// Build the complex filter for PaidBy.FullName
|
||||
var paidByFilter = new BsonDocument("$expr",
|
||||
new BsonDocument("$regexMatch", new BsonDocument
|
||||
{
|
||||
{ "input", new BsonDocument("$concat", new BsonArray { "$PaidBy.FirstName", " ", "$PaidBy.LastName" }) },
|
||||
{ "regex", searchString }, // BsonRegularExpression can't be used here, pass the string
|
||||
{ "options", "i" } // Case-insensitivity option
|
||||
})
|
||||
);
|
||||
searchClauses.Add(paidByFilter);
|
||||
|
||||
// Build the complex filter for CreatedBy.FullName
|
||||
var createdByFilter = new BsonDocument("$expr",
|
||||
new BsonDocument("$regexMatch", new BsonDocument
|
||||
{
|
||||
{ "input", new BsonDocument("$concat", new BsonArray { "$CreatedBy.FirstName", " ", "$CreatedBy.LastName" }) },
|
||||
{ "regex", searchString },
|
||||
{ "options", "i" }
|
||||
})
|
||||
);
|
||||
searchClauses.Add(createdByFilter);
|
||||
|
||||
// Combine all clauses with an OR
|
||||
filter &= filterBuilder.Or(searchClauses);
|
||||
}
|
||||
|
||||
// Total count
|
||||
var totalCount = await _collection.CountDocumentsAsync(filter);
|
||||
var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
|
||||
|
||||
// Fetch paginated data
|
||||
var expenses = await _collection
|
||||
.Find(filter)
|
||||
.Skip((pageNumber - 1) * pageSize)
|
||||
.Limit(pageSize)
|
||||
.SortByDescending(e => e.CreatedAt)
|
||||
.ToListAsync();
|
||||
|
||||
return (totalPages, totalCount, expenses);
|
||||
}
|
||||
|
||||
public async Task<ExpenseDetailsMongoDB> GetExpenseDetailsByIdAsync(Guid id, Guid tenantId)
|
||||
{
|
||||
var filter = Builders<ExpenseDetailsMongoDB>.Filter.And(
|
||||
Builders<ExpenseDetailsMongoDB>.Filter.Eq(e => e.Id, id.ToString()),
|
||||
Builders<ExpenseDetailsMongoDB>.Filter.Eq(e => e.TenantId, tenantId.ToString())
|
||||
);
|
||||
var expense = await _collection.Find(filter).FirstOrDefaultAsync();
|
||||
|
||||
return expense;
|
||||
}
|
||||
|
||||
public async Task<bool> DeleteExpenseFromCacheAsync(Guid id, Guid tenantId)
|
||||
{
|
||||
var filter = Builders<ExpenseDetailsMongoDB>.Filter.And(
|
||||
Builders<ExpenseDetailsMongoDB>.Filter.Eq(e => e.Id, id.ToString()),
|
||||
Builders<ExpenseDetailsMongoDB>.Filter.Eq(e => e.TenantId, tenantId.ToString())
|
||||
);
|
||||
var result = await _collection.DeleteOneAsync(filter);
|
||||
return result.DeletedCount > 0;
|
||||
}
|
||||
private async Task InitializeCollectionAsync()
|
||||
{
|
||||
var indexKeys = Builders<ExpenseDetailsMongoDB>.IndexKeys.Ascending(x => x.ExpireAt);
|
||||
var indexOptions = new CreateIndexOptions
|
||||
{
|
||||
ExpireAfter = TimeSpan.Zero // required for fixed expiration time
|
||||
};
|
||||
var indexModel = new CreateIndexModel<ExpenseDetailsMongoDB>(indexKeys, indexOptions);
|
||||
await _collection.Indexes.CreateOneAsync(indexModel);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,13 +1,14 @@
|
||||
using Marco.Pms.DataAccess.Data;
|
||||
using Marco.Pms.Model.Master;
|
||||
using Marco.Pms.Model.MongoDBModels;
|
||||
using Marco.Pms.Model.MongoDBModels.Masters;
|
||||
using Marco.Pms.Model.MongoDBModels.Project;
|
||||
using Marco.Pms.Model.Projects;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Driver;
|
||||
|
||||
namespace Marco.Pms.CacheHelper
|
||||
namespace Marco.Pms.Helpers
|
||||
{
|
||||
public class ProjectCache
|
||||
{
|
||||
@ -29,13 +30,7 @@ namespace Marco.Pms.CacheHelper
|
||||
{
|
||||
await _projectCollection.InsertOneAsync(projectDetails);
|
||||
|
||||
var indexKeys = Builders<ProjectMongoDB>.IndexKeys.Ascending(x => x.ExpireAt);
|
||||
var indexOptions = new CreateIndexOptions
|
||||
{
|
||||
ExpireAfter = TimeSpan.Zero // required for fixed expiration time
|
||||
};
|
||||
var indexModel = new CreateIndexModel<ProjectMongoDB>(indexKeys, indexOptions);
|
||||
await _projectCollection.Indexes.CreateOneAsync(indexModel);
|
||||
await InitializeCollectionAsync();
|
||||
|
||||
}
|
||||
public async Task AddProjectDetailsListToCache(List<ProjectMongoDB> projectDetailsList)
|
||||
@ -52,17 +47,12 @@ namespace Marco.Pms.CacheHelper
|
||||
}
|
||||
private async Task InitializeCollectionAsync()
|
||||
{
|
||||
// 1. Define the TTL (Time-To-Live) index on the 'ExpireAt' field.
|
||||
var indexKeys = Builders<ProjectMongoDB>.IndexKeys.Ascending(x => x.ExpireAt);
|
||||
var indexOptions = new CreateIndexOptions
|
||||
{
|
||||
// This tells MongoDB to automatically delete documents when their 'ExpireAt' time is reached.
|
||||
ExpireAfter = TimeSpan.FromSeconds(0)
|
||||
ExpireAfter = TimeSpan.Zero // required for fixed expiration time
|
||||
};
|
||||
var indexModel = new CreateIndexModel<ProjectMongoDB>(indexKeys, indexOptions);
|
||||
|
||||
// 2. Create the index. This is an idempotent operation if the index already exists.
|
||||
// Use CreateOneAsync since we are only creating a single index.
|
||||
await _projectCollection.Indexes.CreateOneAsync(indexModel);
|
||||
}
|
||||
public async Task<bool> UpdateProjectDetailsOnlyToCache(Project project, StatusMaster projectStatus)
|
@ -1,8 +1,8 @@
|
||||
using Marco.Pms.Model.MongoDBModels;
|
||||
using Marco.Pms.Model.MongoDBModels.Utility;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using MongoDB.Driver;
|
||||
|
||||
namespace Marco.Pms.CacheHelper
|
||||
namespace Marco.Pms.Helpers.CacheHelper
|
||||
{
|
||||
public class ReportCache
|
||||
{
|
128
Marco.Pms.Helpers/Utility/UtilityMongoDBHelper.cs
Normal file
128
Marco.Pms.Helpers/Utility/UtilityMongoDBHelper.cs
Normal file
@ -0,0 +1,128 @@
|
||||
using Marco.Pms.Model.MongoDBModels.Utility;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Driver;
|
||||
using System.Collections;
|
||||
|
||||
namespace Marco.Pms.Helpers.Utility
|
||||
{
|
||||
public class UtilityMongoDBHelper
|
||||
{
|
||||
private readonly IMongoDatabase _mongoDatabase;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly ILogger<UtilityMongoDBHelper> _logger;
|
||||
public UtilityMongoDBHelper(IConfiguration configuration, ILogger<UtilityMongoDBHelper> logger)
|
||||
{
|
||||
_configuration = configuration;
|
||||
_logger = logger;
|
||||
var connectionString = configuration["MongoDB:ModificationConnectionString"];
|
||||
var mongoUrl = new MongoUrl(connectionString);
|
||||
var client = new MongoClient(mongoUrl); // Your MongoDB connection string
|
||||
_mongoDatabase = client.GetDatabase(mongoUrl.DatabaseName); // Your MongoDB Database name
|
||||
}
|
||||
|
||||
#region =================================================================== Update Log Helper Functions ===================================================================
|
||||
public async Task PushToUpdateLogsAsync(UpdateLogsObject oldObject, string collectionName)
|
||||
{
|
||||
var collection = _mongoDatabase.GetCollection<UpdateLogsObject>(collectionName);
|
||||
await collection.InsertOneAsync(oldObject);
|
||||
}
|
||||
|
||||
public async Task<List<UpdateLogsObject>> GetFromUpdateLogsByEntityIdAsync(Guid entityId, string collectionName)
|
||||
{
|
||||
var collection = _mongoDatabase.GetCollection<UpdateLogsObject>(collectionName);
|
||||
var filter = Builders<UpdateLogsObject>.Filter.Eq(p => p.EntityId, entityId.ToString());
|
||||
|
||||
List<UpdateLogsObject> result = await collection
|
||||
.Find(filter)
|
||||
.ToListAsync();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<List<UpdateLogsObject>> GetFromUpdateLogsByUpdetedByIdAsync(Guid updatedById, string collectionName)
|
||||
{
|
||||
var collection = _mongoDatabase.GetCollection<UpdateLogsObject>(collectionName);
|
||||
var filter = Builders<UpdateLogsObject>.Filter.Eq(p => p.UpdatedById, updatedById.ToString());
|
||||
|
||||
List<UpdateLogsObject> result = await collection
|
||||
.Find(filter)
|
||||
.ToListAsync();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public BsonDocument EntityToBsonDocument(object entity)
|
||||
{
|
||||
var bson = new BsonDocument();
|
||||
|
||||
var props = entity.GetType().GetProperties();
|
||||
foreach (var prop in props)
|
||||
{
|
||||
var value = prop.GetValue(entity);
|
||||
if (value == null)
|
||||
{
|
||||
bson[prop.Name] = BsonNull.Value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (value is Guid guidValue)
|
||||
{
|
||||
bson[prop.Name] = guidValue.ToString(); // store Guid as string
|
||||
}
|
||||
else if (value is string || value.GetType().IsPrimitive || value is DateTime)
|
||||
{
|
||||
bson[prop.Name] = BsonValue.Create(value); // simple types
|
||||
}
|
||||
else if (value is IEnumerable list && !(value is string))
|
||||
{
|
||||
var array = new BsonArray();
|
||||
foreach (var item in list)
|
||||
{
|
||||
array.Add(EntityToBsonDocument(item)); // recursive
|
||||
}
|
||||
bson[prop.Name] = array;
|
||||
}
|
||||
else
|
||||
{
|
||||
// nested object
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return bson;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region =================================================================== S3 deletion Helper Functions ===================================================================
|
||||
|
||||
public async Task PushToS3DeletionAsync(List<S3DeletionObject> deletionObject)
|
||||
{
|
||||
var bucketName = _configuration["AWS:BucketName"];
|
||||
if (bucketName != null)
|
||||
{
|
||||
deletionObject = deletionObject.Select(d => new S3DeletionObject
|
||||
{
|
||||
BucketName = bucketName,
|
||||
Key = d.Key,
|
||||
Deleted = false
|
||||
}).ToList();
|
||||
}
|
||||
_logger.LogInformation("Delection object for bucket {BucketName} added to mongoDB", bucketName);
|
||||
try
|
||||
{
|
||||
var collection = _mongoDatabase.GetCollection<S3DeletionObject>("S3Delection");
|
||||
await collection.InsertManyAsync(deletionObject);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Error occured while saving delection object for S3 to MogoDB");
|
||||
}
|
||||
_logger.LogInformation("Delection Objects added to MongoDB Successfully");
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
22
Marco.Pms.Model/Dtos/Expenses/CreateExpensesDto.cs
Normal file
22
Marco.Pms.Model/Dtos/Expenses/CreateExpensesDto.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using Marco.Pms.Model.Utilities;
|
||||
|
||||
namespace Marco.Pms.Model.Dtos.Expenses
|
||||
{
|
||||
public class CreateExpensesDto
|
||||
{
|
||||
public required Guid ProjectId { get; set; }
|
||||
public required Guid ExpensesTypeId { get; set; }
|
||||
public required Guid PaymentModeId { get; set; }
|
||||
public required Guid PaidById { get; set; }
|
||||
public DateTime TransactionDate { get; set; } = DateTime.Now;
|
||||
public string? TransactionId { get; set; }
|
||||
public required string Description { get; set; }
|
||||
public string? Location { get; set; }
|
||||
public string? GSTNumber { get; set; }
|
||||
public required string SupplerName { get; set; }
|
||||
public required double Amount { get; set; }
|
||||
public int? NoOfPersons { get; set; } = 0;
|
||||
public bool PreApproved { get; set; } = false;
|
||||
public required List<FileUploadModel> BillAttachments { get; set; }
|
||||
}
|
||||
}
|
12
Marco.Pms.Model/Dtos/Expenses/ExpenseRecordDto.cs
Normal file
12
Marco.Pms.Model/Dtos/Expenses/ExpenseRecordDto.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace Marco.Pms.Model.Dtos.Expenses
|
||||
{
|
||||
public class ExpenseRecordDto
|
||||
{
|
||||
public Guid ExpenseId { get; set; }
|
||||
public Guid StatusId { get; set; }
|
||||
public string? Comment { get; set; }
|
||||
public string? ReimburseTransactionId { get; set; }
|
||||
public DateTime? ReimburseDate { get; set; }
|
||||
public Guid? ReimburseById { get; set; }
|
||||
}
|
||||
}
|
23
Marco.Pms.Model/Dtos/Expenses/UpdateExpensesDto.cs
Normal file
23
Marco.Pms.Model/Dtos/Expenses/UpdateExpensesDto.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using Marco.Pms.Model.Utilities;
|
||||
|
||||
namespace Marco.Pms.Model.Dtos.Expenses
|
||||
{
|
||||
public class UpdateExpensesDto
|
||||
{
|
||||
public required Guid Id { get; set; }
|
||||
public required Guid ProjectId { get; set; }
|
||||
public required Guid ExpensesTypeId { get; set; }
|
||||
public required Guid PaymentModeId { get; set; }
|
||||
public required Guid PaidById { get; set; }
|
||||
public DateTime TransactionDate { get; set; } = DateTime.Now;
|
||||
public string? TransactionId { get; set; }
|
||||
public required string Description { get; set; }
|
||||
public string? Location { get; set; }
|
||||
public string? GSTNumber { get; set; }
|
||||
public required string SupplerName { get; set; }
|
||||
public required double Amount { get; set; }
|
||||
public int? NoOfPersons { get; set; } = 0;
|
||||
public bool PreApproved { get; set; } = false;
|
||||
public List<FileUploadModel>? BillAttachments { get; set; }
|
||||
}
|
||||
}
|
12
Marco.Pms.Model/Dtos/Master/ExpensesStatusMasterDto.cs
Normal file
12
Marco.Pms.Model/Dtos/Master/ExpensesStatusMasterDto.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace Marco.Pms.Model.Dtos.Master
|
||||
{
|
||||
public class ExpensesStatusMasterDto
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public required string Name { get; set; } = string.Empty;
|
||||
public string DisplayName { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public List<Guid>? PermissionIds { get; set; }
|
||||
public required string? Color { get; set; }
|
||||
}
|
||||
}
|
10
Marco.Pms.Model/Dtos/Master/ExpensesTypeMasterDto.cs
Normal file
10
Marco.Pms.Model/Dtos/Master/ExpensesTypeMasterDto.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace Marco.Pms.Model.Dtos.Master
|
||||
{
|
||||
public class ExpensesTypeMasterDto
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public required string Name { get; set; }
|
||||
public required bool NoOfPersonsRequired { get; set; }
|
||||
public string? Description { get; set; }
|
||||
}
|
||||
}
|
9
Marco.Pms.Model/Dtos/Master/PaymentModeMatserDto.cs
Normal file
9
Marco.Pms.Model/Dtos/Master/PaymentModeMatserDto.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace Marco.Pms.Model.Dtos.Master
|
||||
{
|
||||
public class PaymentModeMatserDto
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -5,7 +5,6 @@
|
||||
public Guid EmpID { get; set; }
|
||||
public Guid JobRoleId { get; set; }
|
||||
public Guid ProjectId { get; set; }
|
||||
|
||||
public bool Status { get; set; }
|
||||
}
|
||||
|
||||
@ -14,7 +13,6 @@
|
||||
{
|
||||
public Guid ProjectId { get; set; }
|
||||
public Guid JobRoleId { get; set; }
|
||||
|
||||
public bool Status { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,13 @@
|
||||
public static readonly Guid SelfAttendance = Guid.Parse("ccb0589f-712b-43de-92ed-5b6088e7dc4e");
|
||||
public static readonly Guid ViewMasters = Guid.Parse("5ffbafe0-7ab0-48b1-bb50-c1bf76b65f9d");
|
||||
public static readonly Guid ManageMasters = Guid.Parse("588a8824-f924-4955-82d8-fc51956cf323");
|
||||
public static readonly Guid ExpenseViewSelf = Guid.Parse("385be49f-8fde-440e-bdbc-3dffeb8dd116");
|
||||
public static readonly Guid ExpenseViewAll = Guid.Parse("01e06444-9ca7-4df4-b900-8c3fa051b92f");
|
||||
public static readonly Guid ExpenseUpload = Guid.Parse("0f57885d-bcb2-4711-ac95-d841ace6d5a7");
|
||||
public static readonly Guid ExpenseReview = Guid.Parse("1f4bda08-1873-449a-bb66-3e8222bd871b");
|
||||
public static readonly Guid ExpenseApprove = Guid.Parse("eaafdd76-8aac-45f9-a530-315589c6deca");
|
||||
public static readonly Guid ExpenseProcess = Guid.Parse("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11");
|
||||
public static readonly Guid ExpenseManage = Guid.Parse("bdee29a2-b73b-402d-8dd1-c4b1f81ccbc3");
|
||||
}
|
||||
}
|
||||
|
||||
|
22
Marco.Pms.Model/Expenses/BillAttachments.cs
Normal file
22
Marco.Pms.Model/Expenses/BillAttachments.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using Marco.Pms.Model.DocumentManager;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Marco.Pms.Model.Expenses
|
||||
{
|
||||
public class BillAttachments : TenantRelation
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid ExpensesId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ExpensesId")]
|
||||
public Expenses? Expenses { get; set; }
|
||||
public Guid DocumentId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("DocumentId")]
|
||||
public Document? Document { get; set; }
|
||||
}
|
||||
}
|
25
Marco.Pms.Model/Expenses/ExpenseLog.cs
Normal file
25
Marco.Pms.Model/Expenses/ExpenseLog.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using Marco.Pms.Model.Employees;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Marco.Pms.Model.Expenses
|
||||
{
|
||||
public class ExpenseLog : TenantRelation
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid ExpenseId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ExpenseId")]
|
||||
public Expenses? Expense { get; set; }
|
||||
public Guid UpdatedById { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("UpdatedById")]
|
||||
public Employee? UpdatedBy { get; set; }
|
||||
public DateTime? UpdateAt { get; set; }
|
||||
public string Action { get; set; } = string.Empty;
|
||||
public string? Comment { get; set; }
|
||||
}
|
||||
}
|
70
Marco.Pms.Model/Expenses/Expenses.cs
Normal file
70
Marco.Pms.Model/Expenses/Expenses.cs
Normal file
@ -0,0 +1,70 @@
|
||||
using Marco.Pms.Model.Employees;
|
||||
using Marco.Pms.Model.Master;
|
||||
using Marco.Pms.Model.Projects;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Marco.Pms.Model.Expenses
|
||||
{
|
||||
public class Expenses : TenantRelation
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid ProjectId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ProjectId")]
|
||||
public Project? Project { get; set; }
|
||||
public Guid ExpensesTypeId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ExpensesTypeId")]
|
||||
public ExpensesTypeMaster? ExpensesType { get; set; }
|
||||
public Guid PaymentModeId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("PaymentModeId")]
|
||||
public PaymentModeMatser? PaymentMode { get; set; }
|
||||
public Guid PaidById { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("PaidById")]
|
||||
public Employee? PaidBy { get; set; }
|
||||
public Guid CreatedById { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("CreatedById")]
|
||||
public Employee? CreatedBy { get; set; }
|
||||
public Guid? ReviewedById { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ReviewedById")]
|
||||
public Employee? ReviewedBy { get; set; }
|
||||
public Guid? ApprovedById { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ApprovedById")]
|
||||
public Employee? ApprovedBy { get; set; }
|
||||
public Guid? ProcessedById { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ProcessedById")]
|
||||
public Employee? ProcessedBy { get; set; }
|
||||
public DateTime TransactionDate { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public string? TransactionId { get; set; }
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string? Location { get; set; }
|
||||
public string? GSTNumber { get; set; }
|
||||
public string SupplerName { get; set; } = string.Empty;
|
||||
public double Amount { get; set; }
|
||||
public int? NoOfPersons { get; set; }
|
||||
public Guid StatusId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("StatusId")]
|
||||
public ExpensesStatusMaster? Status { get; set; }
|
||||
public bool PreApproved { get; set; } = false;
|
||||
public bool IsActive { get; set; } = true;
|
||||
}
|
||||
}
|
20
Marco.Pms.Model/Expenses/ExpensesReimburse.cs
Normal file
20
Marco.Pms.Model/Expenses/ExpensesReimburse.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using Marco.Pms.Model.Employees;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Marco.Pms.Model.Expenses
|
||||
{
|
||||
public class ExpensesReimburse : TenantRelation
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string ReimburseTransactionId { get; set; } = string.Empty;
|
||||
public DateTime ReimburseDate { get; set; }
|
||||
public Guid ReimburseById { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ReimburseById")]
|
||||
public Employee? ReimburseBy { get; set; }
|
||||
public string ReimburseNote { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
21
Marco.Pms.Model/Expenses/ExpensesReimburseMapping.cs
Normal file
21
Marco.Pms.Model/Expenses/ExpensesReimburseMapping.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Marco.Pms.Model.Expenses
|
||||
{
|
||||
public class ExpensesReimburseMapping : TenantRelation
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid ExpensesId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ExpensesId")]
|
||||
public Expenses? Expenses { get; set; }
|
||||
public Guid ExpensesReimburseId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ExpensesReimburseId")]
|
||||
public ExpensesReimburse? ExpensesReimburse { get; set; }
|
||||
}
|
||||
}
|
21
Marco.Pms.Model/Expenses/ExpensesStatusMapping.cs
Normal file
21
Marco.Pms.Model/Expenses/ExpensesStatusMapping.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using Marco.Pms.Model.Master;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Marco.Pms.Model.Expenses
|
||||
{
|
||||
public class ExpensesStatusMapping
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid StatusId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("StatusId")]
|
||||
public ExpensesStatusMaster? Status { get; set; }
|
||||
public Guid NextStatusId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("NextStatusId")]
|
||||
public ExpensesStatusMaster? NextStatus { get; set; }
|
||||
}
|
||||
}
|
22
Marco.Pms.Model/Expenses/StatusPermissionMapping.cs
Normal file
22
Marco.Pms.Model/Expenses/StatusPermissionMapping.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using Marco.Pms.Model.Entitlements;
|
||||
using Marco.Pms.Model.Master;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Marco.Pms.Model.Expenses
|
||||
{
|
||||
public class StatusPermissionMapping
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid StatusId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("StatusId")]
|
||||
public ExpensesStatusMaster? Status { get; set; }
|
||||
public Guid PermissionId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("PermissionId")]
|
||||
public FeaturePermission? Permission { get; set; }
|
||||
}
|
||||
}
|
@ -1,20 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="7.0.20" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.2.0" />
|
||||
<PackageReference Include="MongoDB.Bson" Version="3.0.0" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="7.0.20" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.2.0" />
|
||||
<PackageReference Include="MongoDB.Bson" Version="3.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Marco.Pms.Utility\Marco.Pms.Utility.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Marco.Pms.Utility\Marco.Pms.Utility.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
13
Marco.Pms.Model/Master/ExpensesStatusMaster.cs
Normal file
13
Marco.Pms.Model/Master/ExpensesStatusMaster.cs
Normal file
@ -0,0 +1,13 @@
|
||||
namespace Marco.Pms.Model.Master
|
||||
{
|
||||
public class ExpensesStatusMaster
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string DisplayName { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string Color { get; set; } = string.Empty;
|
||||
public bool IsSystem { get; set; } = false;
|
||||
public bool IsActive { get; set; } = true;
|
||||
}
|
||||
}
|
13
Marco.Pms.Model/Master/ExpensesTypeMaster.cs
Normal file
13
Marco.Pms.Model/Master/ExpensesTypeMaster.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using Marco.Pms.Model.Utilities;
|
||||
|
||||
namespace Marco.Pms.Model.Master
|
||||
{
|
||||
public class ExpensesTypeMaster : TenantRelation
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public bool NoOfPersonsRequired { get; set; }
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public bool IsActive { get; set; } = true;
|
||||
}
|
||||
}
|
12
Marco.Pms.Model/Master/PaymentModeMatser.cs
Normal file
12
Marco.Pms.Model/Master/PaymentModeMatser.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using Marco.Pms.Model.Utilities;
|
||||
|
||||
namespace Marco.Pms.Model.Master
|
||||
{
|
||||
public class PaymentModeMatser : TenantRelation
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public bool IsActive { get; set; } = true;
|
||||
}
|
||||
}
|
11
Marco.Pms.Model/MongoDBModels/DocumentMongoDB.cs
Normal file
11
Marco.Pms.Model/MongoDBModels/DocumentMongoDB.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
{
|
||||
public class DocumentMongoDB
|
||||
{
|
||||
public string DocumentId { get; set; } = string.Empty;
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
public string ContentType { get; set; } = string.Empty;
|
||||
public string S3Key { get; set; } = string.Empty;
|
||||
public string ThumbS3Key { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels.Employees
|
||||
{
|
||||
public class BasicEmployeeMongoDB
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public string? FirstName { get; set; }
|
||||
public string? LastName { get; set; }
|
||||
public byte[]? Photo { get; set; }
|
||||
public string? JobRoleId { get; set; }
|
||||
public string? JobRoleName { get; set; }
|
||||
public string TenantId { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Employees
|
||||
{
|
||||
[BsonIgnoreExtraElements]
|
||||
public class EmployeePermissionMongoDB
|
@ -0,0 +1,35 @@
|
||||
using Marco.Pms.Model.MongoDBModels.Employees;
|
||||
using Marco.Pms.Model.MongoDBModels.Masters;
|
||||
using Marco.Pms.Model.MongoDBModels.Project;
|
||||
|
||||
namespace Marco.Pms.Model.MongoDBModels.Expenses
|
||||
{
|
||||
public class ExpenseDetailsMongoDB
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public ProjectBasicMongoDB Project { get; set; } = new ProjectBasicMongoDB();
|
||||
public ExpensesTypeMasterMongoDB ExpensesType { get; set; } = new ExpensesTypeMasterMongoDB();
|
||||
public PaymentModeMatserMongoDB PaymentMode { get; set; } = new PaymentModeMatserMongoDB();
|
||||
public BasicEmployeeMongoDB PaidBy { get; set; } = new BasicEmployeeMongoDB();
|
||||
public BasicEmployeeMongoDB CreatedBy { get; set; } = new BasicEmployeeMongoDB();
|
||||
public BasicEmployeeMongoDB? ReviewedBy { get; set; }
|
||||
public BasicEmployeeMongoDB? ApprovedBy { get; set; }
|
||||
public BasicEmployeeMongoDB? ProcessedBy { get; set; }
|
||||
public DateTime TransactionDate { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime ExpireAt { get; set; } = DateTime.UtcNow.Date.AddDays(1);
|
||||
public string SupplerName { get; set; } = string.Empty;
|
||||
public double Amount { get; set; }
|
||||
public ExpensesStatusMasterMongoDB Status { get; set; } = new ExpensesStatusMasterMongoDB();
|
||||
public List<ExpensesStatusMasterMongoDB> NextStatus { get; set; } = new List<ExpensesStatusMasterMongoDB>();
|
||||
public bool PreApproved { get; set; } = false;
|
||||
public string? TransactionId { get; set; }
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string? Location { get; set; }
|
||||
public List<DocumentMongoDB> Documents { get; set; } = new List<DocumentMongoDB>();
|
||||
public string? GSTNumber { get; set; }
|
||||
public int? NoOfPersons { get; set; }
|
||||
public bool IsActive { get; set; } = true;
|
||||
public string TenantId { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels.Masters
|
||||
{
|
||||
public class ExpensesStatusMasterMongoDB
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string DisplayName { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
//public List<string> PermissionIds { get; set; } = new List<string>();
|
||||
public string? Color { get; set; }
|
||||
public bool IsSystem { get; set; } = false;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels.Masters
|
||||
{
|
||||
public class ExpensesTypeMasterMongoDB
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public bool NoOfPersonsRequired { get; set; }
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string TenantId { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels.Masters
|
||||
{
|
||||
public class PaymentModeMatserMongoDB
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string TenantId { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Masters
|
||||
{
|
||||
public class StatusMasterMongoDB
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Masters
|
||||
{
|
||||
public class WorkCategoryMasterMongoDB
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Project
|
||||
{
|
||||
public class ActivityMasterMongoDB
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Project
|
||||
{
|
||||
public class BuildingMongoDB
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Project
|
||||
{
|
||||
public class FloorMongoDB
|
||||
{
|
10
Marco.Pms.Model/MongoDBModels/Project/ProjectBasicMongoDB.cs
Normal file
10
Marco.Pms.Model/MongoDBModels/Project/ProjectBasicMongoDB.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels.Project
|
||||
{
|
||||
public class ProjectBasicMongoDB
|
||||
{
|
||||
public string Id { get; set; } = string.Empty;
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string ShortName { get; set; } = string.Empty;
|
||||
public string TenantId { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
using Marco.Pms.Model.MongoDBModels.Masters;
|
||||
|
||||
namespace Marco.Pms.Model.MongoDBModels.Project
|
||||
{
|
||||
public class ProjectMongoDB
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Project
|
||||
{
|
||||
public class WorkAreaInfoMongoDB
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Project
|
||||
{
|
||||
public class WorkAreaMongoDB
|
||||
{
|
@ -1,4 +1,6 @@
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
using Marco.Pms.Model.MongoDBModels.Masters;
|
||||
|
||||
namespace Marco.Pms.Model.MongoDBModels.Project
|
||||
{
|
||||
public class WorkItemMongoDB
|
||||
{
|
@ -1,7 +1,7 @@
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace Marco.Pms.Model.MongoDBModels
|
||||
namespace Marco.Pms.Model.MongoDBModels.Utility
|
||||
{
|
||||
public class ProjectReportEmailMongoDB
|
||||
{
|
15
Marco.Pms.Model/MongoDBModels/Utility/S3DeletionObject.cs
Normal file
15
Marco.Pms.Model/MongoDBModels/Utility/S3DeletionObject.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace Marco.Pms.Model.MongoDBModels.Utility
|
||||
{
|
||||
public class S3DeletionObject
|
||||
{
|
||||
[BsonId]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
public string BucketName { get; set; } = string.Empty;
|
||||
public string Key { get; set; } = string.Empty;
|
||||
public bool Deleted { get; set; } = false;
|
||||
}
|
||||
}
|
16
Marco.Pms.Model/MongoDBModels/Utility/UpdateLogsObject.cs
Normal file
16
Marco.Pms.Model/MongoDBModels/Utility/UpdateLogsObject.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace Marco.Pms.Model.MongoDBModels.Utility
|
||||
{
|
||||
public class UpdateLogsObject
|
||||
{
|
||||
[BsonId]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
public string EntityId { get; set; } = string.Empty;
|
||||
public BsonDocument? OldObject { get; set; }
|
||||
public string UpdatedById { get; set; } = string.Empty;
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
}
|
13
Marco.Pms.Model/Utilities/ExpensesFilter.cs
Normal file
13
Marco.Pms.Model/Utilities/ExpensesFilter.cs
Normal file
@ -0,0 +1,13 @@
|
||||
namespace Marco.Pms.Model.Utilities
|
||||
{
|
||||
public class ExpensesFilter
|
||||
{
|
||||
public List<Guid>? ProjectIds { get; set; }
|
||||
public List<Guid>? StatusIds { get; set; }
|
||||
public List<Guid>? CreatedByIds { get; set; }
|
||||
public List<Guid>? PaidById { get; set; }
|
||||
public bool IsTransactionDate { get; set; } = false;
|
||||
public DateTime? StartDate { get; set; }
|
||||
public DateTime? EndDate { get; set; }
|
||||
}
|
||||
}
|
@ -2,10 +2,12 @@
|
||||
{
|
||||
public class FileUploadModel
|
||||
{
|
||||
public Guid? DocumentId { get; set; }
|
||||
public string? FileName { get; set; } // Name of the file (e.g., "image1.png")
|
||||
public string? Base64Data { get; set; } // Base64-encoded string of the file
|
||||
public string? ContentType { get; set; } // MIME type (e.g., "image/png", "application/pdf")
|
||||
public long FileSize { get; set; } // File size in bytes
|
||||
public string? Description { get; set; } // Optional: Description or purpose of the file
|
||||
public bool IsActive { get; set; } = true;
|
||||
}
|
||||
}
|
||||
|
@ -11,4 +11,12 @@
|
||||
public string ContentType { get; set; } = string.Empty;
|
||||
public DateTime UploadedAt { get; set; }
|
||||
}
|
||||
public class BasicDocumentVM
|
||||
{
|
||||
public Guid DocumentId { get; set; }
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
public string ContentType { get; set; } = string.Empty;
|
||||
public string? PreSignedUrl { get; set; }
|
||||
public string? ThumbPreSignedUrl { get; set; }
|
||||
}
|
||||
}
|
||||
|
36
Marco.Pms.Model/ViewModels/Expenses/ExpenseDetailsVM.cs
Normal file
36
Marco.Pms.Model/ViewModels/Expenses/ExpenseDetailsVM.cs
Normal file
@ -0,0 +1,36 @@
|
||||
using Marco.Pms.Model.ViewModels.Activities;
|
||||
using Marco.Pms.Model.ViewModels.DocumentManager;
|
||||
using Marco.Pms.Model.ViewModels.Master;
|
||||
using Marco.Pms.Model.ViewModels.Projects;
|
||||
|
||||
namespace Marco.Pms.Model.ViewModels.Expenses
|
||||
{
|
||||
public class ExpenseDetailsVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public ProjectInfoVM? Project { get; set; }
|
||||
public ExpensesTypeMasterVM? ExpensesType { get; set; }
|
||||
public PaymentModeMatserVM? PaymentMode { get; set; }
|
||||
public BasicEmployeeVM? PaidBy { get; set; }
|
||||
public BasicEmployeeVM? CreatedBy { get; set; }
|
||||
public BasicEmployeeVM? ReviewedBy { get; set; }
|
||||
public BasicEmployeeVM? ApprovedBy { get; set; }
|
||||
public BasicEmployeeVM? ProcessedBy { get; set; }
|
||||
public DateTime TransactionDate { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public string SupplerName { get; set; } = string.Empty;
|
||||
public double Amount { get; set; }
|
||||
public ExpensesStatusMasterVM? Status { get; set; }
|
||||
public List<ExpensesStatusMasterVM>? NextStatus { get; set; }
|
||||
public bool PreApproved { get; set; } = false;
|
||||
public string? TransactionId { get; set; }
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string? Location { get; set; }
|
||||
public List<BasicDocumentVM> Documents { get; set; } = new List<BasicDocumentVM>();
|
||||
public List<ExpenseLogVM> ExpenseLogs { get; set; } = new List<ExpenseLogVM>();
|
||||
public string? GSTNumber { get; set; }
|
||||
public int? NoOfPersons { get; set; }
|
||||
public bool IsActive { get; set; } = true;
|
||||
public ExpensesReimburseVM ExpensesReimburse { get; set; } = new ExpensesReimburseVM();
|
||||
}
|
||||
}
|
28
Marco.Pms.Model/ViewModels/Expenses/ExpenseList.cs
Normal file
28
Marco.Pms.Model/ViewModels/Expenses/ExpenseList.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using Marco.Pms.Model.ViewModels.Activities;
|
||||
using Marco.Pms.Model.ViewModels.Master;
|
||||
using Marco.Pms.Model.ViewModels.Projects;
|
||||
|
||||
namespace Marco.Pms.Model.ViewModels.Expanses
|
||||
{
|
||||
public class ExpenseList
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public ProjectInfoVM? Project { get; set; }
|
||||
public ExpensesTypeMasterVM? ExpensesType { get; set; }
|
||||
public PaymentModeMatserVM? PaymentMode { get; set; }
|
||||
public BasicEmployeeVM? PaidBy { get; set; }
|
||||
public BasicEmployeeVM? CreatedBy { get; set; }
|
||||
//public BasicEmployeeVM? ReviewedBy { get; set; }
|
||||
//public BasicEmployeeVM? ApprovedBy { get; set; }
|
||||
//public BasicEmployeeVM? ProcessedBy { get; set; }
|
||||
public DateTime TransactionDate { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public string SupplerName { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string TransactionId { get; set; } = string.Empty;
|
||||
public double Amount { get; set; }
|
||||
public ExpensesStatusMasterVM? Status { get; set; }
|
||||
public List<ExpensesStatusMasterVM>? NextStatus { get; set; }
|
||||
public bool PreApproved { get; set; } = false;
|
||||
}
|
||||
}
|
13
Marco.Pms.Model/ViewModels/Expenses/ExpenseLogVM.cs
Normal file
13
Marco.Pms.Model/ViewModels/Expenses/ExpenseLogVM.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using Marco.Pms.Model.ViewModels.Activities;
|
||||
|
||||
namespace Marco.Pms.Model.ViewModels.Expenses
|
||||
{
|
||||
public class ExpenseLogVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public BasicEmployeeVM? UpdatedBy { get; set; }
|
||||
public string Action { get; set; } = string.Empty;
|
||||
public DateTime? UpdateAt { get; set; }
|
||||
public string? Comment { get; set; }
|
||||
}
|
||||
}
|
13
Marco.Pms.Model/ViewModels/Expenses/ExpensesReimburseVM.cs
Normal file
13
Marco.Pms.Model/ViewModels/Expenses/ExpensesReimburseVM.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using Marco.Pms.Model.ViewModels.Activities;
|
||||
|
||||
namespace Marco.Pms.Model.ViewModels.Expenses
|
||||
{
|
||||
public class ExpensesReimburseVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string ReimburseTransactionId { get; set; } = string.Empty;
|
||||
public DateTime ReimburseDate { get; set; }
|
||||
public BasicEmployeeVM? ReimburseBy { get; set; }
|
||||
public string ReimburseNote { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
13
Marco.Pms.Model/ViewModels/Master/ExpensesStatusMasterVM.cs
Normal file
13
Marco.Pms.Model/ViewModels/Master/ExpensesStatusMasterVM.cs
Normal file
@ -0,0 +1,13 @@
|
||||
namespace Marco.Pms.Model.ViewModels.Master
|
||||
{
|
||||
public class ExpensesStatusMasterVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string DisplayName { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public List<Guid>? PermissionIds { get; set; }
|
||||
public string? Color { get; set; }
|
||||
public bool IsSystem { get; set; } = false;
|
||||
}
|
||||
}
|
10
Marco.Pms.Model/ViewModels/Master/ExpensesTypeMasterVM.cs
Normal file
10
Marco.Pms.Model/ViewModels/Master/ExpensesTypeMasterVM.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace Marco.Pms.Model.ViewModels.Master
|
||||
{
|
||||
public class ExpensesTypeMasterVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public bool NoOfPersonsRequired { get; set; }
|
||||
public string Description { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
9
Marco.Pms.Model/ViewModels/Master/PaymentModeMatserVM.cs
Normal file
9
Marco.Pms.Model/ViewModels/Master/PaymentModeMatserVM.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace Marco.Pms.Model.ViewModels.Master
|
||||
{
|
||||
public class PaymentModeMatserVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -74,7 +74,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
foreach (var attendanceLog in lstAttendance)
|
||||
{
|
||||
string objectKey = attendanceLog.Document != null ? attendanceLog.Document.S3Key : string.Empty;
|
||||
string preSignedUrl = string.IsNullOrEmpty(objectKey) ? string.Empty : _s3Service.GeneratePreSignedUrlAsync(objectKey);
|
||||
string preSignedUrl = string.IsNullOrEmpty(objectKey) ? string.Empty : _s3Service.GeneratePreSignedUrl(objectKey);
|
||||
attendanceLogVMs.Add(attendanceLog.ToAttendanceLogVMFromAttendanceLog(preSignedUrl, preSignedUrl));
|
||||
}
|
||||
_logger.LogInfo("{count} Attendance records fetched successfully", lstAttendance.Count);
|
||||
@ -708,7 +708,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
var objectKey = $"tenant-{tenantId}/Employee/{recordAttendanceDot.EmployeeID}/Attendance/{fileName}";
|
||||
|
||||
await _s3Service.UploadFileAsync(base64, fileType, objectKey);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(objectKey);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrl(objectKey);
|
||||
|
||||
document = new Document
|
||||
{
|
||||
|
@ -750,7 +750,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
.FirstOrDefaultAsync(e => e.Id == generateMPINDto.EmployeeId && e.TenantId == tenantId);
|
||||
|
||||
// Validate employee and MPIN input
|
||||
if (requestEmployee == null || string.IsNullOrWhiteSpace(generateMPINDto.MPIN) || generateMPINDto.MPIN.Length != 6 || !generateMPINDto.MPIN.All(char.IsDigit))
|
||||
if (requestEmployee == null || string.IsNullOrWhiteSpace(generateMPINDto.MPIN) || generateMPINDto.MPIN.Length != 4 || !generateMPINDto.MPIN.All(char.IsDigit))
|
||||
{
|
||||
_logger.LogWarning("Employee {EmployeeId} provided invalid information to generate MPIN", loggedInEmployee.Id);
|
||||
return BadRequest(ApiResponse<object>.ErrorResponse("Provided invalid information", "Provided invalid information", 400));
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Marco.Pms.DataAccess.Data;
|
||||
using AutoMapper;
|
||||
using Marco.Pms.DataAccess.Data;
|
||||
using Marco.Pms.Model.Dtos.Attendance;
|
||||
using Marco.Pms.Model.Dtos.Employees;
|
||||
using Marco.Pms.Model.Employees;
|
||||
@ -6,6 +7,7 @@ using Marco.Pms.Model.Entitlements;
|
||||
using Marco.Pms.Model.Mapper;
|
||||
using Marco.Pms.Model.Projects;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Marco.Pms.Model.ViewModels.Activities;
|
||||
using Marco.Pms.Model.ViewModels.Employee;
|
||||
using Marco.Pms.Services.Hubs;
|
||||
using Marco.Pms.Services.Service;
|
||||
@ -38,13 +40,14 @@ namespace MarcoBMS.Services.Controllers
|
||||
private readonly ILoggingService _logger;
|
||||
private readonly IHubContext<MarcoHub> _signalR;
|
||||
private readonly PermissionServices _permission;
|
||||
private readonly IMapper _mapper;
|
||||
private readonly IProjectServices _projectServices;
|
||||
private readonly Guid tenantId;
|
||||
|
||||
|
||||
public EmployeeController(UserManager<ApplicationUser> userManager, IEmailSender emailSender,
|
||||
ApplicationDbContext context, EmployeeHelper employeeHelper, UserHelper userHelper, IConfiguration configuration, ILoggingService logger,
|
||||
IHubContext<MarcoHub> signalR, PermissionServices permission, IProjectServices projectServices)
|
||||
IHubContext<MarcoHub> signalR, PermissionServices permission, IProjectServices projectServices, IMapper mapper)
|
||||
{
|
||||
_context = context;
|
||||
_userManager = userManager;
|
||||
@ -56,6 +59,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
_signalR = signalR;
|
||||
_permission = permission;
|
||||
_projectServices = projectServices;
|
||||
_mapper = mapper;
|
||||
tenantId = _userHelper.GetTenantId();
|
||||
}
|
||||
|
||||
@ -162,6 +166,31 @@ namespace MarcoBMS.Services.Controllers
|
||||
return Ok(ApiResponse<object>.SuccessResponse(result, "Filter applied.", 200));
|
||||
}
|
||||
|
||||
[HttpGet("basic")]
|
||||
public async Task<IActionResult> GetEmployeesByProjectBasic(Guid? projectId, [FromQuery] string? searchString)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var employeeQuery = _context.Employees.Where(e => e.TenantId == tenantId);
|
||||
if (projectId != null && projectId != Guid.Empty)
|
||||
{
|
||||
var hasProjectPermission = await _permission.HasProjectPermission(loggedInEmployee, projectId.Value);
|
||||
if (!hasProjectPermission)
|
||||
{
|
||||
_logger.LogWarning("User {EmployeeId} attempts to get employee for project {ProjectId}, but not have access to the project", loggedInEmployee.Id, projectId);
|
||||
return StatusCode(403, ApiResponse<object>.ErrorResponse("Access denied", "User do not have access to view the list for this project", 403));
|
||||
}
|
||||
var employeeIds = await _context.ProjectAllocations.Where(pa => pa.ProjectId == projectId && pa.IsActive && pa.TenantId == tenantId).Select(p => p.EmployeeId).ToListAsync();
|
||||
employeeQuery = employeeQuery.Where(e => employeeIds.Contains(e.Id));
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(searchString))
|
||||
{
|
||||
var searchStringLower = searchString.ToLower();
|
||||
employeeQuery = employeeQuery.Where(e => (e.FirstName + " " + e.LastName).ToLower().Contains(searchStringLower));
|
||||
}
|
||||
|
||||
var response = await employeeQuery.Take(10).Select(e => _mapper.Map<BasicEmployeeVM>(e)).ToListAsync();
|
||||
return Ok(ApiResponse<object>.SuccessResponse(response, $"{response.Count} records of employees fetched successfully", 200));
|
||||
}
|
||||
[HttpGet]
|
||||
[Route("search/{name}/{projectid?}")]
|
||||
public async Task<IActionResult> SearchEmployee(string name, Guid? projectid)
|
||||
|
126
Marco.Pms.Services/Controllers/ExpenseController.cs
Normal file
126
Marco.Pms.Services/Controllers/ExpenseController.cs
Normal file
@ -0,0 +1,126 @@
|
||||
using Marco.Pms.Model.Dtos.Expenses;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Marco.Pms.Services.Service.ServiceInterfaces;
|
||||
using MarcoBMS.Services.Helpers;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
|
||||
namespace Marco.Pms.Services.Controllers
|
||||
{
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
[Authorize]
|
||||
public class ExpenseController : ControllerBase
|
||||
{
|
||||
private readonly UserHelper _userHelper;
|
||||
private readonly IExpensesService _expensesService;
|
||||
private readonly ISignalRService _signalR;
|
||||
private readonly Guid tenantId;
|
||||
public ExpenseController(
|
||||
UserHelper userHelper,
|
||||
IExpensesService expensesService,
|
||||
ISignalRService signalR
|
||||
)
|
||||
{
|
||||
_userHelper = userHelper;
|
||||
_expensesService = expensesService;
|
||||
_signalR = signalR;
|
||||
tenantId = userHelper.GetTenantId();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves a paginated list of expenses based on user permissions and optional filters.
|
||||
/// </summary>
|
||||
/// <param name="filter">A URL-encoded JSON string containing filter criteria. See <see cref="ExpensesFilter"/>.</param>
|
||||
/// <param name="pageSize">The number of records to return per page.</param>
|
||||
/// <param name="pageNumber">The page number to retrieve.</param>
|
||||
/// <returns>A paginated list of expenses.</returns>
|
||||
|
||||
[HttpGet("list")]
|
||||
public async Task<IActionResult> GetExpensesList([FromQuery] string? searchString, [FromQuery] string? filter, [FromQuery] int pageSize = 20, [FromQuery] int pageNumber = 1)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.GetExpensesListAsync(loggedInEmployee, tenantId, searchString, filter, pageSize, pageNumber);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpGet("details/{id}")]
|
||||
public async Task<IActionResult> GetExpenseDetails(Guid id)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.GetExpenseDetailsAsync(id, loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpGet("suppler-name")]
|
||||
public async Task<IActionResult> GetSupplerNameList()
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.GetSupplerNameListAsync(loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpGet("filter")]
|
||||
public async Task<IActionResult> GetFilterObject()
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.GetFilterObjectAsync(loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpPost("create")]
|
||||
public async Task<IActionResult> CreateExpense([FromBody] CreateExpensesDto model)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.CreateExpenseAsync(model, loggedInEmployee, tenantId);
|
||||
if (response.Success)
|
||||
{
|
||||
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Expanse", Response = response.Data };
|
||||
await _signalR.SendNotificationAsync(notification);
|
||||
}
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpPost("action")]
|
||||
public async Task<IActionResult> ChangeStatus([FromBody] ExpenseRecordDto model)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.ChangeStatusAsync(model, loggedInEmployee, tenantId);
|
||||
if (response.Success)
|
||||
{
|
||||
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Expanse", Response = response.Data };
|
||||
await _signalR.SendNotificationAsync(notification);
|
||||
}
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpPut("edit/{id}")]
|
||||
public async Task<IActionResult> UpdateExpanse(Guid id, [FromBody] UpdateExpensesDto model)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.UpdateExpanseAsync(id, model, loggedInEmployee, tenantId);
|
||||
if (response.Success)
|
||||
{
|
||||
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Expanse", Response = response.Data };
|
||||
await _signalR.SendNotificationAsync(notification);
|
||||
}
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpDelete("delete/{id}")]
|
||||
public async Task<IActionResult> DeleteExpanse(Guid id)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.DeleteExpanseAsync(id, loggedInEmployee, tenantId);
|
||||
if (response.Success)
|
||||
{
|
||||
var notification = new { LoggedInUserId = loggedInEmployee.Id, Keyword = "Expanse", Response = response.Data };
|
||||
await _signalR.SendNotificationAsync(notification);
|
||||
}
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -129,7 +129,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
string preSignedUrl = string.Empty;
|
||||
if (document != null)
|
||||
{
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrl(document.S3Key);
|
||||
}
|
||||
attachmentVMs.Add(attachment.ToTicketAttachmentVMFromTicketAttachment(preSignedUrl, preSignedUrl));
|
||||
}
|
||||
@ -301,7 +301,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
string preSignedUrl = string.Empty;
|
||||
if (document != null)
|
||||
{
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrl(document.S3Key);
|
||||
}
|
||||
if (attachment.CommentId == null)
|
||||
{
|
||||
@ -418,7 +418,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
string preSignedUrl = string.Empty;
|
||||
if (document != null)
|
||||
{
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrl(document.S3Key);
|
||||
}
|
||||
attachmentVMs.Add(attachment.ToTicketAttachmentVMFromTicketAttachment(preSignedUrl, preSignedUrl));
|
||||
}
|
||||
@ -532,7 +532,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
string preSignedUrl = string.Empty;
|
||||
if (document != null)
|
||||
{
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrl(document.S3Key);
|
||||
}
|
||||
attachmentVMs.Add(attachment.ToTicketAttachmentVMFromTicketAttachment(preSignedUrl, preSignedUrl));
|
||||
}
|
||||
@ -606,7 +606,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
_context.TicketAttachments.Add(attachment);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
string preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key);
|
||||
string preSignedUrl = _s3Service.GeneratePreSignedUrl(document.S3Key);
|
||||
|
||||
TicketAttachmentVM attachmentVM = attachment.ToTicketAttachmentVMFromTicketAttachment(preSignedUrl, preSignedUrl);
|
||||
ticketAttachmentVMs.Add(attachmentVM);
|
||||
@ -671,7 +671,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
string preSignedUrl = string.Empty;
|
||||
if (document != null)
|
||||
{
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrl(document.S3Key);
|
||||
}
|
||||
if (attachment.CommentId == null)
|
||||
{
|
||||
@ -749,7 +749,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
string preSignedUrl = string.Empty;
|
||||
if (document != null)
|
||||
{
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrl(document.S3Key);
|
||||
}
|
||||
if (attachment.CommentId == null)
|
||||
{
|
||||
@ -851,7 +851,7 @@ namespace Marco.Pms.Services.Controllers
|
||||
string preSignedUrl = string.Empty;
|
||||
if (document != null)
|
||||
{
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key);
|
||||
preSignedUrl = _s3Service.GeneratePreSignedUrl(document.S3Key);
|
||||
}
|
||||
if (attachment.CommentId == null)
|
||||
{
|
||||
|
@ -220,8 +220,8 @@ namespace Marco.Pms.Services.Controllers
|
||||
Documents = d.Documents?.Select(x => new
|
||||
{
|
||||
Id = x.Id,
|
||||
thumbnailUrl = x.ThumbS3Key != null ? _s3Service.GeneratePreSignedUrlAsync(x.ThumbS3Key) : (x.S3Key != null ? _s3Service.GeneratePreSignedUrlAsync(x.S3Key) : null),
|
||||
Url = x.S3Key != null ? _s3Service.GeneratePreSignedUrlAsync(x.S3Key) : null,
|
||||
thumbnailUrl = x.ThumbS3Key != null ? _s3Service.GeneratePreSignedUrl(x.ThumbS3Key) : (x.S3Key != null ? _s3Service.GeneratePreSignedUrl(x.S3Key) : null),
|
||||
Url = x.S3Key != null ? _s3Service.GeneratePreSignedUrl(x.S3Key) : null,
|
||||
UploadedBy = x.UploadedBy?.ToBasicEmployeeVMFromEmployee() ?? uploadedBy?.ToBasicEmployeeVMFromEmployee(),
|
||||
UploadedAt = x.UploadedAt,
|
||||
}).ToList(),
|
||||
@ -334,8 +334,8 @@ namespace Marco.Pms.Services.Controllers
|
||||
Documents = documents?.Select(x => new
|
||||
{
|
||||
Id = x.Id,
|
||||
thumbnailUrl = x.ThumbS3Key != null ? _s3Service.GeneratePreSignedUrlAsync(x.ThumbS3Key) : (x.S3Key != null ? _s3Service.GeneratePreSignedUrlAsync(x.S3Key) : null),
|
||||
Url = x.S3Key != null ? _s3Service.GeneratePreSignedUrlAsync(x.S3Key) : null,
|
||||
thumbnailUrl = x.ThumbS3Key != null ? _s3Service.GeneratePreSignedUrl(x.ThumbS3Key) : (x.S3Key != null ? _s3Service.GeneratePreSignedUrl(x.S3Key) : null),
|
||||
Url = x.S3Key != null ? _s3Service.GeneratePreSignedUrl(x.S3Key) : null,
|
||||
UploadedBy = x.UploadedBy?.ToBasicEmployeeVMFromEmployee() ?? uploadedBy?.ToBasicEmployeeVMFromEmployee(),
|
||||
UploadedAt = x.UploadedAt,
|
||||
}).ToList(),
|
||||
@ -382,11 +382,11 @@ namespace Marco.Pms.Services.Controllers
|
||||
|
||||
// Step 4: Generate pre-signed URLs for thumbnail and full image (if keys exist)
|
||||
string? thumbnailUrl = document.ThumbS3Key != null
|
||||
? _s3Service.GeneratePreSignedUrlAsync(document.ThumbS3Key)
|
||||
? _s3Service.GeneratePreSignedUrl(document.ThumbS3Key)
|
||||
: null;
|
||||
|
||||
string? imageUrl = document.S3Key != null
|
||||
? _s3Service.GeneratePreSignedUrlAsync(document.S3Key)
|
||||
? _s3Service.GeneratePreSignedUrl(document.S3Key)
|
||||
: null;
|
||||
|
||||
// Step 5: Prepare the response object
|
||||
|
@ -10,6 +10,7 @@ using Marco.Pms.Model.ViewModels.Activities;
|
||||
using Marco.Pms.Model.ViewModels.Forum;
|
||||
using Marco.Pms.Model.ViewModels.Master;
|
||||
using Marco.Pms.Services.Helpers;
|
||||
using Marco.Pms.Services.Service.ServiceInterfaces;
|
||||
using MarcoBMS.Services.Helpers;
|
||||
using MarcoBMS.Services.Service;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
@ -27,15 +28,20 @@ namespace Marco.Pms.Services.Controllers
|
||||
private readonly UserHelper _userHelper;
|
||||
private readonly ILoggingService _logger;
|
||||
private readonly MasterHelper _masterHelper;
|
||||
public MasterController(ApplicationDbContext context, UserHelper userHelper, ILoggingService logger, MasterHelper masterHelper)
|
||||
private readonly IMasterService _masterService;
|
||||
private readonly Guid tenantId;
|
||||
public MasterController(ApplicationDbContext context, UserHelper userHelper, ILoggingService logger, MasterHelper masterHelper, IMasterService masterService)
|
||||
{
|
||||
_context = context;
|
||||
_userHelper = userHelper;
|
||||
_logger = logger;
|
||||
_masterHelper = masterHelper;
|
||||
_masterService = masterService;
|
||||
tenantId = userHelper.GetTenantId();
|
||||
}
|
||||
|
||||
// -------------------------------- Activity --------------------------------
|
||||
#region =================================================================== Activity APIs ===================================================================
|
||||
|
||||
[HttpGet]
|
||||
[Route("activities")]
|
||||
public async Task<IActionResult> GetActivitiesMaster()
|
||||
@ -186,7 +192,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
return Ok(ApiResponse<object>.SuccessResponse(new { }, "Activity Deleted Successfully", 200));
|
||||
}
|
||||
|
||||
// -------------------------------- Industry --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Industry APIs ===================================================================
|
||||
|
||||
[HttpGet]
|
||||
[Route("industries")]
|
||||
@ -199,7 +207,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
return Ok(ApiResponse<object>.SuccessResponse(industries, System.String.Format("{0} industry records fetched successfully", industries.Count), 200));
|
||||
}
|
||||
|
||||
// -------------------------------- Ticket Status --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Ticket Status APIs ===================================================================
|
||||
|
||||
[HttpGet("ticket-status")]
|
||||
public async Task<IActionResult> GetTicketStatusMaster()
|
||||
@ -286,7 +296,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------- Ticket Type --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Ticket Type APIs ===================================================================
|
||||
|
||||
[HttpGet("ticket-types")]
|
||||
public async Task<IActionResult> GetTicketTypeMaster()
|
||||
@ -374,7 +386,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------- Ticket Priority --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Ticket Priority APIs ===================================================================
|
||||
|
||||
[HttpGet("ticket-priorities")]
|
||||
public async Task<IActionResult> GetTicketPriorityMaster()
|
||||
@ -462,7 +476,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------- Ticket Tag --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Ticket Tag APIs ===================================================================
|
||||
|
||||
[HttpGet("ticket-tags")]
|
||||
public async Task<IActionResult> GetTicketTagMaster()
|
||||
@ -550,7 +566,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------- Work Category --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Work Category APIs ===================================================================
|
||||
|
||||
[HttpGet("work-categories")]
|
||||
public async Task<IActionResult> GetWorkCategoryMasterList()
|
||||
@ -671,7 +689,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------- Work Status --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Work Status APIs ===================================================================
|
||||
|
||||
[HttpGet("work-status")]
|
||||
public async Task<IActionResult> GetWorkStatusMasterList()
|
||||
@ -710,7 +730,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
// -------------------------------- Contact Category --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Contact Category APIs ===================================================================
|
||||
|
||||
[HttpGet("contact-categories")]
|
||||
public async Task<IActionResult> GetContactCategoryMasterList()
|
||||
@ -779,7 +801,9 @@ namespace Marco.Pms.Services.Controllers
|
||||
return Ok(response);
|
||||
}
|
||||
|
||||
// -------------------------------- Contact Tag --------------------------------
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Contact Tag APIs ===================================================================
|
||||
|
||||
[HttpGet("contact-tags")]
|
||||
public async Task<IActionResult> GetContactTagMasterList()
|
||||
@ -788,12 +812,6 @@ namespace Marco.Pms.Services.Controllers
|
||||
return Ok(response);
|
||||
}
|
||||
|
||||
//[HttpGet("contact-tag/{id}")]
|
||||
//public async Task<IActionResult> GetContactTagMaster(Guid id)
|
||||
//{
|
||||
// return Ok();
|
||||
//}
|
||||
|
||||
[HttpPost("contact-tag")]
|
||||
public async Task<IActionResult> CreateContactTagMaster([FromBody] CreateContactTagDto contactTagDto)
|
||||
{
|
||||
@ -846,5 +864,90 @@ namespace Marco.Pms.Services.Controllers
|
||||
var response = await _masterHelper.DeleteContactTag(id);
|
||||
return Ok(response);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Expenses Type APIs ===================================================================
|
||||
|
||||
[HttpGet("expenses-types")]
|
||||
public async Task<IActionResult> GetExpenseTypeList([FromQuery] bool isActive = true)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.GetExpenseTypeListAsync(loggedInEmployee, tenantId, isActive);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpPost("expenses-type")]
|
||||
public async Task<IActionResult> CreateExpenseType([FromBody] ExpensesTypeMasterDto dto)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.CreateExpenseTypeAsync(dto, loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpPut("expenses-type/edit/{id}")]
|
||||
public async Task<IActionResult> UpdateExpenseType(Guid id, [FromBody] ExpensesTypeMasterDto dto)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.UpdateExpenseTypeAsync(id, dto, loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpDelete("expenses-type/delete/{id}")]
|
||||
public async Task<IActionResult> DeleteExpenseType(Guid id, [FromQuery] bool isActive = false)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.DeleteExpenseTypeAsync(id, isActive, loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Expenses Status APIs ===================================================================
|
||||
|
||||
[HttpGet("expenses-status")]
|
||||
public async Task<IActionResult> GetExpensesStatusList([FromQuery] bool isActive = true)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.GetExpensesStatusListAsync(loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Payment mode APIs ===================================================================
|
||||
|
||||
[HttpGet("payment-modes")]
|
||||
public async Task<IActionResult> GetPaymentModeList([FromQuery] bool isActive = true)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.GetPaymentModeListAsync(loggedInEmployee, tenantId, isActive);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpPost("payment-mode")]
|
||||
public async Task<IActionResult> CreatePaymentMode([FromBody] PaymentModeMatserDto dto)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.CreatePaymentModeAsync(dto, loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpPut("payment-mode/edit/{id}")]
|
||||
public async Task<IActionResult> UpdatePaymentMode(Guid id, [FromBody] PaymentModeMatserDto dto)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.UpdatePaymentModeAsync(id, dto, loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpDelete("payment-mode/delete/{id}")]
|
||||
public async Task<IActionResult> DeletePaymentMode(Guid id, [FromQuery] bool isActive = false)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _masterService.DeletePaymentModeAsync(id, isActive, loggedInEmployee, tenantId);
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
using Marco.Pms.DataAccess.Data;
|
||||
using Marco.Pms.Model.Dtos.Mail;
|
||||
using Marco.Pms.Model.Mail;
|
||||
using Marco.Pms.Model.MongoDBModels;
|
||||
using Marco.Pms.Model.MongoDBModels.Utility;
|
||||
using Marco.Pms.Model.Utilities;
|
||||
using Marco.Pms.Services.Helpers;
|
||||
using MarcoBMS.Services.Helpers;
|
||||
|
@ -230,8 +230,8 @@ namespace MarcoBMS.Services.Controllers
|
||||
: image.Base64Data;
|
||||
|
||||
var fileType = _s3Service.GetContentTypeFromBase64(base64);
|
||||
var fileName = _s3Service.GenerateFileName(fileType, tenantId, "task_report");
|
||||
var objectKey = $"tenant-{tenantId}/project-{projectId}/Actitvity/{fileName}";
|
||||
var fileName = _s3Service.GenerateFileName(fileType, taskAllocation.Id, "task_report");
|
||||
var objectKey = $"tenant-{tenantId}/project-{projectId}/Activity/{fileName}";
|
||||
|
||||
await _s3Service.UploadFileAsync(base64, fileType, objectKey);
|
||||
|
||||
@ -336,7 +336,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
: image.Base64Data;
|
||||
|
||||
var fileType = _s3Service.GetContentTypeFromBase64(base64);
|
||||
var fileName = _s3Service.GenerateFileName(fileType, tenantId, "task_comment");
|
||||
var fileName = _s3Service.GenerateFileName(fileType, comment.Id, "task_comment");
|
||||
var objectKey = $"tenant-{tenantId}/project-{projectId}/Activity/{fileName}";
|
||||
|
||||
await _s3Service.UploadFileAsync(base64, fileType, objectKey);
|
||||
@ -499,7 +499,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
.ToList();
|
||||
|
||||
response.ReportedPreSignedUrls = taskDocs
|
||||
.Select(d => _s3Service.GeneratePreSignedUrlAsync(d.S3Key))
|
||||
.Select(d => _s3Service.GeneratePreSignedUrl(d.S3Key))
|
||||
.ToList();
|
||||
|
||||
// Add team members
|
||||
@ -532,7 +532,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
|
||||
var commentVm = comment.ToCommentVMFromTaskComment();
|
||||
commentVm.PreSignedUrls = commentDocs
|
||||
.Select(d => _s3Service.GeneratePreSignedUrlAsync(d.S3Key))
|
||||
.Select(d => _s3Service.GeneratePreSignedUrl(d.S3Key))
|
||||
.ToList();
|
||||
|
||||
commentVMs.Add(commentVm);
|
||||
@ -649,7 +649,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
.ToList();
|
||||
|
||||
taskVM.PreSignedUrls = taskDocuments
|
||||
.Select(d => _s3Service.GeneratePreSignedUrlAsync(d.S3Key))
|
||||
.Select(d => _s3Service.GeneratePreSignedUrl(d.S3Key))
|
||||
.ToList();
|
||||
|
||||
// Construct CommentVM list with document URLs
|
||||
@ -667,7 +667,7 @@ namespace MarcoBMS.Services.Controllers
|
||||
|
||||
var commentVM = comment.ToCommentVMFromTaskComment();
|
||||
commentVM.PreSignedUrls = commentDocs
|
||||
.Select(d => _s3Service.GeneratePreSignedUrlAsync(d.S3Key))
|
||||
.Select(d => _s3Service.GeneratePreSignedUrl(d.S3Key))
|
||||
.ToList();
|
||||
|
||||
return commentVM;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user