diff --git a/CompanyManagment.App.Contracts/RollCall/IRollCallApplication.cs b/CompanyManagment.App.Contracts/RollCall/IRollCallApplication.cs index 4f1b9423..c8b80af8 100644 --- a/CompanyManagment.App.Contracts/RollCall/IRollCallApplication.cs +++ b/CompanyManagment.App.Contracts/RollCall/IRollCallApplication.cs @@ -32,7 +32,10 @@ namespace CompanyManagment.App.Contracts.RollCall #region Pooya + List GetOverlappedRollCallsWithLeaveInDates(long workshopId, DateTime start, + DateTime end); + List GetUndefinedRollCallWorkFlowsService(long workshopId, DateTime durationStart, DateTime durationEnd); OperationResult RemoveEmployeeRollCallsInDate(long workshopId, long employeeId, string dateFa); diff --git a/CompanyManagment.Application/RollCallApplication.cs b/CompanyManagment.Application/RollCallApplication.cs index d809cd43..03c383ce 100644 --- a/CompanyManagment.Application/RollCallApplication.cs +++ b/CompanyManagment.Application/RollCallApplication.cs @@ -87,7 +87,21 @@ public class RollCallApplication : IRollCallApplication return _rollCallRepository.GetEmployeeRollCallTimeSpanForDuration(employeeId, workshopId, startDateTime, endDateTime); } - public OperationResult RemoveEmployeeRollCallsInDate(long workshopId, long employeeId, string dateFa) + + + + public List GetOverlappedRollCallsWithLeaveInDates(long workshopId, DateTime start, DateTime end) + { + return _rollCallRepository.GetOverlappedRollCallsWithLeaveInDates(workshopId, start, end); + } + + public List GetUndefinedRollCallWorkFlowsService(long workshopId, DateTime durationStart, DateTime durationEnd) + { + return _rollCallRepository.GetUndefinedRollCallWorkFlowsInDates(workshopId, durationStart, durationEnd); + } + + + public OperationResult RemoveEmployeeRollCallsInDate(long workshopId, long employeeId, string dateFa) { OperationResult op = new(); var date = dateFa.ToGeorgianDateTime(); @@ -189,10 +203,10 @@ public class RollCallApplication : IRollCallApplication var employeeStatuses = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(command.EmployeeId) .FirstOrDefault(x => x.WorkshopId == command.WorkshopId)?.Statuses; - var employeeRollCalls = _rollCallRepository.GetWorkshopEmployeeRollCallsForDate(command.WorkshopId, command.EmployeeId, date); + //var employeeRollCalls = _rollCallRepository.GetWorkshopEmployeeRollCallsForDate(command.WorkshopId, command.EmployeeId, date); - if (employeeRollCalls.Any(x => x.EndDate == null)) - return operation.Failed("به دلیل عدم ثبت خروج پرسنل در این تاریخ، شما قادر به افزودن رکورد جدید نمی باشید"); + //if (employeeRollCalls.Any(x => x.EndDate == null && x.)) + // return operation.Failed("به دلیل عدم ثبت خروج پرسنل در این تاریخ، شما قادر به افزودن رکورد جدید نمی باشید"); if (command.RollCallRecords.Any(x => string.IsNullOrWhiteSpace(x.StartTime) || string.IsNullOrWhiteSpace(x.EndTime))) return operation.Failed("ساعات شروع و پایان نمیتوانند خالی باشد"); diff --git a/CompanyManagment.EFCore/Repository/RollCallRepository.cs b/CompanyManagment.EFCore/Repository/RollCallRepository.cs index 2141b28b..c7433e90 100644 --- a/CompanyManagment.EFCore/Repository/RollCallRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallRepository.cs @@ -799,8 +799,8 @@ public class RollCallRepository : RepositoryBase, IRollCallRepos EmployeeFullName = names.FirstOrDefault(e => e.EmployeeId == employeeId)!.EmployeeFullName, DayOfWeekFa = x.StartDate.Value.DayOfWeek.DayOfWeeKToPersian(), StartDayOfWeekFa = x.StartDate.Value.DayOfWeek.DayOfWeeKToPersian(), - EndDayOfWeekFa = x.EndDate.Value.DayOfWeek.DayOfWeeKToPersian(), - TotalWorkingHoursSpan = x.EndDate.Value - x.StartDate.Value + EndDayOfWeekFa = x.EndDate?.DayOfWeek.DayOfWeeKToPersian(), + TotalWorkingHoursSpan = x.EndDate == null? new(): x.EndDate.Value - x.StartDate.Value }).ToList(); } public IEnumerable GetNotSlicedRollCallsByWorkshopId(long workshopId, DateTime durationStart, DateTime durationEnd) diff --git a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/Index.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/Index.cshtml.cs index ef88dbee..84db9325 100644 --- a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/Index.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/Index.cshtml.cs @@ -17,42 +17,42 @@ namespace ServiceHost.Areas.Client.Pages.Company.WorkFlow private readonly IWorkshopApplication _workshopApplication; private readonly IWorkFlowApplication _workFlowApplication; private readonly IRollCallServiceApplication _rollCallServiceApplication; + private readonly IHttpContextAccessor _contextAccessor; + private readonly long _workshopId; public string WorkshopFullName; public int CountRollCall; public bool HasRollCallService; - public IndexModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, IWorkFlowApplication workFlowApplication, IAuthHelper authHelper, IRollCallServiceApplication rollCallServiceApplication) + public IndexModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, IWorkFlowApplication workFlowApplication, IAuthHelper authHelper, IRollCallServiceApplication rollCallServiceApplication, IHttpContextAccessor contextAccessor) { _passwordHasher = passwordHasher; _workshopApplication = workshopApplication; _workFlowApplication = workFlowApplication; _authHelper = authHelper; _rollCallServiceApplication = rollCallServiceApplication; + _contextAccessor = contextAccessor; + + var workshopHash = _contextAccessor.HttpContext?.User.FindFirstValue("WorkshopSlug"); + _workshopId = _passwordHasher.SlugDecrypt(workshopHash); + + if (_workshopId < 1) + throw new InvalidDataException("اختلال در کارگاه"); } public IActionResult OnGet() { - string workshopHash = User.FindFirstValue("WorkshopSlug"); - long workshopId = _passwordHasher.SlugDecrypt(workshopHash); - if (workshopId <= 0) - return BadRequest(); + WorkshopFullName = _workshopApplication.GetWorkshopInfo(_workshopId).WorkshopFullName; + CountRollCall = _workFlowApplication.GetAllWorkFlowCount(_workshopId); - WorkshopFullName = _workshopApplication.GetWorkshopInfo(workshopId).WorkshopFullName; - CountRollCall = _workFlowApplication.GetAllWorkFlowCount(workshopId); - - HasRollCallService = _rollCallServiceApplication.GetActiveServiceByWorkshopId(workshopId) != null; + HasRollCallService = _rollCallServiceApplication.GetActiveServiceByWorkshopId(_workshopId) != null; return Page(); } public IActionResult OnGetCountWorkFlowLayout() { - long accountId = _authHelper.CurrentAccountId(); - string workshopHash = User.FindFirstValue("WorkshopSlug"); - long workshopId = _passwordHasher.SlugDecrypt(workshopHash); - - int countWorkFlowResult = _workFlowApplication.GetCountAllWorkFlows(workshopId); + int countWorkFlowResult = _workFlowApplication.GetCountAllWorkFlows(_workshopId); return new JsonResult(new { diff --git a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml index aab907d3..41f75286 100644 --- a/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml @@ -4,7 +4,7 @@ @{ string clientVersion = _0_Framework.Application.Version.StyleVersion; Layout = "Shared/_ClientLayout"; - ViewData["title"] = " - مدیریت کاربران"; + ViewData["title"] = " - کارپوشه حضور و غیاب"; int index = 1; } @@ -79,7 +79,7 @@ -
  • +
  • قطع شده توسط سیستم @if (@Model.CountWorkFlowCut != 0) @@ -89,15 +89,35 @@
  • -
  • +
  • - عدم ثبت ساعت استراحت + عدم ثبت ساعت استراحت @if (@Model.CountWorkFlowLunchBreak != 0) { @Model.CountWorkFlowLunchBreak }
  • + +
  • +
    + قطع شده مختلط + @if (@Model.CountUndefinedRollCalls != 0) + { + @Model.CountUndefinedRollCalls + } +
    +
  • + +
  • +
    + تداخل مرخصی و حضور و غیاب + @if (@Model.CountRollCallsOverlappingLeave != 0) + { + @Model.CountRollCallsOverlappingLeave + } +
    +
  • @@ -106,14 +126,14 @@
    -
    + @*
    -
    +
    *@
    @@ -135,6 +155,16 @@
    + + + + @@ -159,14 +189,14 @@
    -
    + @*
    -
    +
    *@
    @@ -189,14 +219,14 @@
    -
    + @*
    -
    +
    *@
    @@ -208,7 +238,7 @@
    -
    عدم ثبت ساعت استراحت
    +
    عدم ثبت ساعت استراحت
    @if (@Model.CountWorkFlowLunchBreak != 0) @@ -219,19 +249,79 @@
    -
    + @*
    -
    +
    *@
    + +
    +
    +
    +
    +
    +
    قطع شده مختلط
    +
    +
    + @if (@Model.CountUndefinedRollCalls != 0) + { + @Model.CountUndefinedRollCalls + } +
    + +
    +
    + @*
    + + +
    *@ + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    تداخل مرخصی و حضور و غیاب
    +
    +
    + @if (@Model.CountRollCallsOverlappingLeave != 0) + { + @Model.CountRollCallsOverlappingLeave + } +
    + +
    +
    + @*
    + + +
    *@ + +
    +
    +
    +
    @@ -241,7 +331,7 @@