Added the TDSpercentage file in expense table
This commit is contained in:
parent
ad3166c4d4
commit
8ce05840c5
@ -120,6 +120,7 @@ namespace Marco.Pms.DataAccess.Data
|
||||
public DbSet<AdvancePaymentTransaction> AdvancePaymentTransactions { get; set; }
|
||||
|
||||
public DbSet<StatusUpdateLog> StatusUpdateLogs { get; set; }
|
||||
public DbSet<RecurringPaymentStatus> RecurringPaymentStatus { get; set; }
|
||||
|
||||
public DbSet<FCMTokenMapping> FCMTokenMappings { get; set; }
|
||||
|
||||
@ -492,6 +493,64 @@ namespace Marco.Pms.DataAccess.Data
|
||||
});
|
||||
|
||||
|
||||
modelBuilder.Entity<CurrencyMaster>().HasData(
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("78e96e4a-7ce0-4164-ae3a-c833ad45ec2c"),
|
||||
CurrencyCode = "INR",
|
||||
CurrencyName = "Indian Rupee",
|
||||
Symbol = "₹",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("2f672568-a67b-4961-acb2-a8c7834e1762"),
|
||||
CurrencyCode = "USD",
|
||||
CurrencyName = "US Dollar",
|
||||
Symbol = "$",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("4d1155bb-1448-4d97-a732-96c92eb99c45"),
|
||||
CurrencyCode = "EUR",
|
||||
CurrencyName = "Euro",
|
||||
Symbol = "€",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("3e456237-ef06-4ea1-a261-188c9b0c6df6"),
|
||||
CurrencyCode = "GBP",
|
||||
CurrencyName = "Pound Sterling",
|
||||
Symbol = "£",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("297e237a-56d3-48f6-b39d-ec3991dea8bf"),
|
||||
CurrencyCode = "JPY",
|
||||
CurrencyName = "Japanese Yen",
|
||||
Symbol = "¥",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("efe9b4f6-64d6-446e-a42d-1c7aaf6dd70d"),
|
||||
CurrencyCode = "RUB",
|
||||
CurrencyName = "Russian Ruble",
|
||||
Symbol = "₽",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("b960166a-f7e9-49e3-bb4b-28511f126c08"),
|
||||
CurrencyCode = "CNY",
|
||||
CurrencyName = "Chinese Yuan (Renminbi)",
|
||||
Symbol = "¥",
|
||||
IsActive = true
|
||||
}
|
||||
);
|
||||
|
||||
modelBuilder.Entity<ExpensesStatusMaster>().HasData(
|
||||
new ExpensesStatusMaster
|
||||
@ -1100,6 +1159,29 @@ namespace Marco.Pms.DataAccess.Data
|
||||
}
|
||||
);
|
||||
|
||||
modelBuilder.Entity<RecurringPaymentStatus>().HasData(
|
||||
new RecurringPaymentStatus
|
||||
{
|
||||
Id = Guid.Parse("da462422-13b2-45cc-a175-910a225f6fc8"),
|
||||
Name = "Activated"
|
||||
},
|
||||
new RecurringPaymentStatus
|
||||
{
|
||||
Id = Guid.Parse("3ec864d2-8bf5-42fb-ba70-5090301dd816"),
|
||||
Name = "De-Activated"
|
||||
},
|
||||
new RecurringPaymentStatus
|
||||
{
|
||||
Id = Guid.Parse("306856fb-5655-42eb-bf8b-808bb5e84725"),
|
||||
Name = "Completed"
|
||||
},
|
||||
new RecurringPaymentStatus
|
||||
{
|
||||
Id = Guid.Parse("8bfc9346-e092-4a80-acbf-515ae1ef6868"),
|
||||
Name = "Paused"
|
||||
}
|
||||
);
|
||||
|
||||
modelBuilder.Entity<Module>().HasData(
|
||||
new Module
|
||||
{
|
||||
@ -1134,6 +1216,7 @@ namespace Marco.Pms.DataAccess.Data
|
||||
// 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("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("86e80017-0698-4efe-93d0-806de67266e0"), Description = "Recurring Template Management is the automated creation and scheduling of repetitive tasks, processes, or transactions using predefined templates at set intervals to ensure consistent and efficient workflow execution without manual recreation each time.", Name = "Recurring Template Management", ModuleId = new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"), IsActive = true },
|
||||
new Feature { Id = new Guid("fc586e7d-ed1a-45e5-bb51-9f34af98ec13"), Description = "Collection Management is a feature that enables organizations to track, organize, and manage the status and recovery of receivables or assets efficiently throughout their lifecycle, supporting systematic follow-up and resolution of outstanding accounts.", Name = "Collection 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 },
|
||||
|
||||
@ -1206,6 +1289,11 @@ namespace Marco.Pms.DataAccess.Data
|
||||
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." },
|
||||
|
||||
// Recurring Template Management
|
||||
new FeaturePermission { Id = new Guid("6382ea8b-aff2-4cd2-a48f-a652b35825d8"), FeatureId = new Guid("86e80017-0698-4efe-93d0-806de67266e0"), IsEnabled = true, Name = "Manage Recurring", Description = "Manage Recurring Template payment permission allows authorized users to set up, modify, and execute automated recurring payments using predefined templates, ensuring secure and controlled handling of repetitive financial transactions." },
|
||||
new FeaturePermission { Id = new Guid("7ddf2fba-c44d-4fe3-b4ec-690ff70be2e3"), FeatureId = new Guid("86e80017-0698-4efe-93d0-806de67266e0"), IsEnabled = true, Name = "View All Recurring", Description = "The \"View All Recurring Template payment permission\" generally allows users to see and access all recurring payment templates in the system, enabling them to review, manage, and process recurring transactions efficiently." },
|
||||
new FeaturePermission { Id = new Guid("e5d21efe-573d-4a16-a0f8-414d3e442e78"), FeatureId = new Guid("86e80017-0698-4efe-93d0-806de67266e0"), IsEnabled = true, Name = "View Self Recurring", Description = "View Self Recurring Template payment permission allows a user to view and access their own recurring payment templates without editing rights." },
|
||||
|
||||
// Collection Management Feature
|
||||
new FeaturePermission { Id = new Guid("dbf17591-09fe-4c93-9e1a-12db8f5cc5de"), FeatureId = new Guid("fc586e7d-ed1a-45e5-bb51-9f34af98ec13"), IsEnabled = true, Name = "Collection Admin", Description = "Collection Admin is a permission that grants a user full administrative control over collections, including creating, editing, managing access, and deleting collections within a system." },
|
||||
new FeaturePermission { Id = new Guid("c8d7eea5-4033-4aad-9ebe-76de49896830"), FeatureId = new Guid("fc586e7d-ed1a-45e5-bb51-9f34af98ec13"), IsEnabled = true, Name = "View Collection", Description = "View Collection is a permission that allows users to see and browse assets or items within a collection without making any modifications or edits to its contents." },
|
||||
@ -1219,65 +1307,6 @@ namespace Marco.Pms.DataAccess.Data
|
||||
new FeaturePermission { Id = new Guid("7a6cf830-0008-4e03-b31d-0d050cb634f4"), FeatureId = new Guid("6d4c82d6-dbce-48ab-b8b8-f785f4d8c914"), IsEnabled = true, Name = "View Organization", Description = "Allow the user to view information of the organization" }
|
||||
|
||||
);
|
||||
|
||||
modelBuilder.Entity<CurrencyMaster>().HasData(
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("78e96e4a-7ce0-4164-ae3a-c833ad45ec2c"),
|
||||
CurrencyCode = "INR",
|
||||
CurrencyName = "Indian Rupee",
|
||||
Symbol = "₹",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("2f672568-a67b-4961-acb2-a8c7834e1762"),
|
||||
CurrencyCode = "USD",
|
||||
CurrencyName = "US Dollar",
|
||||
Symbol = "$",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("4d1155bb-1448-4d97-a732-96c92eb99c45"),
|
||||
CurrencyCode = "EUR",
|
||||
CurrencyName = "Euro",
|
||||
Symbol = "€",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("3e456237-ef06-4ea1-a261-188c9b0c6df6"),
|
||||
CurrencyCode = "GBP",
|
||||
CurrencyName = "Pound Sterling",
|
||||
Symbol = "£",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("297e237a-56d3-48f6-b39d-ec3991dea8bf"),
|
||||
CurrencyCode = "JPY",
|
||||
CurrencyName = "Japanese Yen",
|
||||
Symbol = "¥",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("efe9b4f6-64d6-446e-a42d-1c7aaf6dd70d"),
|
||||
CurrencyCode = "RUB",
|
||||
CurrencyName = "Russian Ruble",
|
||||
Symbol = "₽",
|
||||
IsActive = true
|
||||
},
|
||||
new CurrencyMaster
|
||||
{
|
||||
Id = Guid.Parse("b960166a-f7e9-49e3-bb4b-28511f126c08"),
|
||||
CurrencyCode = "CNY",
|
||||
CurrencyName = "Chinese Yuan (Renminbi)",
|
||||
Symbol = "¥",
|
||||
IsActive = true
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
7432
Marco.Pms.DataAccess/Migrations/20251104063606_Added_TDSPercentage_Field_In_Expense_Table.Designer.cs
generated
Normal file
7432
Marco.Pms.DataAccess/Migrations/20251104063606_Added_TDSPercentage_Field_In_Expense_Table.Designer.cs
generated
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1,191 @@
|
||||
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_TDSPercentage_Field_In_Expense_Table : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_RecurringPayments_ExpensesStatusMaster_ExpenseStatusId",
|
||||
table: "RecurringPayments");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_RecurringPayments_ExpensesStatusMaster_StatusId",
|
||||
table: "RecurringPayments");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_RecurringPayments_ExpenseStatusId",
|
||||
table: "RecurringPayments");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "ExpenseStatusId",
|
||||
table: "RecurringPayments");
|
||||
|
||||
migrationBuilder.AddColumn<double>(
|
||||
name: "TDSPercentage",
|
||||
table: "PaymentRequests",
|
||||
type: "double",
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "PaymentRequestId",
|
||||
table: "Expenses",
|
||||
type: "char(36)",
|
||||
nullable: true,
|
||||
collation: "ascii_general_ci");
|
||||
|
||||
migrationBuilder.AddColumn<double>(
|
||||
name: "TDSPercentage",
|
||||
table: "Expenses",
|
||||
type: "double",
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "RecurringPaymentStatus",
|
||||
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")
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_RecurringPaymentStatus", x => x.Id);
|
||||
})
|
||||
.Annotation("MySql:CharSet", "utf8mb4");
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "Features",
|
||||
columns: new[] { "Id", "Description", "IsActive", "ModuleId", "Name" },
|
||||
values: new object[] { new Guid("86e80017-0698-4efe-93d0-806de67266e0"), "Recurring Template Management is the automated creation and scheduling of repetitive tasks, processes, or transactions using predefined templates at set intervals to ensure consistent and efficient workflow execution without manual recreation each time.", true, new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"), "Recurring Template Management" });
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "RecurringPaymentStatus",
|
||||
columns: new[] { "Id", "Name" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("306856fb-5655-42eb-bf8b-808bb5e84725"), "Completed" },
|
||||
{ new Guid("3ec864d2-8bf5-42fb-ba70-5090301dd816"), "De-Activated" },
|
||||
{ new Guid("8bfc9346-e092-4a80-acbf-515ae1ef6868"), "Paused" },
|
||||
{ new Guid("da462422-13b2-45cc-a175-910a225f6fc8"), "Activated" }
|
||||
});
|
||||
|
||||
migrationBuilder.InsertData(
|
||||
table: "FeaturePermissions",
|
||||
columns: new[] { "Id", "Description", "FeatureId", "IsEnabled", "Name" },
|
||||
values: new object[,]
|
||||
{
|
||||
{ new Guid("6382ea8b-aff2-4cd2-a48f-a652b35825d8"), "Manage Recurring Template payment permission allows authorized users to set up, modify, and execute automated recurring payments using predefined templates, ensuring secure and controlled handling of repetitive financial transactions.", new Guid("86e80017-0698-4efe-93d0-806de67266e0"), true, "Manage Recurring" },
|
||||
{ new Guid("7ddf2fba-c44d-4fe3-b4ec-690ff70be2e3"), "The \"View All Recurring Template payment permission\" generally allows users to see and access all recurring payment templates in the system, enabling them to review, manage, and process recurring transactions efficiently.", new Guid("86e80017-0698-4efe-93d0-806de67266e0"), true, "View All Recurring" },
|
||||
{ new Guid("e5d21efe-573d-4a16-a0f8-414d3e442e78"), "View Self Recurring Template payment permission allows a user to view and access their own recurring payment templates without editing rights.", new Guid("86e80017-0698-4efe-93d0-806de67266e0"), true, "View Self Recurring" }
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Expenses_PaymentRequestId",
|
||||
table: "Expenses",
|
||||
column: "PaymentRequestId");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Expenses_PaymentRequests_PaymentRequestId",
|
||||
table: "Expenses",
|
||||
column: "PaymentRequestId",
|
||||
principalTable: "PaymentRequests",
|
||||
principalColumn: "Id");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_RecurringPayments_RecurringPaymentStatus_StatusId",
|
||||
table: "RecurringPayments",
|
||||
column: "StatusId",
|
||||
principalTable: "RecurringPaymentStatus",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Expenses_PaymentRequests_PaymentRequestId",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_RecurringPayments_RecurringPaymentStatus_StatusId",
|
||||
table: "RecurringPayments");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "RecurringPaymentStatus");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_Expenses_PaymentRequestId",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("6382ea8b-aff2-4cd2-a48f-a652b35825d8"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("7ddf2fba-c44d-4fe3-b4ec-690ff70be2e3"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "FeaturePermissions",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("e5d21efe-573d-4a16-a0f8-414d3e442e78"));
|
||||
|
||||
migrationBuilder.DeleteData(
|
||||
table: "Features",
|
||||
keyColumn: "Id",
|
||||
keyValue: new Guid("86e80017-0698-4efe-93d0-806de67266e0"));
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "TDSPercentage",
|
||||
table: "PaymentRequests");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "PaymentRequestId",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "TDSPercentage",
|
||||
table: "Expenses");
|
||||
|
||||
migrationBuilder.AddColumn<Guid>(
|
||||
name: "ExpenseStatusId",
|
||||
table: "RecurringPayments",
|
||||
type: "char(36)",
|
||||
nullable: false,
|
||||
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
|
||||
collation: "ascii_general_ci");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_RecurringPayments_ExpenseStatusId",
|
||||
table: "RecurringPayments",
|
||||
column: "ExpenseStatusId");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_RecurringPayments_ExpensesStatusMaster_ExpenseStatusId",
|
||||
table: "RecurringPayments",
|
||||
column: "ExpenseStatusId",
|
||||
principalTable: "ExpensesStatusMaster",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_RecurringPayments_ExpensesStatusMaster_StatusId",
|
||||
table: "RecurringPayments",
|
||||
column: "StatusId",
|
||||
principalTable: "ExpensesStatusMaster",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1955,6 +1955,30 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
Name = "Manage"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("6382ea8b-aff2-4cd2-a48f-a652b35825d8"),
|
||||
Description = "Manage Recurring Template payment permission allows authorized users to set up, modify, and execute automated recurring payments using predefined templates, ensuring secure and controlled handling of repetitive financial transactions.",
|
||||
FeatureId = new Guid("86e80017-0698-4efe-93d0-806de67266e0"),
|
||||
IsEnabled = true,
|
||||
Name = "Manage Recurring"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("7ddf2fba-c44d-4fe3-b4ec-690ff70be2e3"),
|
||||
Description = "The \"View All Recurring Template payment permission\" generally allows users to see and access all recurring payment templates in the system, enabling them to review, manage, and process recurring transactions efficiently.",
|
||||
FeatureId = new Guid("86e80017-0698-4efe-93d0-806de67266e0"),
|
||||
IsEnabled = true,
|
||||
Name = "View All Recurring"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("e5d21efe-573d-4a16-a0f8-414d3e442e78"),
|
||||
Description = "View Self Recurring Template payment permission allows a user to view and access their own recurring payment templates without editing rights.",
|
||||
FeatureId = new Guid("86e80017-0698-4efe-93d0-806de67266e0"),
|
||||
IsEnabled = true,
|
||||
Name = "View Self Recurring"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("dbf17591-09fe-4c93-9e1a-12db8f5cc5de"),
|
||||
Description = "Collection Admin is a permission that grants a user full administrative control over collections, including creating, editing, managing access, and deleting collections within a system.",
|
||||
@ -2344,6 +2368,9 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
b.Property<Guid>("PaymentModeId")
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
b.Property<Guid?>("PaymentRequestId")
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
b.Property<bool>("PreApproved")
|
||||
.HasColumnType("tinyint(1)");
|
||||
|
||||
@ -2363,6 +2390,9 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
.IsRequired()
|
||||
.HasColumnType("longtext");
|
||||
|
||||
b.Property<double?>("TDSPercentage")
|
||||
.HasColumnType("double");
|
||||
|
||||
b.Property<Guid>("TenantId")
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
@ -2391,6 +2421,8 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
|
||||
b.HasIndex("PaymentModeId");
|
||||
|
||||
b.HasIndex("PaymentRequestId");
|
||||
|
||||
b.HasIndex("ProcessedById");
|
||||
|
||||
b.HasIndex("ProjectId");
|
||||
@ -2589,6 +2621,9 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
b.Property<Guid?>("RecurringPaymentId")
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
b.Property<double?>("TDSPercentage")
|
||||
.HasColumnType("double");
|
||||
|
||||
b.Property<Guid>("TenantId")
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
@ -2683,9 +2718,6 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
b.Property<Guid?>("ExpenseCategoryId")
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
b.Property<Guid>("ExpenseStatusId")
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
b.Property<int>("Frequency")
|
||||
.HasColumnType("int");
|
||||
|
||||
@ -2749,8 +2781,6 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
|
||||
b.HasIndex("ExpenseCategoryId");
|
||||
|
||||
b.HasIndex("ExpenseStatusId");
|
||||
|
||||
b.HasIndex("ProjectId");
|
||||
|
||||
b.HasIndex("StatusId");
|
||||
@ -2762,6 +2792,43 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
b.ToTable("RecurringPayments");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Marco.Pms.Model.Expenses.RecurringPaymentStatus", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("char(36)");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasColumnType("longtext");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("RecurringPaymentStatus");
|
||||
|
||||
b.HasData(
|
||||
new
|
||||
{
|
||||
Id = new Guid("da462422-13b2-45cc-a175-910a225f6fc8"),
|
||||
Name = "Activated"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("3ec864d2-8bf5-42fb-ba70-5090301dd816"),
|
||||
Name = "De-Activated"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("306856fb-5655-42eb-bf8b-808bb5e84725"),
|
||||
Name = "Completed"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("8bfc9346-e092-4a80-acbf-515ae1ef6868"),
|
||||
Name = "Paused"
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Marco.Pms.Model.Expenses.StatusPermissionMapping", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
@ -3459,6 +3526,14 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
Name = "Expense Management"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("86e80017-0698-4efe-93d0-806de67266e0"),
|
||||
Description = "Recurring Template Management is the automated creation and scheduling of repetitive tasks, processes, or transactions using predefined templates at set intervals to ensure consistent and efficient workflow execution without manual recreation each time.",
|
||||
IsActive = true,
|
||||
ModuleId = new Guid("bf59fd88-b57a-4d67-bf01-3780f385896b"),
|
||||
Name = "Recurring Template Management"
|
||||
},
|
||||
new
|
||||
{
|
||||
Id = new Guid("fc586e7d-ed1a-45e5-bb51-9f34af98ec13"),
|
||||
Description = "Collection Management is a feature that enables organizations to track, organize, and manage the status and recovery of receivables or assets efficiently throughout their lifecycle, supporting systematic follow-up and resolution of outstanding accounts.",
|
||||
@ -6352,6 +6427,10 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("Marco.Pms.Model.Expenses.PaymentRequest", "PaymentRequest")
|
||||
.WithMany()
|
||||
.HasForeignKey("PaymentRequestId");
|
||||
|
||||
b.HasOne("Marco.Pms.Model.Employees.Employee", "ProcessedBy")
|
||||
.WithMany()
|
||||
.HasForeignKey("ProcessedById");
|
||||
@ -6388,6 +6467,8 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
|
||||
b.Navigation("PaymentMode");
|
||||
|
||||
b.Navigation("PaymentRequest");
|
||||
|
||||
b.Navigation("ProcessedBy");
|
||||
|
||||
b.Navigation("Project");
|
||||
@ -6574,17 +6655,11 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
.WithMany()
|
||||
.HasForeignKey("ExpenseCategoryId");
|
||||
|
||||
b.HasOne("Marco.Pms.Model.Master.ExpensesStatusMaster", "ExpenseStatus")
|
||||
.WithMany()
|
||||
.HasForeignKey("ExpenseStatusId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("Marco.Pms.Model.Projects.Project", "Project")
|
||||
.WithMany()
|
||||
.HasForeignKey("ProjectId");
|
||||
|
||||
b.HasOne("Marco.Pms.Model.Master.ExpensesStatusMaster", "Status")
|
||||
b.HasOne("Marco.Pms.Model.Expenses.RecurringPaymentStatus", "Status")
|
||||
.WithMany()
|
||||
.HasForeignKey("StatusId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@ -6606,8 +6681,6 @@ namespace Marco.Pms.DataAccess.Migrations
|
||||
|
||||
b.Navigation("ExpenseCategory");
|
||||
|
||||
b.Navigation("ExpenseStatus");
|
||||
|
||||
b.Navigation("Project");
|
||||
|
||||
b.Navigation("Status");
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
public Guid ExpenseId { get; set; }
|
||||
public Guid StatusId { get; set; }
|
||||
public string? Comment { get; set; }
|
||||
public double? TDSPercentage { get; set; }
|
||||
public string? ReimburseTransactionId { get; set; }
|
||||
public DateTime? ReimburseDate { get; set; }
|
||||
public Guid? ReimburseById { get; set; }
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
public Guid StatusId { get; set; }
|
||||
public string? Comment { get; set; }
|
||||
public string? PaidTransactionId { get; set; }
|
||||
public double? TDSPercentage { get; set; }
|
||||
public DateTime? PaidAt { get; set; }
|
||||
public Guid? PaidById { get; set; }
|
||||
}
|
||||
|
||||
@ -47,6 +47,10 @@
|
||||
public static readonly Guid DownloadDocument = Guid.Parse("404373d0-860f-490e-a575-1c086ffbce1d");
|
||||
public static readonly Guid VerifyDocument = Guid.Parse("13a1f30f-38d1-41bf-8e7a-b75189aab8e0");
|
||||
|
||||
public static readonly Guid ManageRecurring = Guid.Parse("6382ea8b-aff2-4cd2-a48f-a652b35825d8");
|
||||
public static readonly Guid ViewAllRecurring = Guid.Parse("7ddf2fba-c44d-4fe3-b4ec-690ff70be2e3");
|
||||
public static readonly Guid ViewSelfRecurring = Guid.Parse("e5d21efe-573d-4a16-a0f8-414d3e442e78");
|
||||
|
||||
public static readonly Guid CollectionAdmin = Guid.Parse("dbf17591-09fe-4c93-9e1a-12db8f5cc5de");
|
||||
public static readonly Guid ViewCollection = Guid.Parse("c8d7eea5-4033-4aad-9ebe-76de49896830");
|
||||
public static readonly Guid CreateCollection = Guid.Parse("b93141fd-dbd3-4051-8f57-bf25d18e3555");
|
||||
|
||||
@ -61,7 +61,13 @@ namespace Marco.Pms.Model.Expenses
|
||||
public string? GSTNumber { get; set; }
|
||||
public string SupplerName { get; set; } = string.Empty;
|
||||
public double Amount { get; set; }
|
||||
public double? TDSPercentage { get; set; }
|
||||
public int? NoOfPersons { get; set; }
|
||||
public Guid? PaymentRequestId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("PaymentRequestId")]
|
||||
public PaymentRequest? PaymentRequest { get; set; }
|
||||
public Guid StatusId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
|
||||
@ -22,6 +22,7 @@ namespace Marco.Pms.Model.Expenses
|
||||
[ForeignKey("CurrencyId")]
|
||||
public CurrencyMaster? Currency { get; set; }
|
||||
public double Amount { get; set; }
|
||||
public double? TDSPercentage { get; set; }
|
||||
public DateTime DueDate { get; set; }
|
||||
public Guid? ProjectId { get; set; }
|
||||
|
||||
|
||||
@ -37,11 +37,6 @@ namespace Marco.Pms.Model.Expenses
|
||||
[ValidateNever]
|
||||
[ForeignKey("ExpenseCategoryId")]
|
||||
public ExpensesTypeMaster? ExpenseCategory { get; set; }
|
||||
public Guid ExpenseStatusId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
[ForeignKey("ExpenseStatusId")]
|
||||
public ExpensesStatusMaster? ExpenseStatus { get; set; }
|
||||
public Guid StatusId { get; set; }
|
||||
|
||||
[ValidateNever]
|
||||
|
||||
@ -8,7 +8,7 @@ namespace Marco.Pms.Model.ViewModels.Expanses
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public ProjectInfoVM? Project { get; set; }
|
||||
public ExpensesCategoryMasterVM? ExpensesCategory { get; set; }
|
||||
public ExpensesCategoryMasterVM? ExpenseCategory { get; set; }
|
||||
public PaymentModeMatserVM? PaymentMode { get; set; }
|
||||
public BasicEmployeeVM? PaidBy { get; set; }
|
||||
public BasicEmployeeVM? CreatedBy { get; set; }
|
||||
|
||||
@ -47,8 +47,8 @@ namespace Marco.Pms.Services.Controllers
|
||||
return StatusCode(response.StatusCode, response);
|
||||
}
|
||||
|
||||
[HttpGet("details")]
|
||||
public async Task<IActionResult> GetExpenseDetails([FromQuery] Guid? id, [FromQuery] string? expenseUId)
|
||||
[HttpGet("details/{id?}")]
|
||||
public async Task<IActionResult> GetExpenseDetails(Guid? id, [FromQuery] string? expenseUId)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.GetExpenseDetailsAsync(id, expenseUId, loggedInEmployee, tenantId);
|
||||
@ -199,9 +199,22 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Recurring Payment Functions ===================================================================
|
||||
|
||||
[HttpPost("recurring-payment/create")]
|
||||
public async Task<IActionResult> CreateRecurringPayment([FromBody] RecurringTemplateDto model)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.CreateRecurringPaymentAsync(model, loggedInEmployee, tenantId);
|
||||
|
||||
return StatusCode(response.StatusCode, response);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Advance Payment Functions ===================================================================
|
||||
|
||||
[HttpGet("/get/transactions/{employeeId}")]
|
||||
[HttpGet("get/transactions/{employeeId}")]
|
||||
public async Task<IActionResult> GetAdvancePaymentTransaction(Guid employeeId)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
|
||||
@ -1258,6 +1258,7 @@ namespace Marco.Pms.Services.Helpers
|
||||
{
|
||||
var response = _mapper.Map<ExpenseDetailsMongoDB>(m);
|
||||
|
||||
response.ExpenseUId = $"{m.UIDPrefix}/{m.UIDPostfix:D5}";
|
||||
response.Project = projects.Where(p => p.Id == m.ProjectId).Select(p => _mapper.Map<ProjectBasicMongoDB>(p)).FirstOrDefault() ?? new ProjectBasicMongoDB();
|
||||
response.PaidBy = paidBys.Where(p => p.Id == m.PaidById).Select(p => _mapper.Map<BasicEmployeeMongoDB>(p)).FirstOrDefault() ?? new BasicEmployeeMongoDB();
|
||||
response.CreatedBy = createdBys.Where(e => e.Id == m.CreatedById).Select(e => _mapper.Map<BasicEmployeeMongoDB>(e)).FirstOrDefault() ?? new BasicEmployeeMongoDB();
|
||||
@ -1386,6 +1387,7 @@ namespace Marco.Pms.Services.Helpers
|
||||
|
||||
var response = _mapper.Map<ExpenseDetailsMongoDB>(model);
|
||||
|
||||
response.ExpenseUId = $"{model.UIDPrefix}/{model.UIDPostfix:D5}";
|
||||
response.Project = _mapper.Map<ProjectBasicMongoDB>(project);
|
||||
response.PaidBy = _mapper.Map<BasicEmployeeMongoDB>(paidBy);
|
||||
response.CreatedBy = _mapper.Map<BasicEmployeeMongoDB>(createdBy);
|
||||
|
||||
@ -267,6 +267,14 @@ namespace Marco.Pms.Services.MappingProfiles
|
||||
|
||||
#endregion
|
||||
|
||||
#region ======================================================= Recurring Request =======================================================
|
||||
|
||||
CreateMap<RecurringTemplateDto, RecurringPayment>();
|
||||
//CreateMap<RecurringPayment, PaymentRequestVM>();
|
||||
//CreateMap<RecurringPayment, PaymentRequestDetailsVM>();
|
||||
|
||||
#endregion
|
||||
|
||||
CreateMap<AdvancePaymentTransaction, AdvancePaymentTransactionVM>();
|
||||
|
||||
#endregion
|
||||
|
||||
@ -219,13 +219,11 @@ namespace Marco.Pms.Services.Service
|
||||
|
||||
totalEntites = await expensesQuery.CountAsync();
|
||||
|
||||
var paginatedQuery = expensesQuery
|
||||
// 5. --- Execute Query and Map Results ---
|
||||
var expensesList = await expensesQuery
|
||||
.OrderByDescending(e => e.CreatedAt)
|
||||
.Skip((pageNumber - 1) * pageSize)
|
||||
.Take(pageSize);
|
||||
|
||||
// 5. --- Execute Query and Map Results ---
|
||||
var expensesList = await paginatedQuery.ToListAsync();
|
||||
.Take(pageSize).ToListAsync();
|
||||
|
||||
if (!expensesList.Any())
|
||||
{
|
||||
@ -234,7 +232,12 @@ namespace Marco.Pms.Services.Service
|
||||
}
|
||||
|
||||
//expenseVM = await GetAllExpnesRelatedTables(expensesList, tenantId);
|
||||
expenseVM = _mapper.Map<List<ExpenseList>>(expensesList);
|
||||
expenseVM = expensesList.Select(e =>
|
||||
{
|
||||
var result = _mapper.Map<ExpenseList>(e);
|
||||
result.ExpenseUId = $"{e.UIDPrefix}/{e.UIDPostfix:D5}";
|
||||
return result;
|
||||
}).ToList();
|
||||
totalPages = (int)Math.Ceiling((double)totalEntites / pageSize);
|
||||
|
||||
}
|
||||
@ -312,7 +315,7 @@ namespace Marco.Pms.Services.Service
|
||||
.Include(e => e.PaymentMode)
|
||||
.Include(e => e.ExpenseCategory)
|
||||
.Include(e => e.Status)
|
||||
.AsNoTracking().FirstOrDefaultAsync(e => (e.Id == id || e.ExpenseUId == expenseUId) && e.TenantId == tenantId);
|
||||
.AsNoTracking().FirstOrDefaultAsync(e => (e.Id == id || (e.UIDPrefix + "/" + e.UIDPostfix.ToString().PadLeft(5, '0')) == expenseUId) && e.TenantId == tenantId);
|
||||
|
||||
if (expense == null)
|
||||
{
|
||||
@ -489,15 +492,6 @@ namespace Marco.Pms.Services.Service
|
||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||
return await dbContext.PaymentModeMatser.AsNoTracking().FirstOrDefaultAsync(pm => pm.Id == dto.PaymentModeId);
|
||||
});
|
||||
var expenseUIdTask = Task.Run(async () =>
|
||||
{
|
||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||
var result = await dbContext.Expenses
|
||||
.Where(e => !string.IsNullOrWhiteSpace(e.ExpenseUId)).ToListAsync();
|
||||
return result
|
||||
.Select(e => ExtractNumber(e.ExpenseUId))
|
||||
.OrderByDescending(id => id).FirstOrDefault();
|
||||
});
|
||||
var statusMappingTask = Task.Run(async () =>
|
||||
{
|
||||
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
|
||||
@ -517,7 +511,7 @@ namespace Marco.Pms.Services.Service
|
||||
|
||||
|
||||
// Await all prerequisite checks at once.
|
||||
await Task.WhenAll(hasUploadPermissionTask, projectTask, expenseCategoriesTask, paymentModeTask, statusMappingTask, paidByTask, expenseUIdTask);
|
||||
await Task.WhenAll(hasUploadPermissionTask, projectTask, expenseCategoriesTask, paymentModeTask, statusMappingTask, paidByTask);
|
||||
|
||||
// 2. Aggregate and Check Results
|
||||
if (!await hasUploadPermissionTask)
|
||||
@ -532,7 +526,6 @@ namespace Marco.Pms.Services.Service
|
||||
var paymentMode = await paymentModeTask;
|
||||
var statusMapping = await statusMappingTask;
|
||||
var paidBy = await paidByTask;
|
||||
var lastExpenseUId = expenseUIdTask.Result;
|
||||
|
||||
if (project == null) validationErrors.Add("Project not found.");
|
||||
if (paidBy == null) validationErrors.Add("Paid by employee not found");
|
||||
@ -549,7 +542,6 @@ namespace Marco.Pms.Services.Service
|
||||
return ApiResponse<object>.ErrorResponse("Invalid input data.", errorMessage, 400);
|
||||
}
|
||||
|
||||
var currentexpenseUId = (lastExpenseUId + 1).ToString("D5");
|
||||
|
||||
string uIDPrefix = $"EX/{DateTime.Now:MMyy}";
|
||||
|
||||
@ -561,7 +553,6 @@ namespace Marco.Pms.Services.Service
|
||||
|
||||
// 3. Entity Creation
|
||||
var expense = _mapper.Map<Expenses>(dto);
|
||||
expense.ExpenseUId = $"EX-{currentexpenseUId}";
|
||||
expense.UIDPostfix = uIDPostfix;
|
||||
expense.UIDPrefix = uIDPrefix;
|
||||
expense.CreatedById = loggedInEmployee.Id;
|
||||
@ -587,12 +578,13 @@ namespace Marco.Pms.Services.Service
|
||||
await _cache.AddExpenseByObjectAsync(expense);
|
||||
|
||||
var response = _mapper.Map<ExpenseList>(expense);
|
||||
response.ExpenseUId = $"{expense.UIDPrefix}/{expense.UIDPostfix:D5}";
|
||||
response.PaidBy = _mapper.Map<BasicEmployeeVM>(paidBy);
|
||||
response.Project = _mapper.Map<ProjectInfoVM>(project);
|
||||
response.Status = _mapper.Map<ExpensesStatusMasterVM>(statusMapping!.Status);
|
||||
response.NextStatus = _mapper.Map<List<ExpensesStatusMasterVM>>(statusMapping.NextStatus);
|
||||
response.PaymentMode = _mapper.Map<PaymentModeMatserVM>(paymentMode);
|
||||
response.ExpensesCategory = _mapper.Map<ExpensesCategoryMasterVM>(expenseCategory);
|
||||
response.ExpenseCategory = _mapper.Map<ExpensesCategoryMasterVM>(expenseCategory);
|
||||
|
||||
_logger.LogInfo("Successfully created Expense {ExpenseId} for Project {ProjectId}.", expense.Id, expense.ProjectId);
|
||||
return ApiResponse<object>.SuccessResponse(response, "Expense created successfully.", 201);
|
||||
@ -805,6 +797,7 @@ namespace Marco.Pms.Services.Service
|
||||
// 7. Add Reimbursement if applicable
|
||||
if (model.StatusId == Processed)
|
||||
{
|
||||
expense.TDSPercentage = model.TDSPercentage;
|
||||
var reimbursement = new ExpensesReimburse
|
||||
{
|
||||
ReimburseTransactionId = model.ReimburseTransactionId!,
|
||||
@ -1481,7 +1474,11 @@ namespace Marco.Pms.Services.Service
|
||||
var updateLogsTask = Task.Run(async () =>
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
return await context.StatusUpdateLogs.Include(sul => sul.UpdatedBy).Where(sul => sul.EntityId == paymentRequest.Id && sul.TenantId == tenantId).ToListAsync();
|
||||
return await context.StatusUpdateLogs
|
||||
.Include(sul => sul.UpdatedBy)
|
||||
.Where(sul => sul.EntityId == paymentRequest.Id && sul.TenantId == tenantId)
|
||||
.OrderByDescending(sul => sul.UpdatedAt)
|
||||
.ToListAsync();
|
||||
});
|
||||
|
||||
await Task.WhenAll(nextStatusTask, documentTask, updateLogsTask);
|
||||
@ -1820,6 +1817,7 @@ namespace Marco.Pms.Services.Service
|
||||
paymentRequest.PaidAt = model.PaidAt;
|
||||
paymentRequest.PaidById = model.PaidById;
|
||||
paymentRequest.PaidTransactionId = model.PaidTransactionId;
|
||||
paymentRequest.TDSPercentage = model.TDSPercentage;
|
||||
|
||||
var lastTransaction = await _context.AdvancePaymentTransactions.OrderByDescending(apt => apt.CreatedAt).FirstOrDefaultAsync(apt => apt.TenantId == tenantId);
|
||||
double lastBalance = 0;
|
||||
@ -2284,7 +2282,7 @@ namespace Marco.Pms.Services.Service
|
||||
}
|
||||
}
|
||||
response.PaymentMode = paymentModes.Where(pm => pm.Id == m.PaymentModeId).Select(pm => _mapper.Map<PaymentModeMatserVM>(pm)).FirstOrDefault();
|
||||
response.ExpensesCategory = expenseCategories.Where(ec => ec.Id == m.ExpenseCategoryId).Select(ec => _mapper.Map<ExpensesCategoryMasterVM>(ec)).FirstOrDefault();
|
||||
response.ExpenseCategory = expenseCategories.Where(ec => ec.Id == m.ExpenseCategoryId).Select(ec => _mapper.Map<ExpensesCategoryMasterVM>(ec)).FirstOrDefault();
|
||||
|
||||
return response;
|
||||
}).ToList();
|
||||
@ -2349,6 +2347,7 @@ namespace Marco.Pms.Services.Service
|
||||
|
||||
var response = _mapper.Map<ExpenseDetailsMongoDB>(model);
|
||||
|
||||
response.ExpenseUId = $"{model.UIDPrefix}/{model.UIDPostfix:D5}";
|
||||
response.Project = _mapper.Map<ProjectBasicMongoDB>(model.Project);
|
||||
response.PaidBy = _mapper.Map<BasicEmployeeMongoDB>(model.PaidBy);
|
||||
response.CreatedBy = _mapper.Map<BasicEmployeeMongoDB>(model.CreatedBy);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user