LV1_015 - ประวัติการเปลี่ยนรอบการลงเวลา (ADMIN)
This commit is contained in:
parent
2bf43a52b5
commit
1e556db01a
5 changed files with 112 additions and 11 deletions
|
|
@ -2,6 +2,7 @@
|
||||||
using BMA.EHR.Application.Messaging;
|
using BMA.EHR.Application.Messaging;
|
||||||
using BMA.EHR.Domain.Models.Leave.TimeAttendants;
|
using BMA.EHR.Domain.Models.Leave.TimeAttendants;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants
|
namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants
|
||||||
|
|
@ -51,6 +52,31 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region " Methods "
|
||||||
|
|
||||||
|
public async Task<List<UserDutyTime>> GetListByProfileIdAsync(Guid profileId)
|
||||||
|
{
|
||||||
|
var data = await _dbContext.Set<UserDutyTime>().AsQueryable()
|
||||||
|
.Include(x => x.DutyTime)
|
||||||
|
.Where(x => x.ProfileId == profileId)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<UserDutyTime?> GetExist(Guid profileId,DateTime effectiveDate)
|
||||||
|
{
|
||||||
|
var data = await _dbContext.Set<UserDutyTime>()
|
||||||
|
.Where(x => x.ProfileId == profileId)
|
||||||
|
.Where(x => x.EffectiveDate == effectiveDate)
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ namespace BMA.EHR.Domain.Models.Leave.TimeAttendants
|
||||||
[Required, Comment("รหัสรอบการลงเวลา")]
|
[Required, Comment("รหัสรอบการลงเวลา")]
|
||||||
public Guid DutyTimeId { get; set; } = Guid.Empty;
|
public Guid DutyTimeId { get; set; } = Guid.Empty;
|
||||||
|
|
||||||
|
public DutyTime DutyTime { get; set; }
|
||||||
|
|
||||||
[Comment("วันที่มีผล")]
|
[Comment("วันที่มีผล")]
|
||||||
public DateTime? EffectiveDate { get; set; }
|
public DateTime? EffectiveDate { get; set; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("DutyTimes");
|
b.ToTable("DutyTimes", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.ProcessUserTimeStamp", b =>
|
modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.ProcessUserTimeStamp", b =>
|
||||||
|
|
@ -238,7 +238,7 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("ProcessUserTimeStamps");
|
b.ToTable("ProcessUserTimeStamps", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.UserDutyTime", b =>
|
modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.UserDutyTime", b =>
|
||||||
|
|
@ -310,7 +310,7 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("UserDutyTimes");
|
b.ToTable("UserDutyTimes", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.UserTimeStamp", b =>
|
modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.UserTimeStamp", b =>
|
||||||
|
|
@ -438,7 +438,7 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.ToTable("UserTimeStamps");
|
b.ToTable("UserTimeStamps", (string)null);
|
||||||
});
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using BMA.EHR.Application.Repositories;
|
using Amazon.S3.Model.Internal.MarshallTransformations;
|
||||||
|
using BMA.EHR.Application.Repositories;
|
||||||
using BMA.EHR.Application.Repositories.Leaves.TimeAttendants;
|
using BMA.EHR.Application.Repositories.Leaves.TimeAttendants;
|
||||||
using BMA.EHR.Domain.Common;
|
using BMA.EHR.Domain.Common;
|
||||||
using BMA.EHR.Domain.Models.Leave.TimeAttendants;
|
using BMA.EHR.Domain.Models.Leave.TimeAttendants;
|
||||||
|
|
@ -13,6 +14,7 @@ using Swashbuckle.AspNetCore.Annotations;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using System.Security.Permissions;
|
using System.Security.Permissions;
|
||||||
|
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
|
||||||
|
|
||||||
namespace BMA.EHR.Leave.Service.Controllers
|
namespace BMA.EHR.Leave.Service.Controllers
|
||||||
{
|
{
|
||||||
|
|
@ -638,7 +640,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||||
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public async Task<ActionResult<ResponseObject>> GetTimeRecordAsync([Required] DateTime startDate, [Required] DateTime endDate, int page = 1, int pageSize = 10,string status = "NORMAL", string keyword = "")
|
public async Task<ActionResult<ResponseObject>> GetTimeRecordAsync([Required] DateTime startDate, [Required] DateTime endDate, int page = 1, int pageSize = 10, string status = "NORMAL", string keyword = "")
|
||||||
{
|
{
|
||||||
if (startDate.Date > endDate.Date)
|
if (startDate.Date > endDate.Date)
|
||||||
{
|
{
|
||||||
|
|
@ -736,7 +738,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
FullName = $"{p.Prefix.Name}{p.FirstName} {p.LastName}",
|
FullName = $"{p.Prefix.Name}{p.FirstName} {p.LastName}",
|
||||||
StartTimeMorning = round != null ? round.StartTimeMorning : defaultRound.StartTimeMorning,
|
StartTimeMorning = round != null ? round.StartTimeMorning : defaultRound.StartTimeMorning,
|
||||||
LeaveTimeAfterNoon = round != null ? round.EndTimeAfternoon : defaultRound.EndTimeAfternoon,
|
LeaveTimeAfterNoon = round != null ? round.EndTimeAfternoon : defaultRound.EndTimeAfternoon,
|
||||||
EffectiveDate = p.DutyTimeEffectiveDate
|
EffectiveDate = p.DutyTimeEffectiveDate
|
||||||
};
|
};
|
||||||
resultSet.Add(res);
|
resultSet.Add(res);
|
||||||
}
|
}
|
||||||
|
|
@ -744,7 +746,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
return Success(new { data = resultSet, total = profile.Count });
|
return Success(new { data = resultSet, total = profile.Count });
|
||||||
}
|
}
|
||||||
|
|
||||||
// <summary>
|
/// <summary>
|
||||||
/// LV1_014 - เปลี่ยนรอบการลงเวลา (ADMIN)
|
/// LV1_014 - เปลี่ยนรอบการลงเวลา (ADMIN)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>
|
/// <returns>
|
||||||
|
|
@ -756,9 +758,20 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||||
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||||
[AllowAnonymous]
|
|
||||||
public async Task<ActionResult<ResponseObject>> CreateChangeRoundAsync([FromBody] CreateChangeRoundDto req)
|
public async Task<ActionResult<ResponseObject>> CreateChangeRoundAsync([FromBody] CreateChangeRoundDto req)
|
||||||
{
|
{
|
||||||
|
if (req.EffectiveDate.Date < DateTime.Now.Date)
|
||||||
|
{
|
||||||
|
return Error(new Exception("วันมีผลต้องมากกว่าหรือเท่ากับวันที่ปัจจุบัน"), (int)StatusCodes.Status400BadRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
var old = await _userDutyTimeRepository.GetExist(req.ProfileId, req.EffectiveDate);
|
||||||
|
|
||||||
|
if (old != null)
|
||||||
|
{
|
||||||
|
return Error(new Exception("ไม่สามารถทำรายการได้ เนื่องจากมีการกำหนดรอบการทำงานในวันที่นี้ไว้แล้ว"), (int)StatusCodes.Status400BadRequest);
|
||||||
|
}
|
||||||
|
|
||||||
var data = new UserDutyTime
|
var data = new UserDutyTime
|
||||||
{
|
{
|
||||||
ProfileId = req.ProfileId,
|
ProfileId = req.ProfileId,
|
||||||
|
|
@ -772,6 +785,50 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
return Success();
|
return Success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///LV1_015 - ประวัติการเปลี่ยนรอบการลงเวลา (ADMIN)
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>
|
||||||
|
/// </returns>
|
||||||
|
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
|
||||||
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
||||||
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
||||||
|
[HttpPost("round/{id:guid}")]
|
||||||
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public async Task<ActionResult<ResponseObject>> GetChangeRoundHistoryByProfileIdAsync(Guid id, int page = 1, int pageSize = 10, string keyword = "")
|
||||||
|
{
|
||||||
|
var data = await _userDutyTimeRepository.GetListByProfileIdAsync(id);
|
||||||
|
|
||||||
|
var resultSet = new List<ChangeRoundHistoryDto>();
|
||||||
|
|
||||||
|
if (data != null)
|
||||||
|
{
|
||||||
|
resultSet = data
|
||||||
|
.GroupBy(item => item.ProfileId)
|
||||||
|
.SelectMany(group => group
|
||||||
|
.OrderBy(item => item.EffectiveDate) // เรียงลำดับตาม property ที่คุณต้องการ
|
||||||
|
.Select((item, index) => new ChangeRoundHistoryDto
|
||||||
|
{
|
||||||
|
Round = index + 1,
|
||||||
|
StartTimeMorning = item.DutyTime.StartTimeMorning,
|
||||||
|
LeaveTimeAfternoon = item.DutyTime.EndTimeAfternoon,
|
||||||
|
EffectiveDate = item.EffectiveDate.Value,
|
||||||
|
Remark = item.Remark
|
||||||
|
}))
|
||||||
|
.Skip((page - 1) * pageSize)
|
||||||
|
.Take(pageSize)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return Success(new { data = resultSet, total = data.Count });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
namespace BMA.EHR.Leave.Service.DTOs.ChangeRound
|
||||||
|
{
|
||||||
|
public class ChangeRoundHistoryDto
|
||||||
|
{
|
||||||
|
|
||||||
|
public int Round { get; set; }
|
||||||
|
|
||||||
|
public string StartTimeMorning { get; set; }
|
||||||
|
|
||||||
|
public string LeaveTimeAfternoon { get; set; }
|
||||||
|
|
||||||
|
public DateTime EffectiveDate { get; set; }
|
||||||
|
|
||||||
|
public string Remark { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue