407 lines
16 KiB
Plaintext
407 lines
16 KiB
Plaintext
@page
|
|
@model ServiceHost.Areas.Client.Pages.Company.RollCall.CurrentDayModel
|
|
@using Version = _0_Framework.Application.Version
|
|
|
|
@{
|
|
ViewData["Title"] = " - " + "لیست حضور و غیاب جاری";
|
|
|
|
string clientVersion = _0_Framework.Application.Version.StyleVersion;
|
|
int index = 1;
|
|
int indexAbsent = 1;
|
|
int indexLeave = 1;
|
|
int i = 0;
|
|
}
|
|
|
|
@section Styles {
|
|
<link href="~/assetsclient/css/table-style.css?ver=@clientVersion" rel="stylesheet" />
|
|
<link href="~/assetsclient/css/table-responsive.css?ver=@clientVersion" rel="stylesheet" />
|
|
<link href="~/assetsclient/css/rollcall-list-table.css?ver=@clientVersion" rel="stylesheet" />
|
|
<link href="~/assetsclient/css/operation-button.css?ver=@clientVersion" rel="stylesheet" />
|
|
<link href="~/AssetsClient/css/dropdown.css?ver=@clientVersion" rel="stylesheet" />
|
|
|
|
<link href="~/AssetsClient/css/filter-search.css?ver=@clientVersion" rel="stylesheet" />
|
|
|
|
<link href="~/assetsclient/pages/rollcall/css/currentday.css?ver=@clientVersion" rel="stylesheet" />
|
|
}
|
|
|
|
|
|
<div class="content-container">
|
|
|
|
<div class="container-fluid">
|
|
<div class="row p-2">
|
|
<div class="col p-0 m-0 d-flex align-items-center justify-content-between">
|
|
<div class="col d-flex align-items-center justify-content-start">
|
|
<img src="~/AssetsClient/images/rollcall.png" alt="" class="img-fluid mx-1" width="45px" />
|
|
<div>
|
|
<h4 class="title d-flex align-items-center">ساعات حضور و غیاب جاری</h4>
|
|
<div class="title d-flex align-items-center">@Model.WorkshopFullName <span class="ms-3 d-none d-md-flex">تاریخ امروز @Model.NowDate</span></div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<a asp-page="/Index" class="back-btn" type="button">
|
|
<span>بازگشت</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<div class="d-block text-center d-md-none">تاریخ امروز @Model.NowDate</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container-fluid">
|
|
<div class="row px-2">
|
|
<div class="col-12 p-0 mb-2 d-none d-md-block">
|
|
<div class="search-box card border-0">
|
|
<div class="d-flex align-items-center gap-2">
|
|
|
|
<div class="col-2 position-relative">
|
|
<input type="text" class="form-control" id="search" placeholder="جستجو ...">
|
|
<button type="button" id="clear-search" class="close-btn-search d-none">
|
|
<svg width="20" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" />
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
|
|
@* <button class="btn-search btn-w-size btn-search-click text-nowrap d-flex align-items-center justify-content-center" id="searchBtn" type="submit">
|
|
<span>جستجو</span>
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
<circle cx="11" cy="11" r="6" stroke="white" />
|
|
<path d="M20 20L17 17" stroke="white" stroke-linecap="round" />
|
|
</svg>
|
|
</button>
|
|
<a asp-page="/Company/RollCall/CaseHistory" class="btn-clear-filter btn-w-size text-nowrap d-flex align-items-center justify-content-center disable" id="filterRemove" style="padding: 7px 10px;">
|
|
<span>حذف جستجو</span>
|
|
</a> *@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<!-- List Items -->
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="widthRightCurrentDay ps-0 d-none d-md-block">
|
|
<div class="card heightRightCurrentDay">
|
|
<div class="wrapper table-rollcall">
|
|
<div class="rollcall-list Rtable Rtable--5cols Rtable--collapse px-1">
|
|
|
|
<div class="Rtable-row Rtable-row--head align-items-center d-flex sticky" style="outline: 6px solid white !important;">
|
|
<div class="Rtable-cell column-heading width1">ردیف</div>
|
|
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
|
|
<div class="Rtable-cell column-heading width3">شماره پرسنلی</div>
|
|
<div class="Rtable-cell column-heading width4 text-end">تاخیر در ورود</div>
|
|
<div class="Rtable-cell column-heading width5 text-center">ورود</div>
|
|
<div class="Rtable-cell column-heading width6 text-center">خروج</div>
|
|
<div class="Rtable-cell column-heading width7 text-start">تعجیل در خروج</div>
|
|
<div class="Rtable-cell column-heading width8 text-center">مجموع ساعات کاری</div>
|
|
</div>
|
|
|
|
@if (@Model.RollCallViewModels.PresentEmployees.Any())
|
|
{
|
|
@foreach (var item in Model.RollCallViewModels.PresentEmployees)
|
|
{
|
|
<div class="Rtable-row align-items-center position-relative openAction employee-row @(Model.RollCallViewModels.PresentEmployees.Count() == 1 ? "radius" : "") @(index == 1 ? "firstRadius" : "") @(index == Model.RollCallViewModels.PresentEmployees.Count() ? "lastRadius" : "" ) @(item.RollCallTimesList.Last().EndDate != null ? "existTimeRollCall" : "")">
|
|
<div class="Rtable-cell width1">
|
|
<div class="Rtable-cell--heading d-none">
|
|
ردیف
|
|
</div>
|
|
<div class="Rtable-cell--content">
|
|
<div class="d-flex justify-content-center align-items-center table-number">
|
|
@(index++)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width2">
|
|
<div class="Rtable-cell--heading d-none">نام پرسنل</div>
|
|
<div class="Rtable-cell--content employee-name">
|
|
@item.EmployeeFullName
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width3">
|
|
<div class="Rtable-cell--content text-center">
|
|
<div class="d-md-none d-none">شماره پرسنلی: </div>
|
|
<div class="d-flex ms-1">@item.PersonnelCode</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width4 position-relative bg-filter">
|
|
<div class="Rtable-cell--content text-center">
|
|
<div class="d-md-none d-none">تاخیر در ورود: </div>
|
|
<div class="d-block ms-1">
|
|
@foreach (var itemTime in item.RollCallTimesList)
|
|
{
|
|
string entryTimeDiff = string.IsNullOrEmpty(itemTime.EntryTimeDifferences) ? "-" : itemTime.EntryTimeDifferences;
|
|
string entryCssClass = entryTimeDiff != "-" && entryTimeDiff.Contains("-") ? "negative-time" :
|
|
entryTimeDiff != "-" && entryTimeDiff.Contains("+") ? "positive-time" : "";
|
|
|
|
if (entryTimeDiff != "-")
|
|
{
|
|
entryTimeDiff = entryTimeDiff.TrimEnd('+', '-');
|
|
}
|
|
|
|
<div class="Rtable-cell--content text-center @entryCssClass">@entryTimeDiff</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width5 position-relative text-center">
|
|
@foreach (var itemTime in item.RollCallTimesList)
|
|
{
|
|
<div class="Rtable-cell--heading">ساعت ورود</div>
|
|
<div style="direction: ltr; z-index: 6; position: relative" class="Rtable-cell--content text-center">
|
|
<div>@(itemTime.StartDate ?? "-")</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
<div class="Rtable-cell width6 position-relative text-center">
|
|
@foreach (var itemTime in item.RollCallTimesList)
|
|
{
|
|
<div class="Rtable-cell--heading">ساعت خروج</div>
|
|
<div style="direction: ltr; z-index: 6; position: relative" class="Rtable-cell--content text-center">
|
|
<div>@(itemTime.EndDate ?? "-")</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
<div class="Rtable-cell position-relative width7 bg-filter">
|
|
<div class="Rtable-cell--content text-center">
|
|
<div class="d-md-none d-none">تعجیل در خروج: </div>
|
|
<div class="d-block ms-1">
|
|
@foreach (var itemTime in item.RollCallTimesList)
|
|
{
|
|
string exitTimeDiff = string.IsNullOrEmpty(itemTime.ExitTimeDifferences) ? "-" : itemTime.ExitTimeDifferences;
|
|
string exitCssClass = exitTimeDiff != "-" && exitTimeDiff.Contains("-") ? "negative-time" :
|
|
exitTimeDiff != "-" && exitTimeDiff.Contains("+") ? "positive-time" : "";
|
|
|
|
if (exitTimeDiff != "-")
|
|
{
|
|
exitTimeDiff = exitTimeDiff.TrimEnd('+', '-');
|
|
}
|
|
|
|
<div class="Rtable-cell--content text-center @exitCssClass">@exitTimeDiff</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell position-relative width8 h-100 bg-filter">
|
|
<div class="Rtable-cell--content text-center">
|
|
<div class="d-md-none d-none">مجموع ساعات کاری: </div>
|
|
<div class="d-flex ms-1">
|
|
@if (item.RollCallTimesList.Last().EndDate == null)
|
|
{
|
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<path d="M12 12L18.1254 16.1694C18.6725 16.5418 19 17.1608 19 17.8227V20.5C19 20.7761 18.7761 21 18.5 21H5.5C5.22386 21 5 20.7761 5 20.5V17.8227C5 17.1608 5.32746 16.5418 5.87462 16.1694L12 12ZM12 12L18.1254 7.83062C18.6725 7.45819 19 6.83917 19 6.17729V3.5C19 3.22386 18.7761 3 18.5 3H5.5C5.22386 3 5 3.22386 5 3.5V6.17729C5 6.83917 5.32746 7.45819 5.87462 7.83062L12 12Z" stroke="#13AEAE" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
|
<path d="M15 20.2071V20.85C15 20.9328 14.9328 21 14.85 21H9.15C9.06716 21 9 20.9328 9 20.85V20.2071C9 20.0745 9.05268 19.9473 9.14645 19.8536L11.4343 17.5657C11.7467 17.2533 12.2533 17.2533 12.5657 17.5657L14.8536 19.8536C14.9473 19.9473 15 20.0745 15 20.2071Z" fill="#13AEAE" />
|
|
<path d="M12 11L17 8H7L12 11Z" fill="#13AEAE" />
|
|
<path d="M12 18V12" stroke="#13AEAE" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
|
</svg>
|
|
}
|
|
else
|
|
{
|
|
@item.TotalWorkingHours
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
<partial name="Company/Partial/_EmptySection"></partial>
|
|
}
|
|
@* <div class="w-100" style="height: 731px; overflow-y: scroll">
|
|
<div></div>
|
|
|
|
</div> *@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="widthLeftCurrentDay ps-0 d-none d-md-block">
|
|
<div class="row p-0 g-3">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="wrapper">
|
|
<div class="rollcall-list Rtable Rtable--5cols Rtable--collapse px-1">
|
|
|
|
<div class="w-100 my-1">
|
|
<div class="absenceHeadColorTop" style="border-radius: 10px 10px 0 0;">عدم حضور</div>
|
|
<div class="Rtable-row Rtable-row--head align-items-center d-flex table-rollcall-absent absenceHeadColor">
|
|
<div class="Rtable-cell column-heading width1">ردیف</div>
|
|
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
|
|
<div class="Rtable-cell column-heading width3">شماره پرسنلی</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="w-100 heightLeftCurrentDay">
|
|
<div></div>
|
|
@if (@Model.RollCallViewModels.AbsentEmployees.Any(x => !x.HasLeave))
|
|
{
|
|
@foreach (var item in Model.RollCallViewModels.AbsentEmployees)
|
|
{
|
|
if (!item.HasLeave)
|
|
{
|
|
<div class="Rtable-row align-items-center position-relative table-rollcall-absent absenceItem absenceItem-row">
|
|
<div class="Rtable-cell width1">
|
|
<div class="Rtable-cell--heading d-none">
|
|
ردیف
|
|
</div>
|
|
<div class="Rtable-cell--content">
|
|
<div class="d-flex justify-content-center align-items-center table-number">
|
|
@(indexAbsent++)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width2">
|
|
<div class="Rtable-cell--heading d-none">نام پرسنل</div>
|
|
<div class="Rtable-cell--content employee-name">
|
|
@item.EmployeeFullName
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width3">
|
|
<div class="Rtable-cell--content text-center">
|
|
<div class="d-md-none d-none">شماره پرسنلی: </div>
|
|
<div class="d-flex ms-1">@item.PersonnelCode</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
<partial name="Company/Partial/_EmptySection"></partial>
|
|
}
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="wrapper">
|
|
<div class="rollcall-list Rtable Rtable--5cols Rtable--collapse px-1">
|
|
|
|
<div class="w-100 my-1">
|
|
<div class="leaveHeadColorTop" style="border-radius: 10px 10px 0 0;">مرخصی</div>
|
|
<div class="Rtable-row Rtable-row--head align-items-center d-flex table-rollcall-leave leaveHeadColor">
|
|
<div class="Rtable-cell column-heading width1">ردیف</div>
|
|
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
|
|
<div class="Rtable-cell column-heading width3">شماره پرسنلی</div>
|
|
<div class="Rtable-cell column-heading width4 text-center">نوع مرخصی</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="w-100 heightLeftCurrentDay">
|
|
<div></div>
|
|
@if (@Model.RollCallViewModels.AbsentEmployees.Any(x => x.HasLeave))
|
|
{
|
|
@foreach (var item in Model.RollCallViewModels.AbsentEmployees)
|
|
{
|
|
if (item.HasLeave)
|
|
{
|
|
<div class="Rtable-row align-items-center position-relative table-rollcall-leave leaveItem leaveItem-row">
|
|
<div class="Rtable-cell width1">
|
|
<div class="Rtable-cell--heading d-none">
|
|
ردیف
|
|
</div>
|
|
<div class="Rtable-cell--content">
|
|
<div class="d-flex justify-content-center align-items-center table-number">
|
|
@(indexLeave++)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width2">
|
|
<div class="Rtable-cell--heading d-none">نام پرسنل</div>
|
|
<div class="Rtable-cell--content employee-name">
|
|
@item.EmployeeFullName
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width3">
|
|
<div class="Rtable-cell--content text-center">
|
|
<div class="d-md-none d-none">شماره پرسنلی: </div>
|
|
<div class="d-flex ms-1">@item.PersonnelCode</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="Rtable-cell width4">
|
|
<div class="Rtable-cell--content text-center">
|
|
<div class="d-md-none d-none"></div>
|
|
<div class="d-flex ms-1">@item.Reason</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
<partial name="Company/Partial/_EmptySection"></partial>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row p-lg-2 d-block d-md-none">
|
|
<div class="card pt-2">
|
|
<div class="col-12">
|
|
<div class="btnsRollCallOnlline">
|
|
<button class="btnRollCallStatus active" onclick="loadRollCallStatus('all')">آنلاین</button>
|
|
<button class="btnRollCallStatus" onclick="loadRollCallStatus('leave')">مرخصی <span id="leaveCount"></span></button>
|
|
<button class="btnRollCallStatus" onclick="loadRollCallStatus('absent')">عدم حضور <span id="absentCount"></span></button>
|
|
</div>
|
|
</div>
|
|
<div class="wrapper">
|
|
<div class="rollcall-list-mobile Rtable Rtable--5cols Rtable--collapse px-1">
|
|
<div class="w-100" id="loadRollCallTypeAjax">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div id="MainModal" class="modal fade" aria-labelledby="myModalLabel" aria-hidden="true" tabindex="-1" data-bs-backdrop="static" style="display: none;">
|
|
<div class="modal-dialog modal-md modalRollCallWidth modal-dialog-centered">
|
|
<div class="modal-content" id="ModalContent">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@section Script {
|
|
<script src="~/assetsclient/js/site.js?ver=@clientVersion"></script>
|
|
<script src="~/AssetsClient/js/dropdown.js?ver=@clientVersion"></script>
|
|
<script>
|
|
var antiForgeryToken = $(`@Html.AntiForgeryToken()`).val();
|
|
var loadRollCallMoreAjax = "@Url.Page("./CurrentDay", "CurrentDayAjax")";
|
|
var loadRollCallAbsentLeaveCountAjax = "@Url.Page("./CurrentDay", "CurrentAjaxCount")";
|
|
|
|
// check and show modal Camera Account And Workshop Setting
|
|
var statusCameraAccountAndWorkshopSettingUrl = `@Url.Page("./Index", "StatusCameraAccountAndWorkshopSetting")`;
|
|
var saveCameraAccountUrl = `@Url.Page("./Index", "SaveCameraAccountAndWorkshopSetting")`;
|
|
</script>
|
|
<script src="~/assetsclient/pages/rollcall/js/currentday.js?ver=@clientVersion"></script>
|
|
}
|