Added new status and change expesne status from tenant scop to system scope
This commit is contained in:
parent
388979ef82
commit
d28f37714f
@ -397,8 +397,7 @@ namespace Marco.Pms.DataAccess.Data
|
|||||||
Description = "Expense has been created but not yet submitted.",
|
Description = "Expense has been created but not yet submitted.",
|
||||||
Color = "#8592a3",
|
Color = "#8592a3",
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
IsActive = true,
|
IsActive = true
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new ExpensesStatusMaster
|
new ExpensesStatusMaster
|
||||||
{
|
{
|
||||||
@ -408,8 +407,17 @@ namespace Marco.Pms.DataAccess.Data
|
|||||||
Description = "Reviewer is currently reviewing the expense.",
|
Description = "Reviewer is currently reviewing the expense.",
|
||||||
Color = "#696cff",
|
Color = "#696cff",
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
IsActive = true,
|
IsActive = true
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
},
|
||||||
|
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
|
new ExpensesStatusMaster
|
||||||
{
|
{
|
||||||
@ -419,19 +427,17 @@ namespace Marco.Pms.DataAccess.Data
|
|||||||
Description = "Review is completed, waiting for action of approver.",
|
Description = "Review is completed, waiting for action of approver.",
|
||||||
Color = "#03c3ec",
|
Color = "#03c3ec",
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
IsActive = true,
|
IsActive = true
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new ExpensesStatusMaster
|
new ExpensesStatusMaster
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
Id = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
||||||
Name = "Rejected",
|
Name = "Rejected by Approver",
|
||||||
DisplayName = "Reject",
|
DisplayName = "Reject",
|
||||||
Description = "Expense was declined, often with a reason(either review rejected or approval rejected.",
|
Description = "Expense was declined, often with a reason(approval rejected).",
|
||||||
Color = "#ff3e1d",
|
Color = "#ff3e1d",
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
IsActive = true,
|
IsActive = true
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new ExpensesStatusMaster
|
new ExpensesStatusMaster
|
||||||
{
|
{
|
||||||
@ -441,19 +447,17 @@ namespace Marco.Pms.DataAccess.Data
|
|||||||
Description = "Approved expense is awaiting final payment.",
|
Description = "Approved expense is awaiting final payment.",
|
||||||
Color = "#ffab00",
|
Color = "#ffab00",
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
IsActive = true,
|
IsActive = true
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new ExpensesStatusMaster
|
new ExpensesStatusMaster
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95"),
|
Id = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95"),
|
||||||
Name = "Paid",
|
Name = "Processed",
|
||||||
DisplayName = "Mark as Paid",
|
DisplayName = "Mark as Processed",
|
||||||
Description = "Expense has been settled.",
|
Description = "Expense has been settled.",
|
||||||
Color = "#71dd37",
|
Color = "#71dd37",
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
IsActive = true,
|
IsActive = true
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -463,99 +467,108 @@ namespace Marco.Pms.DataAccess.Data
|
|||||||
{
|
{
|
||||||
Id = Guid.Parse("5cf7f1df-9d1f-4289-add0-1775ad614f25"),
|
Id = Guid.Parse("5cf7f1df-9d1f-4289-add0-1775ad614f25"),
|
||||||
StatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
StatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
||||||
NextStatusId = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95"),
|
NextStatusId = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
// Approve to Rejected
|
// 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
|
new ExpensesStatusMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("36c00548-241c-43ec-bc95-cacebedb925c"),
|
Id = Guid.Parse("36c00548-241c-43ec-bc95-cacebedb925c"),
|
||||||
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
||||||
NextStatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
NextStatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
// Approve to Process
|
// Approve to Process
|
||||||
new ExpensesStatusMapping
|
new ExpensesStatusMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("1fca1700-1266-477d-bba4-9ac3753aa33c"),
|
Id = Guid.Parse("1fca1700-1266-477d-bba4-9ac3753aa33c"),
|
||||||
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
||||||
NextStatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
NextStatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
// Rejected to Review
|
// Rejected by Reviewer to Review
|
||||||
new ExpensesStatusMapping
|
new ExpensesStatusMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("75bbda6a-6a53-47d1-ad71-5f5f9446a11e"),
|
Id = Guid.Parse("9e2ec648-1ca2-4747-9329-e911b18edb3e"),
|
||||||
StatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
StatusId = Guid.Parse("965eda62-7907-4963-b4a1-657fb0b2724b"),
|
||||||
NextStatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
NextStatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
// Review to Rejected
|
// Review to Rejected by Reviewer
|
||||||
new ExpensesStatusMapping
|
new ExpensesStatusMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("fddaaf20-4ccc-4f4e-a724-dd310272b356"),
|
Id = Guid.Parse("6b867bec-66e6-42a7-9611-f4595af9b9ce"),
|
||||||
StatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
StatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||||
NextStatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
NextStatusId = Guid.Parse("965eda62-7907-4963-b4a1-657fb0b2724b")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
// Review to Aprrove
|
// Review to Aprrove
|
||||||
new ExpensesStatusMapping
|
new ExpensesStatusMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("ef1fcfbc-60e0-4f17-9308-c583a05d48fd"),
|
Id = Guid.Parse("ef1fcfbc-60e0-4f17-9308-c583a05d48fd"),
|
||||||
StatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
StatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||||
NextStatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
NextStatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
// Draft to Review
|
// Draft to Review
|
||||||
new ExpensesStatusMapping
|
new ExpensesStatusMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("af1e4492-98ee-4451-8ab7-fd8323f29c32"),
|
Id = Guid.Parse("af1e4492-98ee-4451-8ab7-fd8323f29c32"),
|
||||||
StatusId = Guid.Parse("297e0d8f-f668-41b5-bfea-e03b354251c8"),
|
StatusId = Guid.Parse("297e0d8f-f668-41b5-bfea-e03b354251c8"),
|
||||||
NextStatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
NextStatusId = Guid.Parse("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
modelBuilder.Entity<StatusPermissionMapping>().HasData(
|
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
|
// Approval Pending Permission Mapping
|
||||||
new StatusPermissionMapping
|
new StatusPermissionMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("ed893799-1a5f-4311-a077-de93c86ca8fd"),
|
Id = Guid.Parse("0b7926fc-a34b-4a5b-8c7d-1003480cf0fa"),
|
||||||
PermissionId = Guid.Parse("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
PermissionId = Guid.Parse("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
||||||
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
StatusId = Guid.Parse("4068007f-c92f-4f37-a907-bc15fe57d4d8")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
|
||||||
// Rejected Permission Mapping
|
|
||||||
new StatusPermissionMapping
|
|
||||||
{
|
|
||||||
Id = Guid.Parse("4652d73f-fc71-4fe1-9f2f-1e48b342d741"),
|
|
||||||
PermissionId = Guid.Parse("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
|
||||||
StatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
|
// Rejected by Approver Permission Mapping
|
||||||
new StatusPermissionMapping
|
new StatusPermissionMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("cd15f9b9-be45-4deb-9c71-2f23f872dbcd"),
|
Id = Guid.Parse("cd15f9b9-be45-4deb-9c71-2f23f872dbcd"),
|
||||||
PermissionId = Guid.Parse("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
PermissionId = Guid.Parse("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
||||||
StatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
StatusId = Guid.Parse("d1ee5eec-24b6-4364-8673-a8f859c60729")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
// Process Pending Permission Mapping
|
// Payment Pending Permission Mapping
|
||||||
new StatusPermissionMapping
|
new StatusPermissionMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("f6f26b2f-2fa6-40b7-8601-cbd4bcdda0cc"),
|
Id = Guid.Parse("f6f26b2f-2fa6-40b7-8601-cbd4bcdda0cc"),
|
||||||
PermissionId = Guid.Parse("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
PermissionId = Guid.Parse("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
||||||
StatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
StatusId = Guid.Parse("f18c5cfd-7815-4341-8da2-2c2d65778e27")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
// Processed Permission Mapping
|
// Processed Permission Mapping
|
||||||
new StatusPermissionMapping
|
new StatusPermissionMapping
|
||||||
{
|
{
|
||||||
Id = Guid.Parse("214354e5-daad-4569-ad69-eb5bf4e87fbc"),
|
Id = Guid.Parse("214354e5-daad-4569-ad69-eb5bf4e87fbc"),
|
||||||
PermissionId = Guid.Parse("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"),
|
PermissionId = Guid.Parse("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"),
|
||||||
StatusId = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95"),
|
StatusId = Guid.Parse("61578360-3a49-4c34-8604-7b35a3787b95")
|
||||||
TenantId = Guid.Parse("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity<ExpensesTypeMaster>().HasData(
|
modelBuilder.Entity<ExpensesTypeMaster>().HasData(
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1330,6 +1330,9 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
b.Property<double>("Amount")
|
b.Property<double>("Amount")
|
||||||
.HasColumnType("double");
|
.HasColumnType("double");
|
||||||
|
|
||||||
|
b.Property<Guid?>("ApprovedById")
|
||||||
|
.HasColumnType("char(36)");
|
||||||
|
|
||||||
b.Property<DateTime>("CreatedAt")
|
b.Property<DateTime>("CreatedAt")
|
||||||
.HasColumnType("datetime(6)");
|
.HasColumnType("datetime(6)");
|
||||||
|
|
||||||
@ -1364,9 +1367,15 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
b.Property<bool>("PreApproved")
|
b.Property<bool>("PreApproved")
|
||||||
.HasColumnType("tinyint(1)");
|
.HasColumnType("tinyint(1)");
|
||||||
|
|
||||||
|
b.Property<Guid?>("ProcessedById")
|
||||||
|
.HasColumnType("char(36)");
|
||||||
|
|
||||||
b.Property<Guid>("ProjectId")
|
b.Property<Guid>("ProjectId")
|
||||||
.HasColumnType("char(36)");
|
.HasColumnType("char(36)");
|
||||||
|
|
||||||
|
b.Property<Guid?>("ReviewedById")
|
||||||
|
.HasColumnType("char(36)");
|
||||||
|
|
||||||
b.Property<Guid>("StatusId")
|
b.Property<Guid>("StatusId")
|
||||||
.HasColumnType("char(36)");
|
.HasColumnType("char(36)");
|
||||||
|
|
||||||
@ -1385,6 +1394,8 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("ApprovedById");
|
||||||
|
|
||||||
b.HasIndex("CreatedById");
|
b.HasIndex("CreatedById");
|
||||||
|
|
||||||
b.HasIndex("ExpensesTypeId");
|
b.HasIndex("ExpensesTypeId");
|
||||||
@ -1393,8 +1404,12 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
|
|
||||||
b.HasIndex("PaymentModeId");
|
b.HasIndex("PaymentModeId");
|
||||||
|
|
||||||
|
b.HasIndex("ProcessedById");
|
||||||
|
|
||||||
b.HasIndex("ProjectId");
|
b.HasIndex("ProjectId");
|
||||||
|
|
||||||
|
b.HasIndex("ReviewedById");
|
||||||
|
|
||||||
b.HasIndex("StatusId");
|
b.HasIndex("StatusId");
|
||||||
|
|
||||||
b.HasIndex("TenantId");
|
b.HasIndex("TenantId");
|
||||||
@ -1472,17 +1487,12 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
b.Property<Guid>("StatusId")
|
b.Property<Guid>("StatusId")
|
||||||
.HasColumnType("char(36)");
|
.HasColumnType("char(36)");
|
||||||
|
|
||||||
b.Property<Guid>("TenantId")
|
|
||||||
.HasColumnType("char(36)");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("NextStatusId");
|
b.HasIndex("NextStatusId");
|
||||||
|
|
||||||
b.HasIndex("StatusId");
|
b.HasIndex("StatusId");
|
||||||
|
|
||||||
b.HasIndex("TenantId");
|
|
||||||
|
|
||||||
b.ToTable("ExpensesStatusMapping");
|
b.ToTable("ExpensesStatusMapping");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
@ -1490,50 +1500,49 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
{
|
{
|
||||||
Id = new Guid("5cf7f1df-9d1f-4289-add0-1775ad614f25"),
|
Id = new Guid("5cf7f1df-9d1f-4289-add0-1775ad614f25"),
|
||||||
NextStatusId = new Guid("61578360-3a49-4c34-8604-7b35a3787b95"),
|
NextStatusId = new Guid("61578360-3a49-4c34-8604-7b35a3787b95"),
|
||||||
StatusId = new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
StatusId = new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = new Guid("4ddddc10-0ffd-4884-accf-d4fa0bd97f54"),
|
||||||
|
NextStatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||||
|
StatusId = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729")
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("36c00548-241c-43ec-bc95-cacebedb925c"),
|
Id = new Guid("36c00548-241c-43ec-bc95-cacebedb925c"),
|
||||||
NextStatusId = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
NextStatusId = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
||||||
StatusId = new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
StatusId = new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("1fca1700-1266-477d-bba4-9ac3753aa33c"),
|
Id = new Guid("1fca1700-1266-477d-bba4-9ac3753aa33c"),
|
||||||
NextStatusId = new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
NextStatusId = new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
||||||
StatusId = new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
StatusId = new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("75bbda6a-6a53-47d1-ad71-5f5f9446a11e"),
|
Id = new Guid("9e2ec648-1ca2-4747-9329-e911b18edb3e"),
|
||||||
NextStatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
NextStatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||||
StatusId = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
StatusId = new Guid("965eda62-7907-4963-b4a1-657fb0b2724b")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("fddaaf20-4ccc-4f4e-a724-dd310272b356"),
|
Id = new Guid("6b867bec-66e6-42a7-9611-f4595af9b9ce"),
|
||||||
NextStatusId = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
NextStatusId = new Guid("965eda62-7907-4963-b4a1-657fb0b2724b"),
|
||||||
StatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
StatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("ef1fcfbc-60e0-4f17-9308-c583a05d48fd"),
|
Id = new Guid("ef1fcfbc-60e0-4f17-9308-c583a05d48fd"),
|
||||||
NextStatusId = new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
NextStatusId = new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
||||||
StatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
StatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("af1e4492-98ee-4451-8ab7-fd8323f29c32"),
|
Id = new Guid("af1e4492-98ee-4451-8ab7-fd8323f29c32"),
|
||||||
NextStatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
NextStatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7"),
|
||||||
StatusId = new Guid("297e0d8f-f668-41b5-bfea-e03b354251c8"),
|
StatusId = new Guid("297e0d8f-f668-41b5-bfea-e03b354251c8")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1549,54 +1558,56 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
b.Property<Guid>("StatusId")
|
b.Property<Guid>("StatusId")
|
||||||
.HasColumnType("char(36)");
|
.HasColumnType("char(36)");
|
||||||
|
|
||||||
b.Property<Guid>("TenantId")
|
|
||||||
.HasColumnType("char(36)");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("PermissionId");
|
b.HasIndex("PermissionId");
|
||||||
|
|
||||||
b.HasIndex("StatusId");
|
b.HasIndex("StatusId");
|
||||||
|
|
||||||
b.HasIndex("TenantId");
|
|
||||||
|
|
||||||
b.ToTable("StatusPermissionMapping");
|
b.ToTable("StatusPermissionMapping");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("ed893799-1a5f-4311-a077-de93c86ca8fd"),
|
Id = new Guid("722b0c3c-5a78-456d-b9bb-b6ba1b21d59b"),
|
||||||
PermissionId = new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
PermissionId = new Guid("0f57885d-bcb2-4711-ac95-d841ace6d5a7"),
|
||||||
StatusId = new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8"),
|
StatusId = new Guid("297e0d8f-f668-41b5-bfea-e03b354251c8")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("4652d73f-fc71-4fe1-9f2f-1e48b342d741"),
|
Id = new Guid("7deb0945-e1c9-411f-8b3c-c9bdbe3c3c2d"),
|
||||||
|
PermissionId = new Guid("0f57885d-bcb2-4711-ac95-d841ace6d5a7"),
|
||||||
|
StatusId = new Guid("6537018f-f4e9-4cb3-a210-6c3b2da999d7")
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = new Guid("9e2ec648-1ca2-4747-9329-e911b18edb3e"),
|
||||||
PermissionId = new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
PermissionId = new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
||||||
StatusId = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
StatusId = new Guid("965eda62-7907-4963-b4a1-657fb0b2724b")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = new Guid("0b7926fc-a34b-4a5b-8c7d-1003480cf0fa"),
|
||||||
|
PermissionId = new Guid("1f4bda08-1873-449a-bb66-3e8222bd871b"),
|
||||||
|
StatusId = new Guid("4068007f-c92f-4f37-a907-bc15fe57d4d8")
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("cd15f9b9-be45-4deb-9c71-2f23f872dbcd"),
|
Id = new Guid("cd15f9b9-be45-4deb-9c71-2f23f872dbcd"),
|
||||||
PermissionId = new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
PermissionId = new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
||||||
StatusId = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
StatusId = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("f6f26b2f-2fa6-40b7-8601-cbd4bcdda0cc"),
|
Id = new Guid("f6f26b2f-2fa6-40b7-8601-cbd4bcdda0cc"),
|
||||||
PermissionId = new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
PermissionId = new Guid("eaafdd76-8aac-45f9-a530-315589c6deca"),
|
||||||
StatusId = new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27"),
|
StatusId = new Guid("f18c5cfd-7815-4341-8da2-2c2d65778e27")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("214354e5-daad-4569-ad69-eb5bf4e87fbc"),
|
Id = new Guid("214354e5-daad-4569-ad69-eb5bf4e87fbc"),
|
||||||
PermissionId = new Guid("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"),
|
PermissionId = new Guid("ea5a1529-4ee8-4828-80ea-0e23c9d4dd11"),
|
||||||
StatusId = new Guid("61578360-3a49-4c34-8604-7b35a3787b95"),
|
StatusId = new Guid("61578360-3a49-4c34-8604-7b35a3787b95")
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1918,13 +1929,8 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("longtext");
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
b.Property<Guid>("TenantId")
|
|
||||||
.HasColumnType("char(36)");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("TenantId");
|
|
||||||
|
|
||||||
b.ToTable("ExpensesStatusMaster");
|
b.ToTable("ExpensesStatusMaster");
|
||||||
|
|
||||||
b.HasData(
|
b.HasData(
|
||||||
@ -1936,8 +1942,7 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
DisplayName = "Draft",
|
DisplayName = "Draft",
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
Name = "Draft",
|
Name = "Draft"
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
@ -1947,8 +1952,17 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
DisplayName = "Submit",
|
DisplayName = "Submit",
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
Name = "Review Pending",
|
Name = "Review Pending"
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = new Guid("965eda62-7907-4963-b4a1-657fb0b2724b"),
|
||||||
|
Color = "#ff3e1d",
|
||||||
|
Description = "Expense was declined, often with a reason(review rejected).",
|
||||||
|
DisplayName = "Reject",
|
||||||
|
IsActive = true,
|
||||||
|
IsSystem = true,
|
||||||
|
Name = "Rejected by Reviewer"
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
@ -1958,19 +1972,17 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
DisplayName = "Mark as Reviewed",
|
DisplayName = "Mark as Reviewed",
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
Name = "Approval Pending",
|
Name = "Approval Pending"
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
Id = new Guid("d1ee5eec-24b6-4364-8673-a8f859c60729"),
|
||||||
Color = "#ff3e1d",
|
Color = "#ff3e1d",
|
||||||
Description = "Expense was declined, often with a reason(either review rejected or approval rejected.",
|
Description = "Expense was declined, often with a reason(approval rejected).",
|
||||||
DisplayName = "Reject",
|
DisplayName = "Reject",
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
Name = "Rejected",
|
Name = "Rejected by Approver"
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
@ -1980,19 +1992,17 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
DisplayName = "Mark as Approved",
|
DisplayName = "Mark as Approved",
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
Name = "Payment Pending",
|
Name = "Payment Pending"
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = new Guid("61578360-3a49-4c34-8604-7b35a3787b95"),
|
Id = new Guid("61578360-3a49-4c34-8604-7b35a3787b95"),
|
||||||
Color = "#71dd37",
|
Color = "#71dd37",
|
||||||
Description = "Expense has been settled.",
|
Description = "Expense has been settled.",
|
||||||
DisplayName = "Mark as Paid",
|
DisplayName = "Mark as Processed",
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
IsSystem = true,
|
IsSystem = true,
|
||||||
Name = "Paid",
|
Name = "Processed"
|
||||||
TenantId = new Guid("b3466e83-7e11-464c-b93a-daf047838b26")
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -3790,6 +3800,10 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("Marco.Pms.Model.Expenses.Expenses", b =>
|
modelBuilder.Entity("Marco.Pms.Model.Expenses.Expenses", b =>
|
||||||
{
|
{
|
||||||
|
b.HasOne("Marco.Pms.Model.Employees.Employee", "ApprovedBy")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ApprovedById");
|
||||||
|
|
||||||
b.HasOne("Marco.Pms.Model.Employees.Employee", "CreatedBy")
|
b.HasOne("Marco.Pms.Model.Employees.Employee", "CreatedBy")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("CreatedById")
|
.HasForeignKey("CreatedById")
|
||||||
@ -3814,12 +3828,20 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Marco.Pms.Model.Employees.Employee", "ProcessedBy")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ProcessedById");
|
||||||
|
|
||||||
b.HasOne("Marco.Pms.Model.Projects.Project", "Project")
|
b.HasOne("Marco.Pms.Model.Projects.Project", "Project")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("ProjectId")
|
.HasForeignKey("ProjectId")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Marco.Pms.Model.Employees.Employee", "ReviewedBy")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ReviewedById");
|
||||||
|
|
||||||
b.HasOne("Marco.Pms.Model.Master.ExpensesStatusMaster", "Status")
|
b.HasOne("Marco.Pms.Model.Master.ExpensesStatusMaster", "Status")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("StatusId")
|
.HasForeignKey("StatusId")
|
||||||
@ -3832,6 +3854,8 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("ApprovedBy");
|
||||||
|
|
||||||
b.Navigation("CreatedBy");
|
b.Navigation("CreatedBy");
|
||||||
|
|
||||||
b.Navigation("ExpensesType");
|
b.Navigation("ExpensesType");
|
||||||
@ -3840,8 +3864,12 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
|
|
||||||
b.Navigation("PaymentMode");
|
b.Navigation("PaymentMode");
|
||||||
|
|
||||||
|
b.Navigation("ProcessedBy");
|
||||||
|
|
||||||
b.Navigation("Project");
|
b.Navigation("Project");
|
||||||
|
|
||||||
|
b.Navigation("ReviewedBy");
|
||||||
|
|
||||||
b.Navigation("Status");
|
b.Navigation("Status");
|
||||||
|
|
||||||
b.Navigation("Tenant");
|
b.Navigation("Tenant");
|
||||||
@ -3907,17 +3935,9 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("Marco.Pms.Model.Entitlements.Tenant", "Tenant")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("TenantId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("NextStatus");
|
b.Navigation("NextStatus");
|
||||||
|
|
||||||
b.Navigation("Status");
|
b.Navigation("Status");
|
||||||
|
|
||||||
b.Navigation("Tenant");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Marco.Pms.Model.Expenses.StatusPermissionMapping", b =>
|
modelBuilder.Entity("Marco.Pms.Model.Expenses.StatusPermissionMapping", b =>
|
||||||
@ -3934,17 +3954,9 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("Marco.Pms.Model.Entitlements.Tenant", "Tenant")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("TenantId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("Permission");
|
b.Navigation("Permission");
|
||||||
|
|
||||||
b.Navigation("Status");
|
b.Navigation("Status");
|
||||||
|
|
||||||
b.Navigation("Tenant");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Marco.Pms.Model.Forum.TicketAttachment", b =>
|
modelBuilder.Entity("Marco.Pms.Model.Forum.TicketAttachment", b =>
|
||||||
@ -4051,17 +4063,6 @@ namespace Marco.Pms.DataAccess.Migrations
|
|||||||
b.Navigation("Tenant");
|
b.Navigation("Tenant");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Marco.Pms.Model.Master.ExpensesStatusMaster", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("Marco.Pms.Model.Entitlements.Tenant", "Tenant")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("TenantId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("Tenant");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("Marco.Pms.Model.Master.ExpensesTypeMaster", b =>
|
modelBuilder.Entity("Marco.Pms.Model.Master.ExpensesTypeMaster", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("Marco.Pms.Model.Entitlements.Tenant", "Tenant")
|
b.HasOne("Marco.Pms.Model.Entitlements.Tenant", "Tenant")
|
||||||
|
@ -35,6 +35,21 @@ namespace Marco.Pms.Model.Expenses
|
|||||||
[ValidateNever]
|
[ValidateNever]
|
||||||
[ForeignKey("CreatedById")]
|
[ForeignKey("CreatedById")]
|
||||||
public Employee? CreatedBy { get; set; }
|
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 TransactionDate { get; set; }
|
||||||
public DateTime CreatedAt { get; set; }
|
public DateTime CreatedAt { get; set; }
|
||||||
public string? TransactionId { get; set; }
|
public string? TransactionId { get; set; }
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
using Marco.Pms.Model.Master;
|
using Marco.Pms.Model.Master;
|
||||||
using Marco.Pms.Model.Utilities;
|
|
||||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace Marco.Pms.Model.Expenses
|
namespace Marco.Pms.Model.Expenses
|
||||||
{
|
{
|
||||||
public class ExpensesStatusMapping : TenantRelation
|
public class ExpensesStatusMapping
|
||||||
{
|
{
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public Guid StatusId { get; set; }
|
public Guid StatusId { get; set; }
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
using Marco.Pms.Model.Entitlements;
|
using Marco.Pms.Model.Entitlements;
|
||||||
using Marco.Pms.Model.Master;
|
using Marco.Pms.Model.Master;
|
||||||
using Marco.Pms.Model.Utilities;
|
|
||||||
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace Marco.Pms.Model.Expenses
|
namespace Marco.Pms.Model.Expenses
|
||||||
{
|
{
|
||||||
public class StatusPermissionMapping : TenantRelation
|
public class StatusPermissionMapping
|
||||||
{
|
{
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public Guid StatusId { get; set; }
|
public Guid StatusId { get; set; }
|
||||||
|
11
Marco.Pms.Model/Master/CurrencyMaster.cs
Normal file
11
Marco.Pms.Model/Master/CurrencyMaster.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
namespace Marco.Pms.Model.Master
|
||||||
|
{
|
||||||
|
public class CurrencyMaster
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string CurrencyCode { get; set; } = string.Empty;
|
||||||
|
public string CurrencyName { get; set; } = string.Empty;
|
||||||
|
public string Symbol { get; set; } = string.Empty;
|
||||||
|
public bool IsActive { get; set; } = true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,6 @@
|
|||||||
using Marco.Pms.Model.Utilities;
|
namespace Marco.Pms.Model.Master
|
||||||
|
|
||||||
namespace Marco.Pms.Model.Master
|
|
||||||
{
|
{
|
||||||
public class ExpensesStatusMaster : TenantRelation
|
public class ExpensesStatusMaster
|
||||||
{
|
{
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Name { get; set; } = string.Empty;
|
||||||
|
@ -8,6 +8,9 @@
|
|||||||
public string PaymentModeId { get; set; } = string.Empty;
|
public string PaymentModeId { get; set; } = string.Empty;
|
||||||
public string PaidById { get; set; } = string.Empty;
|
public string PaidById { get; set; } = string.Empty;
|
||||||
public string CreatedById { get; set; } = string.Empty;
|
public string CreatedById { get; set; } = string.Empty;
|
||||||
|
public string? ReviewedById { get; set; }
|
||||||
|
public string? ApprovedById { get; set; }
|
||||||
|
public string? ProcessedById { get; set; }
|
||||||
public DateTime TransactionDate { get; set; }
|
public DateTime TransactionDate { get; set; }
|
||||||
public DateTime CreatedAt { get; set; }
|
public DateTime CreatedAt { get; set; }
|
||||||
public DateTime ExpireAt { get; set; } = DateTime.UtcNow.Date.AddDays(1);
|
public DateTime ExpireAt { get; set; } = DateTime.UtcNow.Date.AddDays(1);
|
||||||
|
@ -8,6 +8,5 @@
|
|||||||
public string Description { get; set; } = string.Empty;
|
public string Description { get; set; } = string.Empty;
|
||||||
public string? Color { get; set; }
|
public string? Color { get; set; }
|
||||||
public bool IsSystem { get; set; } = false;
|
public bool IsSystem { get; set; } = false;
|
||||||
public string TenantId { get; set; } = string.Empty;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
public List<Guid>? StatusIds { get; set; }
|
public List<Guid>? StatusIds { get; set; }
|
||||||
public List<Guid>? CreatedByIds { get; set; }
|
public List<Guid>? CreatedByIds { get; set; }
|
||||||
public List<Guid>? PaidById { get; set; }
|
public List<Guid>? PaidById { get; set; }
|
||||||
|
public bool IsTransactionDate { get; set; } = false;
|
||||||
public DateTime? StartDate { get; set; }
|
public DateTime? StartDate { get; set; }
|
||||||
public DateTime? EndDate { get; set; }
|
public DateTime? EndDate { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,9 @@ namespace Marco.Pms.Model.ViewModels.Expenses
|
|||||||
public PaymentModeMatserVM? PaymentMode { get; set; }
|
public PaymentModeMatserVM? PaymentMode { get; set; }
|
||||||
public BasicEmployeeVM? PaidBy { get; set; }
|
public BasicEmployeeVM? PaidBy { get; set; }
|
||||||
public BasicEmployeeVM? CreatedBy { 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 TransactionDate { get; set; }
|
||||||
public DateTime CreatedAt { get; set; }
|
public DateTime CreatedAt { get; set; }
|
||||||
public string SupplerName { get; set; } = string.Empty;
|
public string SupplerName { get; set; } = string.Empty;
|
||||||
|
@ -12,6 +12,9 @@ namespace Marco.Pms.Model.ViewModels.Expanses
|
|||||||
public PaymentModeMatserVM? PaymentMode { get; set; }
|
public PaymentModeMatserVM? PaymentMode { get; set; }
|
||||||
public BasicEmployeeVM? PaidBy { get; set; }
|
public BasicEmployeeVM? PaidBy { get; set; }
|
||||||
public BasicEmployeeVM? CreatedBy { 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 TransactionDate { get; set; }
|
||||||
public DateTime CreatedAt { get; set; }
|
public DateTime CreatedAt { get; set; }
|
||||||
public string SupplerName { get; set; } = string.Empty;
|
public string SupplerName { get; set; } = string.Empty;
|
||||||
|
@ -908,31 +908,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
public async Task<IActionResult> GetExpensesStatusList([FromQuery] bool isActive = true)
|
public async Task<IActionResult> GetExpensesStatusList([FromQuery] bool isActive = true)
|
||||||
{
|
{
|
||||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
var response = await _masterService.GetExpensesStatusListAsync(loggedInEmployee, tenantId, isActive);
|
var response = await _masterService.GetExpensesStatusListAsync(loggedInEmployee, tenantId);
|
||||||
return StatusCode(response.StatusCode, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPost("expenses-status")]
|
|
||||||
public async Task<IActionResult> CreateExpensesStatus([FromBody] ExpensesStatusMasterDto dto)
|
|
||||||
{
|
|
||||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
||||||
var response = await _masterService.CreateExpensesStatusAsync(dto, loggedInEmployee, tenantId);
|
|
||||||
return StatusCode(response.StatusCode, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPut("expenses-status/edit/{id}")]
|
|
||||||
public async Task<IActionResult> UpdateExpensesStatus(Guid id, [FromBody] ExpensesStatusMasterDto dto)
|
|
||||||
{
|
|
||||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
||||||
var response = await _masterService.UpdateExpensesStatusAsync(id, dto, loggedInEmployee, tenantId);
|
|
||||||
return StatusCode(response.StatusCode, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpDelete("expenses-status/delete/{id}")]
|
|
||||||
public async Task<IActionResult> DeleteExpensesStatus(Guid id, [FromQuery] bool isActive = false)
|
|
||||||
{
|
|
||||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
|
||||||
var response = await _masterService.DeleteExpensesStatusAsync(id, isActive, loggedInEmployee, tenantId);
|
|
||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,6 +145,15 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
dest => dest.CreatedById,
|
dest => dest.CreatedById,
|
||||||
opt => opt.MapFrom(src => src.CreatedById.ToString()))
|
opt => opt.MapFrom(src => src.CreatedById.ToString()))
|
||||||
.ForMember(
|
.ForMember(
|
||||||
|
dest => dest.ReviewedById,
|
||||||
|
opt => opt.MapFrom(src => src.ReviewedById.ToString()))
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.ApprovedById,
|
||||||
|
opt => opt.MapFrom(src => src.ApprovedById.ToString()))
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.ProcessedById,
|
||||||
|
opt => opt.MapFrom(src => src.ProcessedById.ToString()))
|
||||||
|
.ForMember(
|
||||||
dest => dest.StatusId,
|
dest => dest.StatusId,
|
||||||
opt => opt.MapFrom(src => src.StatusId.ToString()))
|
opt => opt.MapFrom(src => src.StatusId.ToString()))
|
||||||
.ForMember(
|
.ForMember(
|
||||||
@ -171,6 +180,15 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
dest => dest.CreatedById,
|
dest => dest.CreatedById,
|
||||||
opt => opt.MapFrom(src => Guid.Parse(src.CreatedById)))
|
opt => opt.MapFrom(src => Guid.Parse(src.CreatedById)))
|
||||||
.ForMember(
|
.ForMember(
|
||||||
|
dest => dest.ReviewedById,
|
||||||
|
opt => opt.MapFrom(src => Guid.Parse(src.ReviewedById ?? "")))
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.ApprovedById,
|
||||||
|
opt => opt.MapFrom(src => Guid.Parse(src.ApprovedById ?? "")))
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.ProcessedById,
|
||||||
|
opt => opt.MapFrom(src => Guid.Parse(src.ProcessedById ?? "")))
|
||||||
|
.ForMember(
|
||||||
dest => dest.StatusId,
|
dest => dest.StatusId,
|
||||||
opt => opt.MapFrom(src => Guid.Parse(src.StatusId)))
|
opt => opt.MapFrom(src => Guid.Parse(src.StatusId)))
|
||||||
.ForMember(
|
.ForMember(
|
||||||
@ -229,10 +247,7 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
CreateMap<ExpensesStatusMaster, ExpensesStatusMasterMongoDB>()
|
CreateMap<ExpensesStatusMaster, ExpensesStatusMasterMongoDB>()
|
||||||
.ForMember(
|
.ForMember(
|
||||||
dest => dest.Id,
|
dest => dest.Id,
|
||||||
opt => opt.MapFrom(src => src.Id.ToString()))
|
opt => opt.MapFrom(src => src.Id.ToString()));
|
||||||
.ForMember(
|
|
||||||
dest => dest.TenantId,
|
|
||||||
opt => opt.MapFrom(src => src.TenantId.ToString()));
|
|
||||||
|
|
||||||
CreateMap<ExpensesStatusMasterMongoDB, ExpensesStatusMasterVM>()
|
CreateMap<ExpensesStatusMasterMongoDB, ExpensesStatusMasterVM>()
|
||||||
.ForMember(
|
.ForMember(
|
||||||
|
@ -135,12 +135,19 @@ namespace Marco.Pms.Services.Service
|
|||||||
|
|
||||||
if (expenseFilter != null)
|
if (expenseFilter != null)
|
||||||
{
|
{
|
||||||
// CRITICAL FIX: Apply filters cumulatively using multiple `if` statements, not `if-else if`.
|
|
||||||
if (expenseFilter.StartDate.HasValue && expenseFilter.EndDate.HasValue)
|
if (expenseFilter.StartDate.HasValue && expenseFilter.EndDate.HasValue)
|
||||||
|
{
|
||||||
|
if (expenseFilter.IsTransactionDate)
|
||||||
|
{
|
||||||
|
expensesQuery = expensesQuery.Where(e => e.TransactionDate.Date >= expenseFilter.StartDate.Value.Date && e.TransactionDate.Date <= expenseFilter.EndDate.Value.Date);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
expensesQuery = expensesQuery.Where(e => e.CreatedAt.Date >= expenseFilter.StartDate.Value.Date && e.CreatedAt.Date <= expenseFilter.EndDate.Value.Date);
|
expensesQuery = expensesQuery.Where(e => e.CreatedAt.Date >= expenseFilter.StartDate.Value.Date && e.CreatedAt.Date <= expenseFilter.EndDate.Value.Date);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (expenseFilter.ProjectIds?.Any() == true)
|
if (expenseFilter.ProjectIds?.Any() == true)
|
||||||
{
|
{
|
||||||
expensesQuery = expensesQuery.Where(e => expenseFilter.ProjectIds.Contains(e.ProjectId));
|
expensesQuery = expensesQuery.Where(e => expenseFilter.ProjectIds.Contains(e.ProjectId));
|
||||||
@ -464,7 +471,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||||
return await dbContext.ExpensesStatusMapping
|
return await dbContext.ExpensesStatusMapping
|
||||||
.Include(s => s.NextStatus)
|
.Include(s => s.NextStatus)
|
||||||
.FirstOrDefaultAsync(s => s.StatusId == existingExpense.StatusId && s.NextStatusId == model.StatusId && s.TenantId == tenantId);
|
.FirstOrDefaultAsync(s => s.StatusId == existingExpense.StatusId && s.NextStatusId == model.StatusId);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Task to fetch all permissions required for the *target* status.
|
// Task to fetch all permissions required for the *target* status.
|
||||||
@ -472,7 +479,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
{
|
{
|
||||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||||
return await dbContext.StatusPermissionMapping
|
return await dbContext.StatusPermissionMapping
|
||||||
.Where(sp => sp.StatusId == model.StatusId && sp.TenantId == tenantId)
|
.Where(sp => sp.StatusId == model.StatusId)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -598,7 +605,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
var dbContext = t.Result;
|
var dbContext = t.Result;
|
||||||
return dbContext.ExpensesStatusMapping
|
return dbContext.ExpensesStatusMapping
|
||||||
.Include(s => s.NextStatus)
|
.Include(s => s.NextStatus)
|
||||||
.Where(s => s.StatusId == existingExpense.StatusId && s.NextStatus != null && s.TenantId == tenantId)
|
.Where(s => s.StatusId == existingExpense.StatusId && s.NextStatus != null)
|
||||||
.Select(s => s.NextStatus) // Select only the status object
|
.Select(s => s.NextStatus) // Select only the status object
|
||||||
.ToListAsync()
|
.ToListAsync()
|
||||||
.ContinueWith(res =>
|
.ContinueWith(res =>
|
||||||
@ -756,7 +763,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
var dbContext = t.Result;
|
var dbContext = t.Result;
|
||||||
return dbContext.ExpensesStatusMapping
|
return dbContext.ExpensesStatusMapping
|
||||||
.Include(s => s.NextStatus)
|
.Include(s => s.NextStatus)
|
||||||
.Where(s => s.StatusId == existingExpense.StatusId && s.NextStatus != null && s.TenantId == tenantId)
|
.Where(s => s.StatusId == existingExpense.StatusId && s.NextStatus != null)
|
||||||
.Select(s => s.NextStatus) // Select only the status object
|
.Select(s => s.NextStatus) // Select only the status object
|
||||||
.ToListAsync()
|
.ToListAsync()
|
||||||
.ContinueWith(res =>
|
.ContinueWith(res =>
|
||||||
@ -958,7 +965,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
.Include(s => s.Status)
|
.Include(s => s.Status)
|
||||||
.Include(s => s.NextStatus)
|
.Include(s => s.NextStatus)
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Where(es => statusIds.Contains(es.StatusId) && es.Status != null && es.TenantId == tenantId)
|
.Where(es => statusIds.Contains(es.StatusId) && es.Status != null)
|
||||||
.GroupBy(s => s.StatusId)
|
.GroupBy(s => s.StatusId)
|
||||||
.Select(g => new
|
.Select(g => new
|
||||||
{
|
{
|
||||||
@ -972,14 +979,13 @@ namespace Marco.Pms.Services.Service
|
|||||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||||
return await dbContext.ExpensesStatusMaster
|
return await dbContext.ExpensesStatusMaster
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Where(es => statusIds.Contains(es.Id) && es.TenantId == tenantId)
|
.Where(es => statusIds.Contains(es.Id))
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
});
|
});
|
||||||
var permissionStatusMappingTask = Task.Run(async () =>
|
var permissionStatusMappingTask = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||||
return await dbContext.StatusPermissionMapping
|
return await dbContext.StatusPermissionMapping
|
||||||
.Where(ps => ps.TenantId == tenantId)
|
|
||||||
.GroupBy(ps => ps.StatusId)
|
.GroupBy(ps => ps.StatusId)
|
||||||
.Select(g => new
|
.Select(g => new
|
||||||
{
|
{
|
||||||
@ -1066,7 +1072,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
.Include(s => s.Status)
|
.Include(s => s.Status)
|
||||||
.Include(s => s.NextStatus)
|
.Include(s => s.NextStatus)
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Where(es => es.StatusId == Guid.Parse(model.StatusId) && es.Status != null && es.TenantId == tenantId)
|
.Where(es => es.StatusId == Guid.Parse(model.StatusId) && es.Status != null)
|
||||||
.GroupBy(s => s.StatusId)
|
.GroupBy(s => s.StatusId)
|
||||||
.Select(g => new
|
.Select(g => new
|
||||||
{
|
{
|
||||||
@ -1079,13 +1085,12 @@ namespace Marco.Pms.Services.Service
|
|||||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||||
return await dbContext.ExpensesStatusMaster
|
return await dbContext.ExpensesStatusMaster
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.FirstOrDefaultAsync(es => es.Id == Guid.Parse(model.StatusId) && es.TenantId == tenantId);
|
.FirstOrDefaultAsync(es => es.Id == Guid.Parse(model.StatusId));
|
||||||
});
|
});
|
||||||
var permissionStatusMappingTask = Task.Run(async () =>
|
var permissionStatusMappingTask = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||||
return await dbContext.StatusPermissionMapping
|
return await dbContext.StatusPermissionMapping
|
||||||
.Where(ps => ps.TenantId == tenantId)
|
|
||||||
.GroupBy(ps => ps.StatusId)
|
.GroupBy(ps => ps.StatusId)
|
||||||
.Select(g => new
|
.Select(g => new
|
||||||
{
|
{
|
||||||
|
@ -4,7 +4,6 @@ using Marco.Pms.Helpers.Utility;
|
|||||||
using Marco.Pms.Model.Dtos.Master;
|
using Marco.Pms.Model.Dtos.Master;
|
||||||
using Marco.Pms.Model.Employees;
|
using Marco.Pms.Model.Employees;
|
||||||
using Marco.Pms.Model.Entitlements;
|
using Marco.Pms.Model.Entitlements;
|
||||||
using Marco.Pms.Model.Expenses;
|
|
||||||
using Marco.Pms.Model.Master;
|
using Marco.Pms.Model.Master;
|
||||||
using Marco.Pms.Model.MongoDBModels.Utility;
|
using Marco.Pms.Model.MongoDBModels.Utility;
|
||||||
using Marco.Pms.Model.Utilities;
|
using Marco.Pms.Model.Utilities;
|
||||||
@ -247,9 +246,8 @@ namespace Marco.Pms.Services.Service
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Expenses Status APIs ===================================================================
|
#region =================================================================== Expenses Status APIs ===================================================================
|
||||||
public async Task<ApiResponse<object>> GetExpensesStatusListAsync(Employee loggedInEmployee, Guid tenantId, bool isActive)
|
public async Task<ApiResponse<object>> GetExpensesStatusListAsync(Employee loggedInEmployee, Guid tenantId)
|
||||||
{
|
{
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Validation if employee is taking action in same tenant
|
// Validation if employee is taking action in same tenant
|
||||||
@ -260,7 +258,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Featching the list of Expenses Status.
|
// Featching the list of Expenses Status.
|
||||||
var statusList = await _context.ExpensesStatusMaster.Where(es => es.TenantId == tenantId && es.IsActive == isActive).ToListAsync();
|
var statusList = await _context.ExpensesStatusMaster.ToListAsync();
|
||||||
var response = _mapper.Map<List<ExpensesStatusMasterVM>>(statusList);
|
var response = _mapper.Map<List<ExpensesStatusMasterVM>>(statusList);
|
||||||
|
|
||||||
var statusIds = statusList.Select(s => s.Id).ToList();
|
var statusIds = statusList.Select(s => s.Id).ToList();
|
||||||
@ -287,223 +285,6 @@ namespace Marco.Pms.Services.Service
|
|||||||
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<ApiResponse<object>> CreateExpensesStatusAsync(ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Validation if employee is taking action in same tenant
|
|
||||||
if (tenantId != loggedInEmployee.TenantId)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Employee {EmployeeId} attempted to add new Expense Status in different tenant", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Access Denied", "User do not have access for this information", 403);
|
|
||||||
}
|
|
||||||
var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
|
|
||||||
if (!hasManagePermission)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPENSE STATUS MASTER.", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
|
|
||||||
|
|
||||||
}
|
|
||||||
// Mapping the DTO to ExpensesStatusMaster Model
|
|
||||||
var expensesStatus = _mapper.Map<ExpensesStatusMaster>(model);
|
|
||||||
expensesStatus.TenantId = tenantId;
|
|
||||||
|
|
||||||
_context.ExpensesStatusMaster.Add(expensesStatus);
|
|
||||||
|
|
||||||
if (model.PermissionIds?.Any() ?? false)
|
|
||||||
{
|
|
||||||
var permissionStatusMappings = model.PermissionIds.Select(p => new StatusPermissionMapping
|
|
||||||
{
|
|
||||||
PermissionId = p,
|
|
||||||
StatusId = expensesStatus.Id,
|
|
||||||
TenantId = tenantId
|
|
||||||
}).ToList();
|
|
||||||
|
|
||||||
_context.StatusPermissionMapping.AddRange(permissionStatusMappings);
|
|
||||||
}
|
|
||||||
await _context.SaveChangesAsync();
|
|
||||||
|
|
||||||
_logger.LogInfo("New Expense Status {ExpensesStatusId} was added by employee {EmployeeId}", expensesStatus.Id, loggedInEmployee.Id);
|
|
||||||
|
|
||||||
// Mapping the ExpensesStatusMaster Model to View Model
|
|
||||||
var response = _mapper.Map<ExpensesStatusMasterVM>(expensesStatus);
|
|
||||||
return ApiResponse<object>.SuccessResponse(response, "Expense Status craeted Successfully", 201);
|
|
||||||
}
|
|
||||||
catch (DbUpdateException dbEx)
|
|
||||||
{
|
|
||||||
_logger.LogError(dbEx, "Database Exception occured while adding new Expense Status by employee {EmployeeId}", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogError(ex, "Exception occured while adding new Expense Status by employee {EmployeeId}", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public async Task<ApiResponse<object>> UpdateExpensesStatusAsync(Guid id, ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Validation if employee is taking action in same tenant
|
|
||||||
if (tenantId != loggedInEmployee.TenantId)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Employee {EmployeeId} attempted to add new Expense Status in different tenant", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Access Denied", "User do not have access for this information", 403);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checking permssion for managing masters
|
|
||||||
var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
|
|
||||||
if (!hasManagePermission)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPENSE STATUS MASTER.", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
|
|
||||||
|
|
||||||
}
|
|
||||||
// Validating the prvided data
|
|
||||||
if (model.Id != id)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Employee {EmployeeId} provide different Ids in payload and path variable", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Invalid Data", "User has send invalid payload", 400);
|
|
||||||
}
|
|
||||||
// featching expenses status and permissions parallelly
|
|
||||||
var expensesStatusTask = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
|
||||||
return await dbContext.ExpensesStatusMaster.AsNoTracking()
|
|
||||||
.FirstOrDefaultAsync(et => et.Id == model.Id.Value && et.TenantId == tenantId);
|
|
||||||
});
|
|
||||||
|
|
||||||
var permissionStatusMappingsTask = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
|
||||||
return await dbContext.StatusPermissionMapping
|
|
||||||
.AsNoTracking()
|
|
||||||
.Where(ps => ps.StatusId == model.Id.Value && ps.TenantId == tenantId)
|
|
||||||
.ToListAsync();
|
|
||||||
});
|
|
||||||
|
|
||||||
await Task.WhenAll(expensesStatusTask, permissionStatusMappingsTask);
|
|
||||||
var expensesStatus = expensesStatusTask.Result;
|
|
||||||
|
|
||||||
// Checking if Expense Status exists
|
|
||||||
if (expensesStatus == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Employee {EmployeeId} tries to update Expense Status, but not found in database", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Expense Status not found", "Expense Status not found", 404);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mapping ExpensesStatusMaster to BsonDocument
|
|
||||||
var existingEntityBson = _updateLogHelper.EntityToBsonDocument(expensesStatus);
|
|
||||||
|
|
||||||
// Mapping ExpensesStatusMasterDto to ExpensesStatusMaster
|
|
||||||
_mapper.Map(model, expensesStatus);
|
|
||||||
|
|
||||||
_context.ExpensesStatusMaster.Update(expensesStatus);
|
|
||||||
|
|
||||||
var permissionStatusMappings = permissionStatusMappingsTask.Result;
|
|
||||||
var permissionIds = permissionStatusMappings.Select(ps => ps.PermissionId).ToList();
|
|
||||||
if (model.PermissionIds != null)
|
|
||||||
{
|
|
||||||
var newPermissionStatusMappings = model.PermissionIds.Where(p => !permissionIds.Contains(p)).Select(p => new StatusPermissionMapping
|
|
||||||
{
|
|
||||||
PermissionId = p,
|
|
||||||
StatusId = expensesStatus.Id,
|
|
||||||
TenantId = tenantId
|
|
||||||
}).ToList();
|
|
||||||
var deletedPermissionStatusMappings = permissionStatusMappings.Where(ps => !model.PermissionIds.Contains(ps.PermissionId)).ToList();
|
|
||||||
|
|
||||||
_context.StatusPermissionMapping.AddRange(newPermissionStatusMappings);
|
|
||||||
_context.StatusPermissionMapping.RemoveRange(deletedPermissionStatusMappings);
|
|
||||||
|
|
||||||
}
|
|
||||||
await _context.SaveChangesAsync();
|
|
||||||
|
|
||||||
_logger.LogInfo("New Expense Status {ExpensesStatusId} was added by employee {EmployeeId}", expensesStatus.Id, loggedInEmployee.Id);
|
|
||||||
|
|
||||||
// Mapping the ExpensesStatusMaster Model to View Model
|
|
||||||
var response = _mapper.Map<ExpensesStatusMasterVM>(expensesStatus);
|
|
||||||
return ApiResponse<object>.SuccessResponse(response, "Expense Status craeted Successfully", 201);
|
|
||||||
}
|
|
||||||
catch (DbUpdateException dbEx)
|
|
||||||
{
|
|
||||||
_logger.LogError(dbEx, "Database Exception occured while adding new Expense Status by employee {EmployeeId}", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogError(ex, "Exception occured while adding new Expense Status by employee {EmployeeId}", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public async Task<ApiResponse<object>> DeleteExpensesStatusAsync(Guid id, bool isActive, Employee loggedInEmployee, Guid tenantId)
|
|
||||||
{
|
|
||||||
string action = isActive ? "restore" : "delete";
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Validation if employee is taking action in same tenant
|
|
||||||
if (tenantId != loggedInEmployee.TenantId)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Employee {EmployeeId} attempted to {Action} Expense Status in different tenant", loggedInEmployee.Id, action);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Access Denied", "User do not have access for this information", 403);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checking permssion for managing masters
|
|
||||||
var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
|
|
||||||
if (!hasManagePermission)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPENSE STATUS MASTER.", loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
|
|
||||||
}
|
|
||||||
|
|
||||||
var expensesStatus = await _context.ExpensesStatusMaster.FirstOrDefaultAsync(et => et.Id == id && et.TenantId == tenantId);
|
|
||||||
|
|
||||||
// Checking if Expense Status exists
|
|
||||||
if (expensesStatus == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Employee {EmployeeId} tries to {Action} Expense Status, but not found in database", loggedInEmployee.Id, action);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Expense Status not found", "Expense Status not found", 404);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (expensesStatus.IsSystem)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Employee {Employee} attempts to {Action} Expense status, but status is system defined", loggedInEmployee.Id, action);
|
|
||||||
return ApiResponse<object>.ErrorResponse($"Expense Status is system defined cannot able to {action}", $"Expense Status is system defined cannot able to {action}", 400);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mapping ExpensesStatusMaster to BsonDocument
|
|
||||||
var existingEntityBson = _updateLogHelper.EntityToBsonDocument(expensesStatus);
|
|
||||||
|
|
||||||
expensesStatus.IsActive = isActive;
|
|
||||||
await _context.SaveChangesAsync();
|
|
||||||
|
|
||||||
_logger.LogInfo("Expense Status {ExpensesStatusId} was {Action}d by employee {EmployeeId}", expensesStatus.Id, action, loggedInEmployee.Id);
|
|
||||||
|
|
||||||
// Saving the old entity in mongoDB
|
|
||||||
|
|
||||||
var mongoDBTask = _updateLogHelper.PushToUpdateLogsAsync(new UpdateLogsObject
|
|
||||||
{
|
|
||||||
EntityId = expensesStatus.Id.ToString(),
|
|
||||||
UpdatedById = loggedInEmployee.Id.ToString(),
|
|
||||||
OldObject = existingEntityBson,
|
|
||||||
UpdatedAt = DateTime.UtcNow
|
|
||||||
}, "ExpensesStatusMasterModificationLog");
|
|
||||||
|
|
||||||
// Mapping ExpensesStatusMaster to ExpensesStatusMasterVM
|
|
||||||
var response = _mapper.Map<ExpensesStatusMasterVM>(expensesStatus);
|
|
||||||
return ApiResponse<object>.SuccessResponse(response, $"Expense Status {action}d Successfully", 200);
|
|
||||||
}
|
|
||||||
catch (DbUpdateException dbEx)
|
|
||||||
{
|
|
||||||
_logger.LogError(dbEx, "Database Exception occured while {Action}ing Expense Status by employee {EmployeeId}", action, loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.LogError(ex, "Exception occured while {Action}ing Expense Status by employee {EmployeeId}", action, loggedInEmployee.Id);
|
|
||||||
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Payment mode APIs ===================================================================
|
#region =================================================================== Payment mode APIs ===================================================================
|
||||||
|
@ -15,10 +15,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Expenses Status APIs ===================================================================
|
#region =================================================================== Expenses Status APIs ===================================================================
|
||||||
Task<ApiResponse<object>> GetExpensesStatusListAsync(Employee loggedInEmployee, Guid tenantId, bool isActive);
|
Task<ApiResponse<object>> GetExpensesStatusListAsync(Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> CreateExpensesStatusAsync(ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId);
|
|
||||||
Task<ApiResponse<object>> UpdateExpensesStatusAsync(Guid id, ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId);
|
|
||||||
Task<ApiResponse<object>> DeleteExpensesStatusAsync(Guid id, bool isActive, Employee loggedInEmployee, Guid tenantId);
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user