add: Add Person Profile to Table

This commit is contained in:
Suphonchai Phoonsawat 2024-07-11 14:52:54 +07:00
parent 49eb785a92
commit 96a2c8d94f
13 changed files with 3727 additions and 23 deletions

View file

@ -154,5 +154,11 @@ namespace BMA.EHR.Domain.Models.Leave.Requests
[Comment("สังกัดผู้ยื่นขอ")] [Comment("สังกัดผู้ยื่นขอ")]
public string? OrganizationName { get; set; } = string.Empty; public string? OrganizationName { get; set; } = string.Empty;
public string? Prefix { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
} }
} }

View file

@ -26,5 +26,11 @@ namespace BMA.EHR.Domain.Models.Leave.TimeAttendants
[Required, Comment("รหัส User ของ Keycloak ที่ร้องขอ")] [Required, Comment("รหัส User ของ Keycloak ที่ร้องขอ")]
public Guid KeycloakUserId { get; set; } = Guid.Empty; public Guid KeycloakUserId { get; set; } = Guid.Empty;
public string? Prefix { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
} }
} }

View file

@ -67,9 +67,15 @@ namespace BMA.EHR.Domain.Models.Leave.TimeAttendants
public string? CheckOutStatus { get; set; } = string.Empty; public string? CheckOutStatus { get; set; } = string.Empty;
[Comment("สถานะการของลงเวลาพิเศษ")] [Comment("สถานะการของลงเวลาพิเศษ")]
public string? EditStatus { get; set; } = string.Empty; public string? EditStatus { get; set; } = string.Empty;
[Comment("เหตุผลการอนุมัติ/ไม่อนุมัติขอลงเวลาพิเศษ")] [Comment("เหตุผลการอนุมัติ/ไม่อนุมัติขอลงเวลาพิเศษ")]
public string? EditReason { get; set; } = string.Empty; public string? EditReason { get; set; } = string.Empty;
public string? Prefix { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
} }
} }

View file

@ -37,7 +37,7 @@ namespace BMA.EHR.Domain.Models.Leave.TimeAttendants
public string CheckInImageUrl { get; set; } = string.Empty; public string CheckInImageUrl { get; set; } = string.Empty;
[Comment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-In")] [Comment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-In")]
public string? CheckInRemark { get; set; } = string.Empty; public string? CheckInRemark { get; set; } = string.Empty;
[Required, Comment("พิกัดละติจูด Check-Out")] [Required, Comment("พิกัดละติจูด Check-Out")]
public double CheckOutLat { get; set; } = 0; public double CheckOutLat { get; set; } = 0;
@ -59,5 +59,11 @@ namespace BMA.EHR.Domain.Models.Leave.TimeAttendants
[Comment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-Out")] [Comment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-Out")]
public string? CheckOutRemark { get; set; } = string.Empty; public string? CheckOutRemark { get; set; } = string.Empty;
public string? Prefix { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
} }
} }

View file

@ -0,0 +1,84 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
{
/// <inheritdoc />
public partial class AddPersonDatatoTimeStamp : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "FirstName",
table: "UserTimeStamps",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "LastName",
table: "UserTimeStamps",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "Prefix",
table: "UserTimeStamps",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "FirstName",
table: "ProcessUserTimeStamps",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "LastName",
table: "ProcessUserTimeStamps",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "Prefix",
table: "ProcessUserTimeStamps",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "FirstName",
table: "UserTimeStamps");
migrationBuilder.DropColumn(
name: "LastName",
table: "UserTimeStamps");
migrationBuilder.DropColumn(
name: "Prefix",
table: "UserTimeStamps");
migrationBuilder.DropColumn(
name: "FirstName",
table: "ProcessUserTimeStamps");
migrationBuilder.DropColumn(
name: "LastName",
table: "ProcessUserTimeStamps");
migrationBuilder.DropColumn(
name: "Prefix",
table: "ProcessUserTimeStamps");
}
}
}

View file

@ -0,0 +1,51 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
{
/// <inheritdoc />
public partial class AddPersonDatatoLeaveRequest : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "FirstName",
table: "LeaveRequests",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "LastName",
table: "LeaveRequests",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "Prefix",
table: "LeaveRequests",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "FirstName",
table: "LeaveRequests");
migrationBuilder.DropColumn(
name: "LastName",
table: "LeaveRequests");
migrationBuilder.DropColumn(
name: "Prefix",
table: "LeaveRequests");
}
}
}

View file

@ -0,0 +1,51 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
{
/// <inheritdoc />
public partial class AddPersonDatatoAdditionalLoginRequest : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "FirstName",
table: "AdditionalCheckRequests",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "LastName",
table: "AdditionalCheckRequests",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.AddColumn<string>(
name: "Prefix",
table: "AdditionalCheckRequests",
type: "longtext",
nullable: true)
.Annotation("MySql:CharSet", "utf8mb4");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "FirstName",
table: "AdditionalCheckRequests");
migrationBuilder.DropColumn(
name: "LastName",
table: "AdditionalCheckRequests");
migrationBuilder.DropColumn(
name: "Prefix",
table: "AdditionalCheckRequests");
}
}
}

View file

@ -274,12 +274,18 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnType("longtext") .HasColumnType("longtext")
.HasComment("เรียนใคร"); .HasComment("เรียนใคร");
b.Property<string>("FirstName")
.HasColumnType("longtext");
b.Property<bool>("HajjDayStatus") b.Property<bool>("HajjDayStatus")
.HasColumnType("tinyint(1)"); .HasColumnType("tinyint(1)");
b.Property<Guid>("KeycloakUserId") b.Property<Guid>("KeycloakUserId")
.HasColumnType("char(36)"); .HasColumnType("char(36)");
b.Property<string>("LastName")
.HasColumnType("longtext");
b.Property<string>("LastUpdateFullName") b.Property<string>("LastUpdateFullName")
.IsRequired() .IsRequired()
.HasMaxLength(200) .HasMaxLength(200)
@ -419,6 +425,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnType("longtext") .HasColumnType("longtext")
.HasComment("ตำแหน่งผู้ยื่นขอ"); .HasComment("ตำแหน่งผู้ยื่นขอ");
b.Property<string>("Prefix")
.HasColumnType("longtext");
b.Property<double>("RestDayCurrentTotal") b.Property<double>("RestDayCurrentTotal")
.HasColumnType("double"); .HasColumnType("double");
@ -524,10 +533,16 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnType("longtext") .HasColumnType("longtext")
.HasComment("*หมายเหตุขอลงเวลาพิเศษ"); .HasComment("*หมายเหตุขอลงเวลาพิเศษ");
b.Property<string>("FirstName")
.HasColumnType("longtext");
b.Property<Guid>("KeycloakUserId") b.Property<Guid>("KeycloakUserId")
.HasColumnType("char(36)") .HasColumnType("char(36)")
.HasComment("รหัส User ของ Keycloak ที่ร้องขอ"); .HasComment("รหัส User ของ Keycloak ที่ร้องขอ");
b.Property<string>("LastName")
.HasColumnType("longtext");
b.Property<string>("LastUpdateFullName") b.Property<string>("LastUpdateFullName")
.IsRequired() .IsRequired()
.HasMaxLength(200) .HasMaxLength(200)
@ -547,6 +562,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnOrder(102) .HasColumnOrder(102)
.HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
b.Property<string>("Prefix")
.HasColumnType("longtext");
b.Property<string>("Status") b.Property<string>("Status")
.IsRequired() .IsRequired()
.HasColumnType("longtext") .HasColumnType("longtext")
@ -747,6 +765,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnType("longtext") .HasColumnType("longtext")
.HasComment("สถานะการของลงเวลาพิเศษ"); .HasComment("สถานะการของลงเวลาพิเศษ");
b.Property<string>("FirstName")
.HasColumnType("longtext");
b.Property<bool>("IsLocationCheckIn") b.Property<bool>("IsLocationCheckIn")
.HasColumnType("tinyint(1)") .HasColumnType("tinyint(1)")
.HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-In"); .HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-In");
@ -763,6 +784,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnType("char(36)") .HasColumnType("char(36)")
.HasComment("รหัส User ของ Keycloak"); .HasComment("รหัส User ของ Keycloak");
b.Property<string>("LastName")
.HasColumnType("longtext");
b.Property<string>("LastUpdateFullName") b.Property<string>("LastUpdateFullName")
.IsRequired() .IsRequired()
.HasMaxLength(200) .HasMaxLength(200)
@ -782,6 +806,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnOrder(102) .HasColumnOrder(102)
.HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
b.Property<string>("Prefix")
.HasColumnType("longtext");
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("ProcessUserTimeStamps"); b.ToTable("ProcessUserTimeStamps");
@ -1010,6 +1037,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnOrder(101) .HasColumnOrder(101)
.HasComment("User Id ที่สร้างข้อมูล"); .HasComment("User Id ที่สร้างข้อมูล");
b.Property<string>("FirstName")
.HasColumnType("longtext");
b.Property<bool>("IsLocationCheckIn") b.Property<bool>("IsLocationCheckIn")
.HasColumnType("tinyint(1)") .HasColumnType("tinyint(1)")
.HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-In"); .HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-In");
@ -1026,6 +1056,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnType("char(36)") .HasColumnType("char(36)")
.HasComment("รหัส User ของ Keycloak"); .HasComment("รหัส User ของ Keycloak");
b.Property<string>("LastName")
.HasColumnType("longtext");
b.Property<string>("LastUpdateFullName") b.Property<string>("LastUpdateFullName")
.IsRequired() .IsRequired()
.HasMaxLength(200) .HasMaxLength(200)
@ -1045,6 +1078,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
.HasColumnOrder(102) .HasColumnOrder(102)
.HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ");
b.Property<string>("Prefix")
.HasColumnType("longtext");
b.HasKey("Id"); b.HasKey("Id");
b.ToTable("UserTimeStamps"); b.ToTable("UserTimeStamps");

View file

@ -477,7 +477,10 @@ namespace BMA.EHR.Leave.Service.Controllers
CheckInPOI = data.POI, CheckInPOI = data.POI,
CheckInRemark = data.Remark, CheckInRemark = data.Remark,
CheckInImageUrl = fileName, CheckInImageUrl = fileName,
CheckIn = currentDate CheckIn = currentDate,
Prefix = profile.Prefix,
FirstName = profile.FirstName,
LastName = profile.LastName,
}; };
var checkInStatus = DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) > var checkInStatus = DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) >
@ -502,7 +505,10 @@ namespace BMA.EHR.Leave.Service.Controllers
CheckInRemark = data.Remark, CheckInRemark = data.Remark,
CheckInImageUrl = fileName, CheckInImageUrl = fileName,
CheckIn = currentDate, CheckIn = currentDate,
CheckInStatus = checkInStatus CheckInStatus = checkInStatus,
Prefix = profile.Prefix,
FirstName = profile.FirstName,
LastName = profile.LastName,
}; };
await _userTimeStampRepository.AddAsync(checkin); await _userTimeStampRepository.AddAsync(checkin);
@ -689,7 +695,8 @@ namespace BMA.EHR.Leave.Service.Controllers
.Select(d => new CheckInHistoryForAdminDto .Select(d => new CheckInHistoryForAdminDto
{ {
Id = d.Id, Id = d.Id,
FullName = _userProfileRepository.GetUserFullName(d.KeycloakUserId, AccessToken), //FullName = _userProfileRepository.GetUserFullName(d.KeycloakUserId, AccessToken),
FullName = $"{d.Prefix}{d.FirstName} {d.LastName}",
CheckInDate = d.CheckIn.Date, CheckInDate = d.CheckIn.Date,
CheckInTime = d.CheckIn.ToString("HH:mm:ss"), CheckInTime = d.CheckIn.ToString("HH:mm:ss"),
@ -775,7 +782,9 @@ namespace BMA.EHR.Leave.Service.Controllers
var result = new CheckInDetailForAdminDto var result = new CheckInDetailForAdminDto
{ {
Id = d.Id, Id = d.Id,
FullName = $"{profile.Prefix}{profile.FirstName} {profile.LastName}", // _userProfileRepository.GetUserFullName(d.KeycloakUserId, AccessToken), FullName = $"{d.Prefix}{d.FirstName} {d.LastName}",
//FullName = $"{profile.Prefix}{profile.FirstName} {profile.LastName}", // _userProfileRepository.GetUserFullName(d.KeycloakUserId, AccessToken),
CheckInDate = d.CheckIn.Date, CheckInDate = d.CheckIn.Date,
CheckInTime = d.CheckIn.ToString("HH:mm"), CheckInTime = d.CheckIn.ToString("HH:mm"),
@ -880,22 +889,22 @@ namespace BMA.EHR.Leave.Service.Controllers
foreach (var d in resultData) foreach (var d in resultData)
{ {
var pf = profiles.FirstOrDefault(x => x.Keycloak == d.KeycloakUserId); //var pf = profiles.FirstOrDefault(x => x.Keycloak == d.KeycloakUserId);
if (pf == null) //if (pf == null)
{ //{
pf = await _userProfileRepository.GetProfileByKeycloakIdAsync(d.KeycloakUserId, AccessToken); // pf = await _userProfileRepository.GetProfileByKeycloakIdAsync(d.KeycloakUserId, AccessToken);
if (pf == null) // if (pf == null)
continue; // continue;
else // else
profiles.Add(pf); // profiles.Add(pf);
} //}
//var pf = await _userProfileRepository.GetProfileByKeycloakIdAsync(d.KeycloakUserId, AccessToken); //var pf = await _userProfileRepository.GetProfileByKeycloakIdAsync(d.KeycloakUserId, AccessToken);
//if (pf == null) continue; //if (pf == null) continue;
data.Add(new CheckInProcessHistoryForAdminDto data.Add(new CheckInProcessHistoryForAdminDto
{ {
Id = d.Id, Id = d.Id,
FullName = $"{pf.Prefix}{pf.FirstName} {pf.LastName}", FullName = $"{d.Prefix}{d.FirstName} {d.LastName}",
CheckInDate = d.CheckIn.Date, CheckInDate = d.CheckIn.Date,
CheckInTime = d.CheckIn.ToString("HH:mm"), CheckInTime = d.CheckIn.ToString("HH:mm"),
CheckInLocation = d.CheckInPOI, CheckInLocation = d.CheckInPOI,
@ -909,8 +918,6 @@ namespace BMA.EHR.Leave.Service.Controllers
DateTime.Parse($"{d.CheckIn.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? DateTime.Parse($"{d.CheckIn.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ?
"ABSENT" : "ABSENT" :
"LATE" : "LATE" :
"NORMAL", "NORMAL",
CheckInIsLocation = d.IsLocationCheckIn, CheckInIsLocation = d.IsLocationCheckIn,
CheckInLocationName = d.CheckInLocationName, CheckInLocationName = d.CheckInLocationName,
@ -1157,6 +1164,13 @@ namespace BMA.EHR.Leave.Service.Controllers
return Error("ไม่สามารถขอลงเวลากรณีพิเศษในวันที่มากกว่าวันที่ปัจจุบันได้", StatusCodes.Status400BadRequest); return Error("ไม่สามารถขอลงเวลากรณีพิเศษในวันที่มากกว่าวันที่ปัจจุบันได้", StatusCodes.Status400BadRequest);
} }
var userId = UserId != null ? Guid.Parse(UserId) : Guid.Empty;
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId, AccessToken);
if (profile == null)
{
throw new Exception(GlobalMessages.DataNotFound);
}
var request = new AdditionalCheckRequest var request = new AdditionalCheckRequest
{ {
KeycloakUserId = UserId != null ? Guid.Parse(UserId) : Guid.Empty, KeycloakUserId = UserId != null ? Guid.Parse(UserId) : Guid.Empty,
@ -1164,6 +1178,9 @@ namespace BMA.EHR.Leave.Service.Controllers
CheckInEdit = req.CheckInEdit, CheckInEdit = req.CheckInEdit,
CheckOutEdit = req.CheckOutEdit, CheckOutEdit = req.CheckOutEdit,
Description = req.Description, Description = req.Description,
Prefix = profile.Prefix,
FirstName = profile.FirstName,
LastName = profile.LastName,
}; };
await _additionalCheckRequestRepository.AddAsync(request); await _additionalCheckRequestRepository.AddAsync(request);
@ -1215,7 +1232,8 @@ namespace BMA.EHR.Leave.Service.Controllers
var resObj = new GetAdditionalCheckRequestDto var resObj = new GetAdditionalCheckRequestDto
{ {
Id = data.Id, Id = data.Id,
FullName = $"{profile.Prefix}{profile.FirstName} {profile.LastName}", FullName = $"{data.Prefix}{data.FirstName} {data.LastName}",
//FullName = $"{profile.Prefix}{profile.FirstName} {profile.LastName}",
CreatedAt = data.CreatedAt, CreatedAt = data.CreatedAt,
CheckDate = data.CheckDate, CheckDate = data.CheckDate,
CheckInEdit = data.CheckInEdit, CheckInEdit = data.CheckInEdit,
@ -1308,6 +1326,8 @@ namespace BMA.EHR.Leave.Service.Controllers
if (processTimeStamp == null) if (processTimeStamp == null)
{ {
var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(requestData.KeycloakUserId, AccessToken);
processTimeStamp = new ProcessUserTimeStamp processTimeStamp = new ProcessUserTimeStamp
{ {
KeycloakUserId = requestData.KeycloakUserId, KeycloakUserId = requestData.KeycloakUserId,
@ -1323,7 +1343,11 @@ namespace BMA.EHR.Leave.Service.Controllers
CheckInPOI = "ลงเวลากรณีพิเศษ", CheckInPOI = "ลงเวลากรณีพิเศษ",
CheckOutPOI = "ลงเวลากรณีพิเศษ", CheckOutPOI = "ลงเวลากรณีพิเศษ",
CheckInStatus = req.CheckInStatus, CheckInStatus = req.CheckInStatus,
CheckOutStatus = req.CheckOutStatus CheckOutStatus = req.CheckOutStatus,
Prefix = profile.Prefix,
FirstName = profile.FirstName,
LastName = profile.LastName,
}; };
@ -1454,7 +1478,8 @@ namespace BMA.EHR.Leave.Service.Controllers
var result = new CheckInDetailForAdminDto var result = new CheckInDetailForAdminDto
{ {
Id = d.Id, Id = d.Id,
FullName = _userProfileRepository.GetUserFullName(d.KeycloakUserId, AccessToken), FullName = $"{d.Prefix}{d.FirstName} {d.LastName}",
//FullName = _userProfileRepository.GetUserFullName(d.KeycloakUserId, AccessToken),
CheckInDate = d.CheckIn.Date, CheckInDate = d.CheckIn.Date,
CheckInTime = d.CheckIn.ToString("HH:mm"), CheckInTime = d.CheckIn.ToString("HH:mm"),

View file

@ -176,7 +176,11 @@ namespace BMA.EHR.Leave.Service.Controllers
LeaveSalaryText = req.LeaveSalaryText ?? "", LeaveSalaryText = req.LeaveSalaryText ?? "",
LeaveStatus = "DRAFT", LeaveStatus = "DRAFT",
KeycloakUserId = userId, KeycloakUserId = userId,
ApproveStep = APPROVE_STEP_CREATE ApproveStep = APPROVE_STEP_CREATE,
Prefix = profile.Prefix,
FirstName = profile.FirstName,
LastName = profile.LastName,
}; };
// get leave last // get leave last