fix add employee by client bugs

This commit is contained in:
MahanCh
2025-03-11 18:53:57 +03:30
parent d7d938dfcc
commit c7a99f7ca0
19 changed files with 363 additions and 204 deletions

View File

@@ -1386,6 +1386,11 @@ public static class Tools
/// <returns></returns>
public static bool TryToGeorgianDateTime(this string persianDate, out DateTime georgianDateTime)
{
if (string.IsNullOrWhiteSpace(persianDate))
{
georgianDateTime = new DateTime(3000, 12, 20, new PersianCalendar());
return false;
}
persianDate = persianDate.ToEnglishNumber();
try
{

View File

@@ -13,5 +13,6 @@ public interface ICustomizeWorkshopEmployeeSettingsRepository : IRepository<long
List<CustomizeWorkshopEmployeeSettings> GetBy(long groupId);
List<CustomizeWorkshopEmployeeSettingsViewModel> GetEmployeeSettingsByWorkshopId(long workshopId);
List<CustomizeWorkshopEmployeeSettingsViewModel> GetEmployeeSettingNotInMainGroup(long entityWorkshopId);
void RemoveByWorkshopIdAndEmployeeId(long workshopId, long employeeId);
}

View File

@@ -12,7 +12,7 @@ namespace CompanyManagment.App.Contracts.EmployeeDocuments
OperationResult AddEmployeeDocumentItemForAdmin(AddEmployeeDocumentItem command);
OperationResult AddRangeEmployeeDocumentItems(long workshopId, long employeeId,
OperationResult AddRangeEmployeeDocumentItemsByClient(long workshopId, long employeeId,
List<AddEmployeeDocumentItem> command);
/// <summary>

View File

@@ -1047,16 +1047,14 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
Directory.CreateDirectory(directoryPath);
var filePath1 = Path.Combine(directoryPath) + $@"\1.jpg";
if (System.IO.File.Exists(filePath1))
{
CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture1, filePath1);
}
var filePath2 = Path.Combine(directoryPath) + $@"\2.jpg";
if (System.IO.File.Exists(filePath2))
{
CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture2, filePath2);
}
var rollCallEmployee =
@@ -1085,36 +1083,16 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
}
var rollCallEmployeeStatusResult = _rollCallEmployeeStatusApplication.Create(
new CreateRollCallEmployeeStatus() { RollCallEmployeeId = rollCallEmployee.id });
if (rollCallEmployeeStatusResult.IsSuccedded == false)
{
return rollCallEmployeeStatusResult;
}
if (command.CreateCustomizeEmployeeSettings.GroupId > 0)
{
if (_customizeWorkshopEmployeeSettingsRepository
.Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id) == false)
.Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id))
{
command.CreateCustomizeEmployeeSettings.EmployeeIds = [employee.id];
command.CreateCustomizeEmployeeSettings.WorkshopId = command.WorkshopId;
var resultCreateEmployeeSettings =
_customizeWorkshopSettingsApplication.CreateEmployeesSettingsAndSetChanges(
command.CreateCustomizeEmployeeSettings);
if (resultCreateEmployeeSettings.IsSuccedded == false)
{
return resultCreateEmployeeSettings;
}
_customizeWorkshopEmployeeSettingsRepository.RemoveByWorkshopIdAndEmployeeId(workshop.Id, employee.id);
}
}
}
else if (command.CreateCustomizeEmployeeSettings.GroupId > 0)
{
if (_customizeWorkshopEmployeeSettingsRepository
.Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id) == false)
{
command.CreateCustomizeEmployeeSettings.EmployeeIds = [employee.id];
command.CreateCustomizeEmployeeSettings.WorkshopId = command.WorkshopId;
var resultCreateEmployeeSettings =
@@ -1124,7 +1102,34 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
{
return resultCreateEmployeeSettings;
}
var rollCallEmployeeStatusResult = _rollCallEmployeeStatusApplication.Create(
new CreateRollCallEmployeeStatus() { RollCallEmployeeId = rollCallEmployee.id });
if (rollCallEmployeeStatusResult.IsSuccedded == false)
{
return rollCallEmployeeStatusResult;
}
}
}
else if (command.CreateCustomizeEmployeeSettings.GroupId > 0)
{
if (_customizeWorkshopEmployeeSettingsRepository
.Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id))
{
_customizeWorkshopEmployeeSettingsRepository.RemoveByWorkshopIdAndEmployeeId(workshop.Id, employee.id);
}
command.CreateCustomizeEmployeeSettings.EmployeeIds = [employee.id];
command.CreateCustomizeEmployeeSettings.WorkshopId = command.WorkshopId;
var resultCreateEmployeeSettings =
_customizeWorkshopSettingsApplication.CreateEmployeesSettingsAndSetChanges(
command.CreateCustomizeEmployeeSettings);
if (resultCreateEmployeeSettings.IsSuccedded == false)
{
return resultCreateEmployeeSettings;
}
var rollCallEmployee =
_rollCallEmployeeRepository.GetBy(employee.id, command.WorkshopId);
@@ -1152,7 +1157,7 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
command.EmployeeDocumentItems = command.EmployeeDocumentItems ?? [];
var employeeDocumentResult = _employeeDocumentsApplication.AddRangeEmployeeDocumentItems(command.WorkshopId,
var employeeDocumentResult = _employeeDocumentsApplication.AddRangeEmployeeDocumentItemsByClient(command.WorkshopId,
employee.id, command.EmployeeDocumentItems);
if (employeeDocumentResult.IsSuccedded == false)
@@ -1307,6 +1312,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
return op.Failed("کد ملی با تاریخ تولد وارد شده مطابقت ندارد");
}
}
else if (employee.DateOfBirth.ToFarsi() != birthDate || employee.NationalCode != nationalCode)
{
return op.Failed("کد ملی با تاریخ تولد وارد شده مطابقت ندارد");
}
var leftWorkViewModel = _leftWorkRepository.GetLastLeftWorkByEmployeeIdAndWorkshopId(workshopId, employee.id);
if (leftWorkViewModel == null)

View File

@@ -382,7 +382,7 @@ namespace CompanyManagment.Application
/// <summary>
/// برای افزودن یکباره مدارک در افزودن پرسنل توسط کلاینت
/// </summary>
public OperationResult AddRangeEmployeeDocumentItems(long workshopId, long employeeId, List<AddEmployeeDocumentItem> command)
public OperationResult AddRangeEmployeeDocumentItemsByClient(long workshopId, long employeeId, List<AddEmployeeDocumentItem> command)
{
OperationResult op = new();
@@ -430,7 +430,7 @@ namespace CompanyManagment.Application
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType);
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType, DocumentStatus.SubmittedByClient);
newEntities.Add(newEntity);
}
@@ -438,9 +438,9 @@ namespace CompanyManagment.Application
.Select(x => x.MaxBy(y => y.CreationDate));
//This can bite!
_employeeDocumentItemRepository.RemoveRange(currentItems);
_employeeDocumentItemRepository.SaveChanges();
_employeeDocumentItemRepository.RemoveRange(currentItems);
_employeeDocumentItemRepository.SaveChanges();
entity.UpdateIsConfirmed();
_employeeDocumentItemRepository.AddRange(newEntities);
_employeeDocumentItemRepository.SaveChanges();

View File

@@ -1,4 +1,5 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework_b.Application;
@@ -8,12 +9,15 @@ using Company.Domain.EmployeeAgg;
using Company.Domain.JobAgg;
using Company.Domain.LeftWorkAgg;
using Company.Domain.LeftWorkTempAgg;
using Company.Domain.RollCallEmployeeAgg;
using Company.Domain.RollCallEmployeeStatusAgg;
using Company.Domain.WorkshopAgg;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.Contract;
using CompanyManagment.App.Contracts.LeftWork;
using CompanyManagment.App.Contracts.LeftWorkTemp;
using CompanyManagment.App.Contracts.ReportClient;
using CompanyManagment.App.Contracts.RollCallEmployee;
using OperationResult = _0_Framework.Application.OperationResult;
using Tools = _0_Framework.Application.Tools;
@@ -28,9 +32,11 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
private readonly IJobRepository _jobRepository;
private readonly ICheckoutRepository _checkoutRepository;
private readonly IContractRepository _contractRepository;
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository;
public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository, IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository, IContractRepository contractRepository)
public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository, IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository, IContractRepository contractRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository)
{
_leftWorkTempRepository = leftWorkTempRepository;
_leftWorkRepository = leftWorkRepository;
@@ -39,7 +45,9 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
_jobRepository = jobRepository;
_checkoutRepository = checkoutRepository;
_contractRepository = contractRepository;
}
_rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository;
_rollCallEmployeeRepository = rollCallEmployeeRepository;
}
public async Task<OperationResult> Create(CreateLeftWorkTemp command)
{
@@ -47,7 +55,6 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
foreach (var employee in command.EmployeeIds)
{
var leftWork = _leftWorkRepository.GetByDateAndWorkshopIdAndEmployeeId(command.WorkshopId, employee, Tools.ToGeorgianDateTime(command.LastDayStanding));
#region Validation
if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false)
@@ -58,8 +65,9 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
{
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
}
var leftWork = _leftWorkRepository.GetByDateAndWorkshopIdAndEmployeeId(command.WorkshopId, employee, lastDayStandingDateGr);
if (lastDayStandingDateGr.AddDays(1).Date != leftWorkDateGr)
if (lastDayStandingDateGr.AddDays(1).Date != leftWorkDateGr)
{
return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند");
}
@@ -154,47 +162,47 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
return op.Succcedded();
}
public async Task<OperationResult> AcceptLeftWork(AcceptLeftWorkTemp command)
{
var op = new OperationResult();
if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false)
{
return op.Failed("تاریخ ترک کار وارد شده نامعتبر است");
}
public async Task<OperationResult> AcceptLeftWork(AcceptLeftWorkTemp command)
{
var op = new OperationResult();
if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false)
{
return op.Failed("تاریخ ترک کار وارد شده نامعتبر است");
}
if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingGr) == false)
{
return op.Failed("تاریخ آخرین روز کاری وارد شده نامعتبر است");
}
if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingGr) == false)
{
return op.Failed("تاریخ آخرین روز کاری وارد شده نامعتبر است");
}
if (lastDayStandingGr.AddDays(1).Date != leftWorkDateGr)
{
return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند");
}
if (lastDayStandingGr.AddDays(1).Date != leftWorkDateGr)
{
return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند");
}
var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId);
var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId);
if (leftWorkTemp == null)
{
return op.Failed("ترک کار وارد شده یافت نشد");
}
if (leftWorkTemp == null)
{
return op.Failed("ترک کار وارد شده یافت نشد");
}
if (leftWorkTemp.LeftWorkType != LeftWorkTempType.LeftWork)
{
return op.Failed("اطلاعات وارد شده نامعتبر است");
}
if (leftWorkTemp.LeftWorkType != LeftWorkTempType.LeftWork)
{
return op.Failed("اطلاعات وارد شده نامعتبر است");
}
var leftWork = _leftWorkRepository.Get(leftWorkTemp.LeftWorkId);
var leftWork = _leftWorkRepository.Get(leftWorkTemp.LeftWorkId);
if (leftWork == null)
return op.Failed("شروع به کار پرسنل یافت نشد");
if (leftWork == null)
return op.Failed("شروع به کار پرسنل یافت نشد");
if (leftWork.StartWorkDate >= leftWorkDateGr)
{
return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد");
}
if (leftWork.StartWorkDate >= leftWorkDateGr)
{
return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد");
}
if (_checkoutRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId &&
x.WorkshopId == leftWorkTemp.WorkshopId &&
@@ -203,13 +211,52 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید ");
}
leftWork.Edit(leftWorkDateGr, leftWork.StartWorkDate, leftWork.WorkshopId, leftWork.EmployeeId, leftWork.JobId,
leftWork.IncludeStatus, leftWork.AddBonusesPay, leftWork.AddYearsPay, leftWork.AddLeavePay);
leftWork.Edit(leftWorkDateGr, leftWork.StartWorkDate, leftWork.WorkshopId, leftWork.EmployeeId, leftWork.JobId,
leftWork.IncludeStatus, leftWork.AddBonusesPay, leftWork.AddYearsPay, leftWork.AddLeavePay);
_leftWorkTempRepository.Remove(leftWorkTemp);
await _leftWorkRepository.SaveChangesAsync();
await _leftWorkTempRepository.SaveChangesAsync();
_leftWorkTempRepository.Remove(leftWorkTemp);
await _leftWorkRepository.SaveChangesAsync();
await _leftWorkTempRepository.SaveChangesAsync();
return op.Succcedded();
}
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(leftWork.EmployeeId);
return op.Succcedded();
}
//این متد ترک کار های کارمند را با فعالیت حضور غیاب یکپارچه می کند
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId)
{
//get last leftworks for employee in all workshops
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel() { EmployeeId = employeeId }).GroupBy(x => x.WorkshopId).Select(x =>
{
var leftWork = x.MaxBy(y => y.StartWorkDateGr);
return new LeftWorkViewModel()
{
EmployeeId = employeeId,
WorkshopId = x.Key,
LeftWorkDateGr = leftWork.LeftWorkDateGr.Date.AddDays(-1),
StartWorkDateGr = leftWork.StartWorkDateGr
};
}).ToList();
//get rollCallEmployee associated with those leftworks which have a higher end date than leftworkDate
var rollCallsEmployee = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(employeeId)
.Where(x => leftWorks.Any(y => y.WorkshopId == x.WorkshopId)).ToList();
var joinedList = rollCallsEmployee.Join(leftWorks, x => x.WorkshopId, y => y.WorkshopId, (x, y) => new
{
x.WorkshopId,
x.EmployeeId,
y.LeftWorkDateGr,
Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
});
//shaping up the list to send as parameter to repository
var newRollCallRecords = joinedList.Where(x => x.Status != null).Select(x => new AdjustRollCallEmployeesWithEmployeeLeftWork()
{
LeaveDate = x.LeftWorkDateGr,
RollCallStatusId = x.Status.Id
}).ToList();
if (newRollCallRecords.Count > 0)
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates(newRollCallRecords);
}
}

View File

@@ -168,4 +168,10 @@ public class CustomizeWorkshopEmployeeSettingsRepository(CompanyContext companyC
}).ToList();
}
public void RemoveByWorkshopIdAndEmployeeId(long workshopId, long employeeId)
{
var entity = _companyContext.CustomizeWorkshopEmployeeSettings.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId);
if (entity != null)
Remove(entity);
}
}

View File

@@ -2,8 +2,7 @@
@{
string clientVersion = _0_Framework.Application.Version.StyleVersion;
<link href="~/AssetsClient/css/select2.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
// <link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
<link href="~/assetsclient/pages/employees/css/createemployeemodal.css?ver=@clientVersion" rel="stylesheet" />
var rollCallPath = Context.Request.Path.Value;
@@ -154,7 +153,14 @@
<div class="stepBtnHolder3">
<div class="stepBtnFirst d-flex gap-2 justify-content-center">
<button type="button" class="stepBtn" id="prevStep4">مرحله قبل</button>
<button type="button" class="stepBtn" id="nextStep4">مرحله بعد</button>
@if (rollCallPath == "/Client/Company/RollCall/EmployeeUploadPicture")
{
<button type="button" class="stepBtn disable">مرحله بعد</button>
}
else
{
<button type="button" class="stepBtn" id="nextStep4">مرحله بعد</button>
}
</div>
<div class="w-100 d-flex gap-2 mt-2 justify-content-center">
<button type="button" class="stepBtn cancelButton">انصراف</button>
@@ -263,9 +269,6 @@
<div class="md-overlay"></div>
@* <script src="~/assetsadminnew/libs/sweetalert2/sweetalert2.all.min.js"></script> *@
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
<script src="~/assetsadminnew/libs/sweetalert2/sweetalert2.all.min.js"></script>
<script src="~/assetsclient/libs/cleave/cleave.min.js"></script>
<script src="~/assetsclient/js/site.js?ver=@clientVersion"></script>
<script src="~/assetsclient/js/jquery-mask-v1.13.4.js"></script>

View File

@@ -202,7 +202,7 @@
<div class="col-6">
<button class="btn-create w-100" onclick="openCreateLeftWorkEmployeeModal()">
<span>افزودن ترک کار گروهی</span>
<span>افزودن ترک کار</span>
</button>
</div>
@@ -247,7 +247,7 @@
<path d="M11 13.75L11 8.25" stroke-width="1.5" stroke="white" stroke-linecap="round" />
<path d="M13.75 11L8.25 11" stroke-width="1.5" stroke="white" stroke-linecap="round" />
</svg>
<span>افزودن ترک کار گروهی</span>
<span>افزودن ترک کار</span>
</button>
</div>
@@ -377,9 +377,10 @@
</div>
</div>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
@section Script {
<script src="~/assetsclient/js/site.js?ver=@clintVersion"></script>
<script src="~/AdminTheme/assets/sweet-alert/sweet-alert.min.js"></script>
<script>
var antiForgeryToken = $('@Html.AntiForgeryToken()').val();
var employeesAjaxLoadData = `@Url.Page("./EmployeeList", "EmployeeListAjax")`;

View File

@@ -19,9 +19,9 @@
<div class="container-fluid">
<div class="row">
<div class="col-12 my-1">
<span class="spanTitleText">اسامی پرسنل</span>
<span class="spanTitleText">نام پرسنل</span>
<div class="select-alert">
<select class="form-select select2Option" aria-label="انتخاب پرسنل ..." asp-for="@Model.EmployeeIds" id="employeeSelect" multiple>
<select class="form-select select2EmployeeOption" aria-label="انتخاب پرسنل ..." name="Command.EmployeeIds[]" id="employeeSelect">
</select>
</div>
</div>
@@ -29,14 +29,14 @@
<span class="spanTitleText">تاریخ آخرین روز کاری</span>
<div class="position-relative dayOfWeek">
<span class="lastDayStandingTxt" style="display: none"></span>
<input class="form-control form-control-date text-center lastDayStanding" asp-for="@Model.LastDayStanding" placeholder="تاریخ آخرین روز کاری" style="direction: ltr" />
<input class="form-control form-control-date text-center lastDayStanding" name="Command.LastDayStanding" placeholder="تاریخ آخرین روز کاری" style="direction: ltr" />
</div>
</div>
<div class="col-12 my-1">
<span class="spanTitleText">تاریخ ترک کار</span>
<div class="position-relative dayOfWeek">
<span class="dayOfLeftWorkTxt" style="display: none"></span>
<input class="form-control form-control-date text-center dayOfLeftWork" asp-for="@Model.LeftWorkTime" placeholder="تاریخ ترک کار" style="direction: ltr" />
<input class="form-control form-control-date text-center dayOfLeftWork" name="Command.LeftWorkTime" placeholder="تاریخ ترک کار" style="direction: ltr" />
</div>
</div>
</div>

View File

@@ -14,71 +14,73 @@
</div>
<div class="container-fluid">
<div class="row">
<div class="col-12 my-1">
<span class="spanTitleText">نام بانک</span>
<div class="select-alert select-alert-bank">
<select class="form-select select2Option" aria-label="انتخاب بانک ..." id="bankSelectCreate">
</select>
</div>
</div>
<div class="row">
<input type="hidden" name="Command.HasBankInformation" id="HasBankInformation" asp-for="@Model.HasBankInformation" />
<div class="col-12 my-1">
<span class="spanTitleText">شماره کارت</span>
<input type="text" class="form-control" id="CardNumber" placeholder="شماره کارت را وارد نمائید" style="direction: ltr">
</div>
<div class="col-12 my-1">
<span class="spanTitleText">نام بانک</span>
<div class="select-alert select-alert-bank">
<select class="form-select select2Option" aria-label="انتخاب بانک ..." id="bankSelectCreate">
</select>
</div>
</div>
<div class="col-12 my-1 position-relative">
<span class="spanTitleText">شماره شبا</span>
<input class="form-control" id="ShebaNumber" placeholder="شماره شبا را وارد نمائید" style="direction: ltr" />
</div>
<div class="col-12 my-1">
<span class="spanTitleText">شماره کارت</span>
<input type="text" class="form-control" id="CardNumber" placeholder="شماره کارت را وارد نمائید" style="direction: ltr">
</div>
<div class="col-12 my-1">
<span class="spanTitleText">شماره حساب</span>
<input class="form-control" id="BankAccountNumber" placeholder="شماره حساب را وارد نمائید" style="direction: ltr" />
</div>
<div class="col-12 my-1 position-relative">
<span class="spanTitleText">شماره شبا</span>
<input class="form-control" id="ShebaNumber" placeholder="شماره شبا را وارد نمائید" style="direction: ltr"/>
</div>
<div class="col-12 my-1">
<span class="spanTitleText">شماره حساب</span>
<input class="form-control" id="BankAccountNumber" placeholder="شماره حساب را وارد نمائید" style="direction: ltr"/>
</div>
<div class="col-12 my-1">
<button type="button" class="btnAddNew position-relative" onclick="addDataToTable()" id="addNewItemBtn">
<span class="text-nowrap">افزودن</span>
</button>
<div class="col-12 my-1">
<button type="button" class="btnAddNew position-relative" onclick="addDataToTable()" id="addNewItemBtn">
<span class="text-nowrap">افزودن</span>
</button>
<button type="button" class="btnEditNew position-relative" onclick="saveEditNewItem()" id="editNewItemBtn" style="display: none">
<span class="text-nowrap">ثبت ویرایش</span>
</button>
</div>
<button type="button" class="btnEditNew position-relative" onclick="saveEditNewItem()" id="editNewItemBtn" style="display: none">
<span class="text-nowrap">ثبت ویرایش</span>
</button>
</div>
<div class="col-12 my-1">
<div class="data-load">
<div class="col-12 my-1">
<div class="data-load">
<div class="wrapper" style="display: none">
<div class="Rtable Rtable--collapse">
<div class="wrapper" style="display: none">
<div class="Rtable Rtable--collapse">
<div class="Rtable-row Rtable-row--head align-items-center sticky-div">
<div class="Rtable-cell column-heading width1 d-flex align-items-center">ردیف</div>
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
<div class="Rtable-cell column-heading width3 text-center">تعداد افزودن</div>
<div class="Rtable-cell column-heading width4">بانک</div>
<div class="Rtable-cell column-heading width5 text-end">عملیات</div>
</div>
<div class="Rtable-row Rtable-row--head align-items-center sticky-div">
<div class="Rtable-cell column-heading width1 d-flex align-items-center">ردیف</div>
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
<div class="Rtable-cell column-heading width3 text-center">تعداد افزودن</div>
<div class="Rtable-cell column-heading width4">بانک</div>
<div class="Rtable-cell column-heading width5 text-end">عملیات</div>
</div>
<div class="w-100" id="dataLoad"></div>
</div>
</div>
<div class="w-100" id="dataLoad"></div>
</div>
</div>
<div class="text-center d-flex align-items-center justify-content-center" >
<div id="emptyData">
<img src="/assetsclient/images/empty2.png" width="250px" alt="" class="img-fluid" />
<h5 style="font-size: 14px;">هیچ اطلاعات بانکی را وارد نشده است!</h5>
</div>
</div>
</div>
</div>
<div class="text-center d-flex align-items-center justify-content-center">
<div id="emptyData">
<img src="/assetsclient/images/empty2.png" width="250px" alt="" class="img-fluid"/>
<h5 style="font-size: 14px;">هیچ اطلاعات بانکی را وارد نشده است!</h5>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>

View File

@@ -179,7 +179,7 @@
</div>
</div>
<div id="MainModal" class="modal fade personalListModal" aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
<div id="MainModal" class="modal fade personalListModal" aria-labelledby="myModalLabel" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-md modal-dialog-centered">
<div class="modal-content" id="ModalContent">
</div>

View File

@@ -730,6 +730,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
{
var command = new CreateEmployeeByClient();
command.PersonnelCode = (_personnelCodeApplication.GetLastPersonnelCodeByWorkshop(_workshopId) + 1).ToString();
command.HasRollCallService = _rollCallServiceApplication.IsExistActiveServiceByWorkshopId(_workshopId);
return Partial("../Employees/CreateEmployeeModal", command);
}

View File

@@ -115,26 +115,6 @@
</div>
}
<div Permission="@SubAccountPermissionHelper.LeaveCreatePermissionCode" class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-3 col-xxl-2 mt-3">
<div class="card p-0">
<div class="card-section-btn" id="btnCardLeaveIntro">
<div class="content btn-group">
<button class="btn loadingButton" onclick="location.href='#showmodal=@Url.Page("./Index", "LeaveCreate")';">
<svg width="50" height="50" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin: 0 0 0 10px;">
<path d="M15.0136 3.16469L16.9379 2.84397C18.3733 2.60474 19.091 2.48512 19.6684 2.61708C20.6188 2.83429 21.4044 3.49979 21.7749 4.40156C22 4.9494 22 5.67701 22 7.13222V17.0663C22 18.3394 22 18.9759 21.8269 19.4631C21.466 20.4793 20.5874 21.2235 19.5258 21.4125C19.0168 21.5031 18.3889 21.3984 17.1331 21.1892L15.0136 20.8359C12.6191 20.4368 11.4219 20.2373 10.7109 19.398C10 18.5588 10 17.3451 10 14.9175V9.08305C10 6.65554 10 5.44178 10.7109 4.60255C11.4219 3.76331 12.6191 3.56377 15.0136 3.16469Z" fill="#C4E8E8"/>
<path d="M11.5 8L8 11.5M8 11.5L11.5 15M8 11.5H18" stroke="#23A8A8" stroke-width="1.5" stroke-linecap="round"/>
<path d="M5 22L5 16M2 19H8" stroke="#23A8A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<p class="btn-title text-nowrap m-0">ثبت مرخصی</p>
<div class="spinner-loading loading rounded-0" style="display: none;">
<span class="spinner-border spinner-border-sm loading text-white" role="status" aria-hidden="true"></span>
</div>
</button>
</div>
</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-3 col-xxl-2 mt-3">
<div class="card p-0">
<div class="card-section-btn">
@@ -155,6 +135,47 @@
</div>
</div>
<div class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-3 col-xxl-2 mt-3">
<div class="card p-0">
<div class="card-section-btn">
<div class="content btn-group">
<button class="btn loadingButton" style="border-radius: 10px !important;" onclick="AjaxUrlContentModal('/Client/Company/Employees/EmployeeList?handler=CreateLeftWorkEmployee')">
<svg width="50" height="50" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin: 0 0 0 10px;">
<path d="M12 10C14.2091 10 16 8.20914 16 6C16 3.79086 14.2091 2 12 2C9.79086 2 8 3.79086 8 6C8 8.20914 9.79086 10 12 10Z" fill="#23A8A8" />
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5 22C14.8501 22 14.0251 22 13.5126 21.4874C13 20.9749 13 20.1499 13 18.5C13 16.8501 13 16.0251 13.5126 15.5126C14.0251 15 14.8501 15 16.5 15C18.1499 15 18.9749 15 19.4874 15.5126C20 16.0251 20 16.8501 20 18.5C20 20.1499 20 20.9749 19.4874 21.4874C18.9749 22 18.1499 22 16.5 22ZM15.3569 16.532C15.1291 16.3042 14.7598 16.3042 14.532 16.532C14.3042 16.7598 14.3042 17.1291 14.532 17.3569L15.675 18.5L14.532 19.6431C14.3042 19.8709 14.3042 20.2402 14.532 20.468C14.7598 20.6958 15.1291 20.6958 15.3569 20.468L16.5 19.325L17.6431 20.468C17.8709 20.6958 18.2402 20.6958 18.468 20.468C18.6958 20.2402 18.6958 19.8709 18.468 19.6431L17.325 18.5L18.468 17.3569C18.6958 17.1291 18.6958 16.7598 18.468 16.532C18.2402 16.3042 17.8709 16.3042 17.6431 16.532L16.5 17.675L15.3569 16.532Z" fill="#23A8A8" />
<path d="M18.0947 15.0312C17.6699 15 17.1487 15 16.5 15C14.8501 15 14.0251 15 13.5126 15.5126C13 16.0251 13 16.8501 13 18.5C13 19.6663 13 20.4204 13.1811 20.9433C12.7971 20.9806 12.4025 21 12 21C8.13401 21 5 19.2091 5 17C5 14.7909 8.13401 13 12 13C14.6134 13 16.8924 13.8184 18.0947 15.0312Z" fill="#C4E8E8" />
</svg>
<p class="btn-title text-nowrap m-0">افزودن ترک کار</p>
<div class="spinner-loading loading rounded-0" style="display: none;">
<span class="spinner-border spinner-border-sm loading text-white" role="status" aria-hidden="true"></span>
</div>
</button>
</div>
</div>
</div>
</div>
<div Permission="@SubAccountPermissionHelper.LeaveCreatePermissionCode" class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-3 col-xxl-2 mt-3">
<div class="card p-0">
<div class="card-section-btn" id="btnCardLeaveIntro">
<div class="content btn-group">
<button class="btn loadingButton" onclick="location.href='#showmodal=@Url.Page("./Index", "LeaveCreate")';">
<svg width="50" height="50" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin: 0 0 0 10px;">
<path d="M15.0136 3.16469L16.9379 2.84397C18.3733 2.60474 19.091 2.48512 19.6684 2.61708C20.6188 2.83429 21.4044 3.49979 21.7749 4.40156C22 4.9494 22 5.67701 22 7.13222V17.0663C22 18.3394 22 18.9759 21.8269 19.4631C21.466 20.4793 20.5874 21.2235 19.5258 21.4125C19.0168 21.5031 18.3889 21.3984 17.1331 21.1892L15.0136 20.8359C12.6191 20.4368 11.4219 20.2373 10.7109 19.398C10 18.5588 10 17.3451 10 14.9175V9.08305C10 6.65554 10 5.44178 10.7109 4.60255C11.4219 3.76331 12.6191 3.56377 15.0136 3.16469Z" fill="#C4E8E8"/>
<path d="M11.5 8L8 11.5M8 11.5L11.5 15M8 11.5H18" stroke="#23A8A8" stroke-width="1.5" stroke-linecap="round"/>
<path d="M5 22L5 16M2 19H8" stroke="#23A8A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<p class="btn-title text-nowrap m-0">ثبت مرخصی</p>
<div class="spinner-loading loading rounded-0" style="display: none;">
<span class="spinner-border spinner-border-sm loading text-white" role="status" aria-hidden="true"></span>
</div>
</button>
</div>
</div>
</div>
</div>
<div Permission="@SubAccountPermissionHelper.CreateLoanPermissionCode" class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-3 col-xxl-2 mt-3 @(Model.HasCustomizeCheckoutService != "true" ? "d-none" : "")">
<div class="card p-0">
<div class="card-section-btn">

View File

@@ -192,6 +192,7 @@ function addDataToTable() {
if (!isDuplicate) {
employeeBankInfos.push(employeeData);
$('#HasBankInformation').val(true);
} else {
$('.alert-msg').show();
$('.alert-msg p').text('این داده قبلاً وارد شده است');
@@ -302,6 +303,7 @@ function removeRecordAfterAddNewItem(id) {
$('.select-alert-employee .select2.select2-container.select2-container--default').removeClass("disable");
$('#createData').addClass("disable");
$("#emptyData").removeClass("d-none");
$('#HasBankInformation').val(false);
}
}

View File

@@ -50,6 +50,7 @@ $(document).ready(function () {
});
function checkPicture() {
let currentUrl = window.location.href; // Get the full URL
let hasImgInDemoResult1 = $("#demoResult1 img").length > 0;
@@ -58,12 +59,45 @@ function checkPicture() {
//var hasImgInDemoResult1Empty = hasImgInDemoResult1.attr("src") === "";
//var hasImgInDemoResult2Empty = hasImgInDemoResult2.attr("src") === "";
//const img1 = document.getElementById('pic1');
//const img2 = document.getElementById('pic2');
//const detection1 = await faceapi.detectSingleFace(img1).withFaceLandmarks().withFaceDescriptor();
//const detection2 = await faceapi.detectSingleFace(img2).withFaceLandmarks().withFaceDescriptor();
if ((hasImgInDemoResult2 && !hasImgInDemoResult1) || (!hasImgInDemoResult2 && hasImgInDemoResult1)) {
$("#prevStep4").addClass("disable");
$("#nextStep4").addClass("disable");
} else {
$("#prevStep4").removeClass("disable");
$("#nextStep4").removeClass("disable");
}
//if (detection1 && detection2) {
// const distance = faceapi.euclideanDistance(detection1.descriptor, detection2.descriptor);
// if (distance > 0.45) {
// $('.alert-msg').show();
// $('.alert-msg p').text('چهره اول با چهره دوم مطابقت ندارد');
// setTimeout(function () {
// $('.alert-msg').hide();
// $('.alert-msg p').text('');
// }, 4000);
// $("#prevStep4").addClass("disable");
// $("#nextStep4").addClass("disable");
// $("#save4").addClass("disable").prop("disabled", true);
// return false;
// }
//}
if (hasImgInDemoResult2 && hasImgInDemoResult1) {
if (currentUrl.includes("/Client/Company/Employees/EmployeeList")) {
$("#demoResult1 , #demoResult2").removeClass("cantPass");
$("#demoResult1 , #demoResult2").addClass("canPass");
$("#prevStep4").removeClass("disable");
$("#nextStep4").removeClass("disable");
//$("#prevStep4").removeClass("disable");
//$("#nextStep4").removeClass("disable");
$("#save4").removeClass("disable");
} else {
$("#demoResult1 , #demoResult2").removeClass("cantPass");
@@ -77,8 +111,8 @@ function checkPicture() {
if (currentUrl.includes("/Client/Company/Employees/EmployeeList")) {
$("#demoResult1 , #demoResult2").removeClass("cantPass");
$("#demoResult1 , #demoResult2").addClass("canPass");
$("#prevStep4").removeClass("disable");
$("#nextStep4").removeClass("disable");
//$("#prevStep4").removeClass("disable");
//$("#nextStep4").removeClass("disable");
$("#save4").removeClass("disable");
} else {
$("#demoResult1 , #demoResult2").removeClass("cantPass");
@@ -91,8 +125,8 @@ function checkPicture() {
else {
$("#demoResult1 , #demoResult2").addClass("cantPass");
$("#demoResult1 , #demoResult2").removeClass("canPass");
$("#prevStep4").addClass("disable");
$("#nextStep4").addClass("disable");
//$("#prevStep4").addClass("disable");
//$("#nextStep4").addClass("disable");
$("#save4").addClass("disable");
return false;
}
@@ -248,14 +282,14 @@ $(document).ready(function () {
}
class Step4 extends ModalState {
render() {
render() {
$(".step").hide();
$("#step4").show();
$(".stepStatus").removeClass("active");
$("#step-4").addClass("active");
checkStepStatus();
checkPicture();
checkPicture();
}
next() {
@@ -264,8 +298,10 @@ $(document).ready(function () {
}
}
prev() {
this.modal.setState(this.modal.step3);
prev() {
if (checkPicture()) {
this.modal.setState(this.modal.step3);
}
}
}

View File

@@ -1,5 +1,8 @@
$(document).ready(function () {
$(".select2Option").select2({
var currentUrl = window.location.href;
$(document).ready(function () {
$('.loading').hide();
$(".select2EmployeeOption").select2({
language: "fa",
dir: "rtl",
dropdownParent: $('#MainModal'),
@@ -181,7 +184,7 @@ function ajaxPersonals() {
success: function (response) {
if (response.success) {
var employees = response.data;
var employeeOptionsHtml = '<option value="" disabled>انتخاب پرسنل ...</option>';
var employeeOptionsHtml = '<option value="" disabled selected>انتخاب پرسنل ...</option>';
employees.forEach(function (employee) {
employeeOptionsHtml += `<option value="${employee.id}">${employee.employeeFullName}</option>`;
});
@@ -265,16 +268,10 @@ $("#createData").click(function () {
$('.alert-success-msg p').text('');
}, 1500);
//if (urlPathname.indexOf('/Client/Company/SalaryAid') > -1) {
// $('#salaryaidListAjax').html('');
// $('#PageIndex').val(0);
// pageIndexJs = 0;
// loadSalaryAidList();
// //window.location.reload();
//}
$('#loadEmployeesAjax').html('');
loadEmployee();
if (currentUrl.includes("/Client/Company/Employees/EmployeeList")) {
$('#loadEmployeesAjax').html('');
loadEmployee();
}
loading.hide();
$('#MainModal').modal('hide');

View File

@@ -719,9 +719,7 @@ function loadWorkshopSettingList() {
if (response.success && responseData) {
responseData.groupSettings.forEach(function (item) {
groupOptionsHtml += `<option value="${item.id}" data-name-group="${item.groupName === `اصلی` ? `بدون گروه` : item.groupName}">${item.groupName === `اصلی` ? `بدون گروه` : item.groupName}</option>`;
groupOptionsHtml += `<option value="${item.id}" data-name-group="${item.groupName}">${item.groupName}</option>`;
@@ -747,8 +745,7 @@ function loadWorkshopSettingList() {
$('#TimeOnly').val('');
$('#computeTime').addClass('disable');
}
$('#Friday1').prop('checked', (item.fridayWork === 0 ? true : false));
$('#Friday2').prop('checked', (item.fridayWork === 1 ? true : false));
@@ -768,7 +765,8 @@ $('#workshopSettingSelect').on('change', function () {
let htmlElement = '';
var id = Number($(this).val());
if (id == 0) {
if (id === 0) {
$('#GroupId').val(0);
$('#footer-section').hide();
}

View File

@@ -153,12 +153,16 @@ var runCheckFace1 = async () => {
const detectionPromise1 = await faceapi.detectAllFaces(img1).withFaceLandmarks().withFaceDescriptors();
//...........comment for check..............................
if (detectionPromise1.length === 1) {
//...........comment for check..............................
console.log('یک چهره در تصویر اول شناسایی شد');
checkFace1 = true;
hasErrorPic1 = false;
$('#demoResult1').css('border', '2px dashed #148b8b');
//...........comment for check..............................
$("#prevStep4").removeClass("disable");
$("#nextStep4").removeClass("disable");
$("#save4").removeClass("disable");
$("#save4").prop("disabled", false);
//...........comment for check..............................
console.log('یک چهره در تصویر اول شناسایی شد');
checkFace1 = true;
hasErrorPic1 = false;
$('#demoResult1').css('border', '2px dashed #148b8b');
//...........comment for check..............................
} else if (detectionPromise1.length > 1) {
$('.alert-msg').show();
$('.alert-msg p').text('بیش از یک چهره در تصویر اول شناسایی شد');
@@ -167,6 +171,11 @@ var runCheckFace1 = async () => {
$('.alert-msg p').text('');
}, 4000);
$("#prevStep4").addClass("disable");
$("#nextStep4").addClass("disable");
$("#save4").addClass("disable");
$("#save4").prop("disabled", true);
hasErrorPic1 = true;
$('#next-step').addClass('disable');
@@ -180,6 +189,11 @@ var runCheckFace1 = async () => {
$('.alert-msg p').text('');
}, 4000);
$("#prevStep4").addClass("disable");
$("#nextStep4").addClass("disable");
$("#save4").addClass("disable");
$("#save4").prop("disabled", true);
hasErrorPic1 = true;
$('#next-step').addClass('disable');
@@ -199,13 +213,19 @@ var runCheckFace2 = async () => {
const detectionPromise2 = await faceapi.detectAllFaces(img2).withFaceLandmarks().withFaceDescriptors();
//...........comment for check..............................
if (detectionPromise2.length === 1) {
//...........comment for check..............................
console.log('یک چهره در تصویر دوم شناسایی شد');
checkFace2 = true;
hasErrorPic2 = false;
//...........comment for check..............................
console.log('یک چهره در تصویر دوم شناسایی شد');
$('#demoResult2').css('border', '2px dashed #148b8b');
//...........comment for check..............................
$("#prevStep4").removeClass("disable");
$("#nextStep4").removeClass("disable");
$("#save4").removeClass("disable");
$("#save4").prop("disabled", false);
checkFace2 = true;
hasErrorPic2 = false;
$('#demoResult2').css('border', '2px dashed #148b8b');
//...........comment for check..............................
} else if (detectionPromise2.length > 1) {
$('.alert-msg').show();
$('.alert-msg p').text('بیش از یک چهره در تصویر دوم شناسایی شد');
@@ -214,6 +234,11 @@ var runCheckFace2 = async () => {
$('.alert-msg p').text('');
}, 4000);
$("#prevStep4").addClass("disable");
$("#nextStep4").addClass("disable");
$("#save4").addClass("disable");
$("#save4").prop("disabled", true);
hasErrorPic2 = true;
$('#next-step').addClass('disable');
@@ -227,6 +252,11 @@ var runCheckFace2 = async () => {
$('.alert-msg p').text('');
}, 4000);
$("#prevStep4").addClass("disable");
$("#nextStep4").addClass("disable");
$("#save4").addClass("disable");
$("#save4").prop("disabled", true);
hasErrorPic2 = true;
$('#next-step').addClass('disable');