uid autorize for create employee in admin side
This commit is contained in:
@@ -32,20 +32,22 @@ public class UidService : IUidService
|
||||
var json = JsonConvert.SerializeObject(request);
|
||||
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
var requestResult = await _httpClient.PostAsync("person/v2", contentType);
|
||||
try
|
||||
{
|
||||
var requestResult = await _httpClient.PostAsync("person/v2", contentType);
|
||||
if (!requestResult.IsSuccessStatusCode)
|
||||
return null;
|
||||
var responseResult = await requestResult.Content.ReadFromJsonAsync<PersonalInfoResponse>();
|
||||
responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName.ToPersian();
|
||||
responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName.ToPersian();
|
||||
responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName.ToPersian();
|
||||
|
||||
if (responseResult.BasicInformation != null)
|
||||
{
|
||||
responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName?.ToPersian();
|
||||
responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName?.ToPersian();
|
||||
responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName?.ToPersian();
|
||||
}
|
||||
|
||||
return responseResult;
|
||||
}
|
||||
catch (Exception)
|
||||
catch
|
||||
{
|
||||
|
||||
return null;
|
||||
@@ -63,19 +65,12 @@ public class UidService : IUidService
|
||||
};
|
||||
var json = JsonConvert.SerializeObject(request);
|
||||
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
try
|
||||
{
|
||||
var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
|
||||
if (!requestResult.IsSuccessStatusCode)
|
||||
return null;
|
||||
|
||||
var responseResult = await requestResult.Content.ReadFromJsonAsync<MatchMobileWithNationalCodeResponse>();
|
||||
return responseResult;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
|
||||
if (!requestResult.IsSuccessStatusCode)
|
||||
return null;
|
||||
}
|
||||
|
||||
var responseResult = await requestResult.Content.ReadFromJsonAsync<MatchMobileWithNationalCodeResponse>();
|
||||
return responseResult;
|
||||
}
|
||||
}
|
||||
@@ -20,14 +20,14 @@ public class Employee : EntityBase
|
||||
{
|
||||
public Employee(string fName, string lName, string fatherName,
|
||||
DateTime dateOfBirth, DateTime dateOfIssue, string placeOfIssue,
|
||||
string nationalCode, string idNumber, string gender, string nationality,
|
||||
string nationalCode, string idNumber, string gender, string nationality, string idNumberSerial , string idNumberSeri ,
|
||||
string phone = null, string address = null, string state = null, string city = null,
|
||||
string maritalStatus = null, string militaryService = null, string levelOfEducation = null, string fieldOfStudy = null,
|
||||
string bankCardNumber = null, string bankBranch = null, string insuranceCode = null, string insuranceHistoryByYear = null,
|
||||
string insuranceHistoryByMonth = null, string numberOfChildren = null, string officePhone = null,
|
||||
string mclsUserName = null, string mclsPassword = null,
|
||||
string eserviceUserName = null, string eservicePassword = null,
|
||||
string taxOfficeUserName = null, string taxOfficepassword = null, string sanaUserName = null, string sanaPassword = null)
|
||||
string taxOfficeUserName = null, string taxOfficepassword = null, string sanaUserName = null, string sanaPassword = null )
|
||||
{
|
||||
FName = fName;
|
||||
LName = lName;
|
||||
@@ -146,6 +146,15 @@ public class Employee : EntityBase
|
||||
/// آیا پرسنل احراز هویت شده است
|
||||
/// </summary>
|
||||
public bool IsAuthorized { get; set; }
|
||||
/// <summary>
|
||||
/// سریال شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSerial { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// سری شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSeri { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -234,5 +243,39 @@ public class Employee : EntityBase
|
||||
IsAuthorized = true;
|
||||
}
|
||||
|
||||
public void EditAuthorizeEmployee(DateTime dateOfIssue, string placeOfIssue,
|
||||
string phone, string address, string state, string citi,
|
||||
string maritalStatus, string militaryService, string levelOfEducation, string fieldOfStudy,
|
||||
string bankCardNumber, string bankBranch, string insuranceCode, string insuranceHistoryByYear,
|
||||
string insuranceHistoryByMonth, string numberOfChildren, string officePhone,
|
||||
string mclsUserName, string mclsPassword, string eserviceUserName, string eservicePassword, string taxOfficeUserName, string taxOfficepassword, string sanaUserName, string sanaPassword)
|
||||
{
|
||||
DateOfIssue = dateOfIssue;
|
||||
PlaceOfIssue = placeOfIssue;
|
||||
Phone = phone;
|
||||
Address = address;
|
||||
State = state;
|
||||
City = citi;
|
||||
MaritalStatus = maritalStatus;
|
||||
MilitaryService = militaryService;
|
||||
LevelOfEducation = levelOfEducation;
|
||||
FieldOfStudy = fieldOfStudy;
|
||||
BankCardNumber = bankCardNumber;
|
||||
BankBranch = bankBranch;
|
||||
InsuranceCode = insuranceCode;
|
||||
InsuranceHistoryByYear = insuranceHistoryByYear;
|
||||
InsuranceHistoryByMonth = insuranceHistoryByMonth;
|
||||
NumberOfChildren = numberOfChildren;
|
||||
OfficePhone = OfficePhone;
|
||||
MclsUserName = mclsUserName;
|
||||
MclsPassword = mclsPassword;
|
||||
EserviceUserName = eserviceUserName;
|
||||
EservicePassword = eservicePassword;
|
||||
TaxOfficeUserName = taxOfficeUserName;
|
||||
TaxOfficepassword = taxOfficepassword;
|
||||
SanaUserName = sanaUserName;
|
||||
SanaPassword = sanaPassword;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
|
||||
namespace Company.Domain.EmployeeAuthorizeTempAgg;
|
||||
|
||||
public class EmployeeAuthorizeTemp:EntityBase
|
||||
{
|
||||
public EmployeeAuthorizeTemp(Gender gender, string fName, string lName, string fatherName, DateTime birthDate, string nationalCode, string idNumber, string idNumberSerial, string idNumberSeri)
|
||||
{
|
||||
Gender = gender;
|
||||
FName = fName;
|
||||
LName = lName;
|
||||
FatherName = fatherName;
|
||||
BirthDate = birthDate;
|
||||
NationalCode = nationalCode;
|
||||
IdNumber = idNumber;
|
||||
IdNumberSerial = idNumberSerial;
|
||||
IdNumberSeri = idNumberSeri;
|
||||
}
|
||||
|
||||
public Gender Gender { get; private set; }
|
||||
public string FName { get; private set; }
|
||||
public string LName { get; private set; }
|
||||
public string FatherName { get; private set; }
|
||||
public DateTime BirthDate { get; private set; }
|
||||
/// <summary>
|
||||
/// کدملی
|
||||
/// </summary>
|
||||
public string NationalCode { get; set; }
|
||||
/// <summary>
|
||||
/// شماره شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumber { get; set; }
|
||||
/// <summary>
|
||||
/// سریال شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSerial { get; set; }
|
||||
/// <summary>
|
||||
/// سری شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSeri { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Domain;
|
||||
|
||||
namespace Company.Domain.EmployeeAuthorizeTempAgg;
|
||||
|
||||
public interface IEmployeeAuthorizeTempRepository:IRepository<long,EmployeeAuthorizeTemp>
|
||||
{
|
||||
Task<EmployeeAuthorizeTemp> GetByNationalCode(string nationalCode);
|
||||
}
|
||||
@@ -41,6 +41,7 @@ public class ComputingViewModel
|
||||
public string EmployeeFullName { get; set; }
|
||||
public string YearAndMonth { get; set; }
|
||||
|
||||
public bool HasRotatingShift { get; set; }
|
||||
|
||||
//public List<string> holidays;
|
||||
}
|
||||
@@ -94,4 +94,14 @@ public class CreateEmployee
|
||||
public long WorkshopId { get; set; }
|
||||
public long? PersonelCode { get; set; }
|
||||
|
||||
public bool IsAuthorized { get; set; }
|
||||
/// <summary>
|
||||
/// سریال شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSerial { get; set; }
|
||||
/// <summary>
|
||||
/// سری شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSeri { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Employee;
|
||||
|
||||
public class EmployeeDataFromApiViewModel
|
||||
{
|
||||
public Gender Gender { get; set; }
|
||||
public string FName { get; set; }
|
||||
public string LName { get; set; }
|
||||
public string FatherName { get; set; }
|
||||
public string BirthDate { get; set; }
|
||||
/// <summary>
|
||||
/// کدملی
|
||||
/// </summary>
|
||||
public string NationalCode { get; set; }
|
||||
/// <summary>
|
||||
/// شماره شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumber { get; set; }
|
||||
/// <summary>
|
||||
/// سریال شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSerial { get; set; }
|
||||
/// <summary>
|
||||
/// سری شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumberSeri { get; set; }
|
||||
|
||||
}
|
||||
@@ -75,6 +75,8 @@ public interface IEmployeeApplication
|
||||
|
||||
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
|
||||
|
||||
Task<OperationResult<EmployeeDataFromApiViewModel>> GetEmployeeDataFromApi(string nationalCode, string birthDate);
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
@@ -12,6 +12,7 @@ namespace CompanyManagment.App.Contracts.EmployeeDocuments
|
||||
public long WorkshopId { get; set; }
|
||||
public IFormFile PictureFile { get; set; }
|
||||
public DocumentItemLabel Label { get; set; }
|
||||
}
|
||||
public bool WithoutPicture { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,5 +16,6 @@ public class RotatingShiftViewModel
|
||||
public bool IsEveningShift { get; set; }
|
||||
public bool IsNightShift { get; set; }
|
||||
public string RotatingDate { get; set; }
|
||||
public int WinRate { get; set; }
|
||||
|
||||
}
|
||||
@@ -29,6 +29,7 @@ using Company.Domain.RollCallEmployeeAgg;
|
||||
using Company.Domain.CustomizeWorkshopGroupSettingsAgg;
|
||||
using Company.Domain.LeftWorkAgg;
|
||||
using CompanyManagment.App.Contracts.Employee.DTO;
|
||||
using Company.Domain.EmployeeAuthorizeTempAgg;
|
||||
|
||||
namespace CompanyManagment.Application;
|
||||
|
||||
@@ -56,14 +57,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
||||
private readonly ILeftWorkRepository _leftWorkRepository;
|
||||
private readonly IPersonnelCodeRepository _personnelCodeRepository;
|
||||
private readonly IEmployeeClientTempRepository _employeeClientTempRepository;
|
||||
private readonly ICustomizeWorkshopGroupSettingsRepository _customizeWorkshopGroupSettingsRepository;
|
||||
private readonly IEmployeeAuthorizeTempRepository _employeeAuthorizeTempRepository;
|
||||
|
||||
public EmployeeAplication(IEmployeeRepository employeeRepository, CompanyContext context,
|
||||
IWorkshopRepository workShopRepository, IWebHostEnvironment webHostEnvironment,
|
||||
IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IRollCallEmployeeRepository rollCallEmployeeRepository,
|
||||
ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IEmployeeDocumentsApplication employeeDocumentsApplication,
|
||||
IEmployeeBankInformationApplication employeeBankInformationApplication, ILeftWorkTempRepository leftWorkTempRepository,
|
||||
IUidService uidService, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, IPersonnelCodeRepository personnelCodeRepository,
|
||||
IEmployeeClientTempRepository employeeClientTempRepository, ILeftWorkRepository leftWorkRepository) : base(context)
|
||||
public EmployeeAplication(IEmployeeRepository employeeRepository, CompanyContext context, IWorkshopRepository workShopRepository, IWebHostEnvironment webHostEnvironment, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IRollCallEmployeeRepository rollCallEmployeeRepository, ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IEmployeeDocumentsApplication employeeDocumentsApplication, IEmployeeDocumentsRepository employeeDocumentsRepository, IEmployeeBankInformationApplication employeeBankInformationApplication, ILeftWorkTempRepository leftWorkTempRepository, IUidService uidService, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, IPersonnelCodeRepository personnelCodeRepository, IEmployeeClientTempRepository employeeClientTempRepository, ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository, ILeftWorkRepository leftWorkRepository, IEmployeeAuthorizeTempRepository employeeAuthorizeTempRepository) : base(context)
|
||||
{
|
||||
_context = context;
|
||||
_WorkShopRepository = workShopRepository;
|
||||
@@ -79,6 +76,7 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
||||
_personnelCodeRepository = personnelCodeRepository;
|
||||
_employeeClientTempRepository = employeeClientTempRepository;
|
||||
_leftWorkRepository = leftWorkRepository;
|
||||
_employeeAuthorizeTempRepository = employeeAuthorizeTempRepository;
|
||||
_EmployeeRepository = employeeRepository;
|
||||
}
|
||||
|
||||
@@ -203,10 +201,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
||||
var dateOfBirth = command.DateOfBirth != null ? command.DateOfBirth.ToGeorgianDateTime() : initial.ToGeorgianDateTime();
|
||||
var dateOfIssue = command.DateOfIssue != null ? command.DateOfIssue.ToGeorgianDateTime() : initial.ToGeorgianDateTime();
|
||||
|
||||
|
||||
|
||||
var employeeData = new Employee(command.FName, command.LName, command.FatherName, dateOfBirth,
|
||||
dateOfIssue,
|
||||
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality,
|
||||
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality, command.IdNumberSerial, command.IdNumberSeri,
|
||||
command.Phone, command.Address,
|
||||
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
|
||||
command.FieldOfStudy, command.BankCardNumber,
|
||||
@@ -214,7 +212,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
||||
command.InsuranceHistoryByMonth, command.NumberOfChildren, command.OfficePhone, command.MclsUserName, command.MclsPassword, command.EserviceUserName, command.EservicePassword,
|
||||
command.TaxOfficeUserName, command.TaxOfficepassword, command.SanaUserName, command.SanaPassword);
|
||||
|
||||
|
||||
if (command.IsAuthorized)
|
||||
{
|
||||
employeeData.Authorized();
|
||||
}
|
||||
_EmployeeRepository.Create(employeeData);
|
||||
_EmployeeRepository.SaveChanges();
|
||||
|
||||
@@ -1250,10 +1251,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
||||
var idNumber = identityInfo.ShenasnamehNumber == "0" ? identityInfo.NationalId : identityInfo.ShenasnamehNumber;
|
||||
|
||||
var newEmployee = new Employee(basicInfo.FirstName, basicInfo.LastName, basicInfo.FatherName, apiBirthDate,
|
||||
dateOfIssue, null, identityInfo.NationalId, idNumber, gender, "ایرانی");
|
||||
dateOfIssue, null, identityInfo.NationalId, idNumber, gender, "ایرانی", identityInfo.ShenasnameSerial, identityInfo.ShenasnameSeri);
|
||||
newEmployee.Authorized();
|
||||
await _EmployeeRepository.CreateAsync(newEmployee);
|
||||
await _context.SaveChangesAsync();
|
||||
await _EmployeeRepository.SaveChangesAsync();
|
||||
|
||||
return op.Succcedded(new EmployeeByNationalCodeInWorkshopViewModel()
|
||||
{
|
||||
@@ -1486,15 +1487,25 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
||||
{
|
||||
employee.Edit(command.FName, command.LName, command.FatherName, command.BirthDate.ToGeorgianDateTime(),
|
||||
employee.DateOfIssue, employee.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender,
|
||||
command.Nationality,
|
||||
employee.Phone, employee.Address, employee.State, employee.City, employee.MaritalStatus,
|
||||
employee.MilitaryService,
|
||||
command.Nationality, employee.Phone, employee.Address, employee.State, employee.City,
|
||||
command.MaritalStatus, command.MilitaryService,
|
||||
employee.LevelOfEducation, employee.FieldOfStudy, employee.BankCardNumber, employee.BankBranch,
|
||||
employee.InsuranceCode, employee.InsuranceHistoryByYear, employee.InsuranceHistoryByMonth,
|
||||
employee.NumberOfChildren, employee.OfficePhone, employee.MclsUserName, employee.MclsPassword,
|
||||
employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName,
|
||||
employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword);
|
||||
}
|
||||
else
|
||||
{
|
||||
employee.EditAuthorizeEmployee(employee.DateOfIssue, employee.PlaceOfIssue,
|
||||
employee.Phone, employee.Address, employee.State, employee.City, command.MaritalStatus,
|
||||
command.MilitaryService, employee.LevelOfEducation, employee.FieldOfStudy,
|
||||
employee.BankCardNumber, employee.BankBranch, employee.InsuranceCode,
|
||||
employee.InsuranceHistoryByYear, employee.InsuranceHistoryByMonth, employee.NumberOfChildren,
|
||||
employee.OfficePhone, employee.MclsUserName, employee.MclsPassword,
|
||||
employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName,
|
||||
employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword);
|
||||
}
|
||||
await _EmployeeRepository.SaveChangesAsync();
|
||||
|
||||
return op.Succcedded();
|
||||
@@ -1505,5 +1516,105 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
||||
return await _EmployeeRepository.WorkedEmployeesInWorkshopSelectList(workshopId);
|
||||
}
|
||||
|
||||
public async Task<OperationResult<EmployeeDataFromApiViewModel>> GetEmployeeDataFromApi(string nationalCode, string birthDate)
|
||||
{
|
||||
var op = new OperationResult<EmployeeDataFromApiViewModel>();
|
||||
var birthDateGr = birthDate.ToGeorgianDateTime();
|
||||
|
||||
if (_EmployeeRepository.Exists(x => x.NationalCode == nationalCode))
|
||||
{
|
||||
var employee = _EmployeeRepository.GetByNationalCode(nationalCode);
|
||||
|
||||
if (employee.IsAuthorized == false)
|
||||
{
|
||||
var apiResult = await _uidService.GetPersonalInfo(nationalCode, birthDate);
|
||||
|
||||
if (apiResult.ResponseContext.Status.Code != 0)
|
||||
{
|
||||
return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
|
||||
}
|
||||
var basicInfo = apiResult.BasicInformation;
|
||||
var identityInfo = apiResult.IdentificationInformation;
|
||||
|
||||
var gender = basicInfo.GenderEnum switch
|
||||
{
|
||||
Gender.Female => "زن",
|
||||
Gender.Male => "مرد",
|
||||
_ => throw new AggregateException()
|
||||
};
|
||||
|
||||
var idNumber = identityInfo.ShenasnamehNumber == "0" ? identityInfo.NationalId : identityInfo.ShenasnamehNumber;
|
||||
employee.Edit(basicInfo.FirstName, basicInfo.LastName, basicInfo.FatherName, birthDateGr,
|
||||
employee.DateOfIssue, employee.PlaceOfIssue, identityInfo.NationalId, idNumber,
|
||||
gender, "ایرانی", employee.Phone, employee.Address, employee.State, employee.City,
|
||||
employee.MaritalStatus, employee.MilitaryService, employee.LevelOfEducation,
|
||||
employee.FieldOfStudy, employee.BankCardNumber, employee.BankBranch, employee.InsuranceCode, employee.InsuranceHistoryByYear,
|
||||
employee.InsuranceHistoryByMonth, employee.NumberOfChildren,
|
||||
employee.OfficePhone, employee.MclsUserName, employee.MclsPassword,
|
||||
employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName,
|
||||
employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword);
|
||||
|
||||
employee.Authorized();
|
||||
await _EmployeeRepository.SaveChangesAsync();
|
||||
}
|
||||
|
||||
return op.Failed("این پرسنل در بانک اطلاعات موجود میباشد");
|
||||
}
|
||||
else
|
||||
{
|
||||
EmployeeDataFromApiViewModel data;
|
||||
if (_employeeAuthorizeTempRepository.Exists(x => x.NationalCode == nationalCode))
|
||||
{
|
||||
var employeeAuthorizeTemp = await _employeeAuthorizeTempRepository.GetByNationalCode(nationalCode);
|
||||
if (employeeAuthorizeTemp.BirthDate.ToFarsi() != birthDate)
|
||||
{
|
||||
return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
|
||||
}
|
||||
|
||||
data = new EmployeeDataFromApiViewModel()
|
||||
{
|
||||
BirthDate = employeeAuthorizeTemp.BirthDate.ToFarsi(),
|
||||
NationalCode = employeeAuthorizeTemp.NationalCode,
|
||||
IdNumber = employeeAuthorizeTemp.IdNumber,
|
||||
FName = employeeAuthorizeTemp.FName,
|
||||
FatherName = employeeAuthorizeTemp.FatherName,
|
||||
Gender = employeeAuthorizeTemp.Gender,
|
||||
LName = employeeAuthorizeTemp.LName,
|
||||
};
|
||||
return op.Succcedded(data);
|
||||
}
|
||||
var apiResult = await _uidService.GetPersonalInfo(nationalCode, birthDate);
|
||||
|
||||
if (apiResult.ResponseContext.Status.Code != 0)
|
||||
{
|
||||
return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
|
||||
}
|
||||
var basicInfo = apiResult.BasicInformation;
|
||||
var identityInfo = apiResult.IdentificationInformation;
|
||||
|
||||
data = new EmployeeDataFromApiViewModel()
|
||||
{
|
||||
BirthDate = identityInfo.BirthDate,
|
||||
NationalCode = identityInfo.NationalId,
|
||||
IdNumber = identityInfo.ShenasnamehNumber == "0" ? identityInfo.NationalId : identityInfo.ShenasnamehNumber,
|
||||
FatherName = basicInfo.FatherName,
|
||||
FName = basicInfo.FirstName,
|
||||
Gender = basicInfo.GenderEnum,
|
||||
LName = basicInfo.LastName,
|
||||
IdNumberSeri = identityInfo.ShenasnameSeri,
|
||||
IdNumberSerial = identityInfo.ShenasnameSerial
|
||||
};
|
||||
|
||||
var newAuthorizeTemp = new EmployeeAuthorizeTemp(data.Gender, data.FName, data.LName, data.FatherName, birthDateGr, data.NationalCode, data.IdNumber, data.IdNumberSerial, data.IdNumberSeri);
|
||||
await _employeeAuthorizeTempRepository.CreateAsync(newAuthorizeTemp);
|
||||
await _employeeAuthorizeTempRepository.SaveChangesAsync();
|
||||
|
||||
return op.Succcedded(data);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -1414,27 +1414,42 @@ namespace CompanyManagment.Application
|
||||
{
|
||||
var opCreate = Create(new CreateEmployeeDocuments()
|
||||
{ EmployeeId = employeeId, WorkshopId = workshopId });
|
||||
if (opCreate.IsSuccedded == false) return opCreate;
|
||||
entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopId(employeeId, workshopId);
|
||||
|
||||
if (opCreate.IsSuccedded == false)
|
||||
return opCreate;
|
||||
|
||||
entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
|
||||
}
|
||||
|
||||
List<EmployeeDocumentItem> newEntities = new();
|
||||
foreach (var item in command)
|
||||
{
|
||||
DeleteMultipleUnsubmittedDocumentsByLabel(entity, item.Label, uploaderType);
|
||||
long mediaId = 0;
|
||||
if (item.WithoutPicture)
|
||||
{
|
||||
var employeeDocumentItem =
|
||||
entity.EmployeeDocumentItemCollection.First(x => x.DocumentLabel == item.Label);
|
||||
mediaId = employeeDocumentItem.MediaId;
|
||||
}
|
||||
else
|
||||
{
|
||||
DeleteMultipleUnsubmittedDocumentsByLabel(entity, item.Label, uploaderType);
|
||||
|
||||
var mediaOpResult = UploadDocumentItemFile(item.PictureFile, item.Label.ToString(),
|
||||
$"temp/{workshopId}/{employeeId}");
|
||||
var mediaOpResult = UploadDocumentItemFile(item.PictureFile, item.Label.ToString(),
|
||||
$"temp/{workshopId}/{employeeId}");
|
||||
|
||||
if (mediaOpResult.IsSuccedded == false)
|
||||
return mediaOpResult;
|
||||
if (mediaOpResult.IsSuccedded == false)
|
||||
return mediaOpResult;
|
||||
|
||||
|
||||
//if the mediaId is already in use in our table return failed
|
||||
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
|
||||
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
|
||||
//if the mediaId is already in use in our table return failed
|
||||
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, DocumentStatus.SubmittedByAdmin);
|
||||
mediaId = mediaOpResult.SendId;
|
||||
}
|
||||
|
||||
var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaId, entity.id, item.Label, uploaderId, uploaderType, DocumentStatus.SubmittedByAdmin);
|
||||
newEntities.Add(newEntity);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ using Company.Domain.DateSalaryAgg;
|
||||
using Company.Domain.DateSalaryItemAgg;
|
||||
using Company.Domain.EmployeeAccountAgg;
|
||||
using Company.Domain.EmployeeAgg;
|
||||
using Company.Domain.EmployeeAuthorizeTempAgg;
|
||||
using Company.Domain.EmployeeBankInformationAgg;
|
||||
using Company.Domain.EmployeeChildrenAgg;
|
||||
using Company.Domain.EmployeeClientTempAgg;
|
||||
@@ -177,6 +178,7 @@ public class CompanyContext : DbContext
|
||||
public DbSet<ContactUs> ContactUs { get; set; }
|
||||
|
||||
|
||||
public DbSet<EmployeeAuthorizeTemp> EmployeeAuthorizeTemps { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Pooya
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
using Company.Domain.EmployeeAuthorizeTempAgg;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace CompanyManagment.EFCore.Mapping;
|
||||
|
||||
public class EmployeeAuthorizeTempMapping:IEntityTypeConfiguration<EmployeeAuthorizeTemp>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<EmployeeAuthorizeTemp> builder)
|
||||
{
|
||||
builder.ToTable("EmployeeAuthorizeTemps");
|
||||
builder.HasKey(x => x.id);
|
||||
|
||||
builder.Property(x => x.NationalCode).HasMaxLength(15);
|
||||
builder.Property(x => x.IdNumber).HasMaxLength(15);
|
||||
builder.Property(x => x.FName).HasMaxLength(100);
|
||||
builder.Property(x => x.LName).HasMaxLength(100);
|
||||
builder.Property(x => x.FatherName).HasMaxLength(100);
|
||||
builder.Property(x => x.Gender).HasConversion<string>().HasMaxLength(15);
|
||||
|
||||
builder.Property(x => x.IdNumberSerial).HasMaxLength(25);
|
||||
builder.Property(x => x.IdNumberSeri).HasMaxLength(25);
|
||||
|
||||
builder.HasIndex(x => x.NationalCode).IsUnique();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -80,9 +80,17 @@ public class EmployeeMapping : IEntityTypeConfiguration<Employee>
|
||||
.HasForeignKey(x => x.EmployeeId);
|
||||
|
||||
builder.HasMany(x => x.EmployeeBankInformationList).WithOne(x => x.Employee)
|
||||
.HasForeignKey(x => x.EmployeeId);
|
||||
.HasForeignKey(x => x.EmployeeId);
|
||||
|
||||
builder.Ignore(x => x.FullName);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mahan
|
||||
|
||||
builder.Property(x => x.IdNumberSerial).HasMaxLength(25);
|
||||
builder.Property(x => x.IdNumberSeri).HasMaxLength(25);
|
||||
|
||||
builder.Ignore(x => x.FullName);
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
9471
CompanyManagment.EFCore/Migrations/20250501111715_add employeeAuthorizeTemp and add serialNumber.Designer.cs
generated
Normal file
9471
CompanyManagment.EFCore/Migrations/20250501111715_add employeeAuthorizeTemp and add serialNumber.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,73 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace CompanyManagment.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class addemployeeAuthorizeTempandaddserialNumber : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "IdNumberSeri",
|
||||
table: "Employees",
|
||||
type: "nvarchar(25)",
|
||||
maxLength: 25,
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "IdNumberSerial",
|
||||
table: "Employees",
|
||||
type: "nvarchar(25)",
|
||||
maxLength: 25,
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "EmployeeAuthorizeTemps",
|
||||
columns: table => new
|
||||
{
|
||||
id = table.Column<long>(type: "bigint", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Gender = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: false),
|
||||
FName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
|
||||
LName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
|
||||
FatherName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
|
||||
BirthDate = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||
NationalCode = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true),
|
||||
IdNumber = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true),
|
||||
IdNumberSerial = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
|
||||
IdNumberSeri = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
|
||||
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_EmployeeAuthorizeTemps", x => x.id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EmployeeAuthorizeTemps_NationalCode",
|
||||
table: "EmployeeAuthorizeTemps",
|
||||
column: "NationalCode",
|
||||
unique: true,
|
||||
filter: "[NationalCode] IS NOT NULL");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "EmployeeAuthorizeTemps");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "IdNumberSeri",
|
||||
table: "Employees");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "IdNumberSerial",
|
||||
table: "Employees");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1539,6 +1539,14 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
.HasMaxLength(20)
|
||||
.HasColumnType("nvarchar(20)");
|
||||
|
||||
b.Property<string>("IdNumberSeri")
|
||||
.HasMaxLength(25)
|
||||
.HasColumnType("nvarchar(25)");
|
||||
|
||||
b.Property<string>("IdNumberSerial")
|
||||
.HasMaxLength(25)
|
||||
.HasColumnType("nvarchar(25)");
|
||||
|
||||
b.Property<string>("InsuranceCode")
|
||||
.HasMaxLength(10)
|
||||
.HasColumnType("nvarchar(10)");
|
||||
@@ -1635,6 +1643,62 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
b.ToTable("Employees", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Company.Domain.EmployeeAuthorizeTempAgg.EmployeeAuthorizeTemp", b =>
|
||||
{
|
||||
b.Property<long>("id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("bigint");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
|
||||
|
||||
b.Property<DateTime>("BirthDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<DateTime>("CreationDate")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("FName")
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<string>("FatherName")
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<string>("Gender")
|
||||
.IsRequired()
|
||||
.HasMaxLength(15)
|
||||
.HasColumnType("nvarchar(15)");
|
||||
|
||||
b.Property<string>("IdNumber")
|
||||
.HasMaxLength(15)
|
||||
.HasColumnType("nvarchar(15)");
|
||||
|
||||
b.Property<string>("IdNumberSeri")
|
||||
.HasMaxLength(25)
|
||||
.HasColumnType("nvarchar(25)");
|
||||
|
||||
b.Property<string>("IdNumberSerial")
|
||||
.HasMaxLength(25)
|
||||
.HasColumnType("nvarchar(25)");
|
||||
|
||||
b.Property<string>("LName")
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<string>("NationalCode")
|
||||
.HasMaxLength(15)
|
||||
.HasColumnType("nvarchar(15)");
|
||||
|
||||
b.HasKey("id");
|
||||
|
||||
b.HasIndex("NationalCode")
|
||||
.IsUnique()
|
||||
.HasFilter("[NationalCode] IS NOT NULL");
|
||||
|
||||
b.ToTable("EmployeeAuthorizeTemps", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Company.Domain.EmployeeBankInformationAgg.EmployeeBankInformation", b =>
|
||||
{
|
||||
b.Property<long>("id")
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.InfraStructure;
|
||||
using Company.Domain.EmployeeAuthorizeTempAgg;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace CompanyManagment.EFCore.Repository;
|
||||
|
||||
public class EmployeeAuthorizeTempRepository:RepositoryBase<long,EmployeeAuthorizeTemp>, IEmployeeAuthorizeTempRepository
|
||||
{
|
||||
private readonly CompanyContext _context;
|
||||
public EmployeeAuthorizeTempRepository(CompanyContext context) : base(context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task<EmployeeAuthorizeTemp> GetByNationalCode(string nationalCode)
|
||||
{
|
||||
return await _context.EmployeeAuthorizeTemps.FirstOrDefaultAsync(x =>
|
||||
x.NationalCode == nationalCode);
|
||||
}
|
||||
}
|
||||
@@ -392,48 +392,122 @@ public class EmployeeDocumentsRepository : RepositoryBase<long, EmployeeDocument
|
||||
|
||||
public List<WorkshopWithEmployeeDocumentsViewModel> GetWorkshopsWithDocumentsAwaitingReviewForAdminWorkFlow(List<long> workshops)
|
||||
{
|
||||
var activeEmployees = _companyContext.LeftWorkList
|
||||
//var activeEmployees = _companyContext.LeftWorkList
|
||||
// .Where(x => workshops.Contains(x.WorkshopId) && x.LeftWorkDate.AddDays(-1) >= DateTime.Now)
|
||||
// .Select(x => new { x.WorkshopId, x.EmployeeId });
|
||||
|
||||
//var employeeClientTemp = _companyContext.EmployeeClientTemps.Where(x => workshops.Contains(x.WorkshopId))
|
||||
// .Select(x=> new { x.WorkshopId, x.EmployeeId });
|
||||
|
||||
//var query = _companyContext.EmployeeDocuments
|
||||
// .Where(x => workshops.Contains(x.WorkshopId) &&
|
||||
// (activeEmployees.Any(y => y.WorkshopId == x.WorkshopId && y.EmployeeId == x.EmployeeId) ||
|
||||
// employeeClientTemp.Any(temp =>
|
||||
// x.EmployeeId == temp.EmployeeId && temp.WorkshopId == x.WorkshopId)) &&
|
||||
// x.IsConfirmed == false)
|
||||
// .Include(x => x.Workshop).Include(x => x.EmployeeDocumentItemCollection).AsSplitQuery().AsNoTracking()
|
||||
// .Where(x => x.IsSentToChecker == false &&
|
||||
// (x.EmployeeDocumentItemCollection.Any(y =>
|
||||
// y.DocumentStatus == DocumentStatus.SubmittedByClient) ||
|
||||
// employeeClientTemp.Any(temp =>
|
||||
// x.EmployeeId == temp.EmployeeId && temp.WorkshopId == x.WorkshopId) || x.HasRejectedItems))
|
||||
// .GroupBy(x => x.WorkshopId).Select(x => new WorkshopWithEmployeeDocumentsViewModel()
|
||||
// {
|
||||
// WorkshopId = x.Key,
|
||||
// WorkshopFullName = x.FirstOrDefault().Workshop.WorkshopName,
|
||||
// EmployeesWithoutDocumentCount = x.Count()
|
||||
// });
|
||||
|
||||
|
||||
|
||||
//var workshopEmployers = _companyContext.WorkshopEmployers.Include(x => x.Employer).AsSplitQuery()
|
||||
// .Where(x => query.Any(y => y.WorkshopId == x.WorkshopId))
|
||||
// .GroupBy(x => x.WorkshopId).Select(x => x.FirstOrDefault()).ToList();
|
||||
|
||||
|
||||
|
||||
|
||||
//var result = query.ToList();
|
||||
|
||||
|
||||
//result.ForEach(x =>
|
||||
//{
|
||||
// var employer = workshopEmployers.FirstOrDefault(y => y.WorkshopId == x.WorkshopId)?.Employer;
|
||||
// x.EmployerName = employer.FullName;
|
||||
|
||||
// //x.SubmittedItems.ForEach(y=>y.PicturePath= medias.FirstOrDefault(z=>z.id == y.MediaId)?.Path ?? "");
|
||||
//});
|
||||
|
||||
//return result.Where(x => x.EmployeesWithoutDocumentCount > 0).OrderByDescending(x => x.EmployeesWithoutDocumentCount).ToList();
|
||||
|
||||
// یک بار keyها رو آماده میکنیم
|
||||
var activeEmployeeKeys = _companyContext.LeftWorkList
|
||||
.Where(x => workshops.Contains(x.WorkshopId) && x.LeftWorkDate.AddDays(-1) >= DateTime.Now)
|
||||
.Select(x => new { x.WorkshopId, x.EmployeeId });
|
||||
|
||||
var employeeClientTemp = _companyContext.EmployeeClientTemps.Where(x => workshops.Contains(x.WorkshopId));
|
||||
var employeeClientTempKeys = _companyContext.EmployeeClientTemps
|
||||
.Where(x => workshops.Contains(x.WorkshopId))
|
||||
.Select(x => new { x.WorkshopId, x.EmployeeId });
|
||||
|
||||
var query = _companyContext.EmployeeDocuments
|
||||
.Where(x => workshops.Contains(x.WorkshopId) &&
|
||||
(activeEmployees.Any(y => y.WorkshopId == x.WorkshopId && y.EmployeeId == x.EmployeeId) ||
|
||||
employeeClientTemp.Any(temp => x.EmployeeId == temp.EmployeeId && temp.WorkshopId == x.WorkshopId)) && x.IsConfirmed == false)
|
||||
.Include(x => x.Workshop).Include(x => x.EmployeeDocumentItemCollection)
|
||||
.Where(x => x.IsSentToChecker == false &&
|
||||
(x.EmployeeDocumentItemCollection.Any(y =>
|
||||
y.DocumentStatus == DocumentStatus.SubmittedByClient) || employeeClientTemp.Any(temp => x.EmployeeId == temp.EmployeeId && temp.WorkshopId == x.WorkshopId) || x.HasRejectedItems))
|
||||
.GroupBy(x => x.WorkshopId).Select(x => new WorkshopWithEmployeeDocumentsViewModel()
|
||||
var allValidKeys = activeEmployeeKeys
|
||||
.Union(employeeClientTempKeys);
|
||||
|
||||
// کوئری اصلی بدون Include و بدون GroupBy
|
||||
var employeeDocs = _companyContext.EmployeeDocuments
|
||||
.Where(x =>
|
||||
workshops.Contains(x.WorkshopId) &&
|
||||
allValidKeys.Any(k => k.WorkshopId == x.WorkshopId && k.EmployeeId == x.EmployeeId) &&
|
||||
!x.IsConfirmed &&
|
||||
!x.IsSentToChecker &&
|
||||
(
|
||||
x.EmployeeDocumentItemCollection.Any(y => y.DocumentStatus == DocumentStatus.SubmittedByClient) ||
|
||||
x.HasRejectedItems ||
|
||||
employeeClientTempKeys.Any(k => k.WorkshopId == x.WorkshopId && k.EmployeeId == x.EmployeeId)
|
||||
))
|
||||
.Select(x => new
|
||||
{
|
||||
WorkshopId = x.Key,
|
||||
WorkshopFullName = x.FirstOrDefault().Workshop.WorkshopName,
|
||||
EmployeesWithoutDocumentCount = x.Count()
|
||||
});
|
||||
x.WorkshopId,
|
||||
WorkshopName = x.Workshop.WorkshopName,
|
||||
x.EmployeeId
|
||||
})
|
||||
.AsNoTracking()
|
||||
.ToList();
|
||||
|
||||
// Group در حافظه با سرعت بیشتر
|
||||
var grouped = employeeDocs
|
||||
.GroupBy(x => new { x.WorkshopId, x.WorkshopName })
|
||||
.Select(g => new WorkshopWithEmployeeDocumentsViewModel
|
||||
{
|
||||
WorkshopId = g.Key.WorkshopId,
|
||||
WorkshopFullName = g.Key.WorkshopName,
|
||||
EmployeesWithoutDocumentCount = g.Count()
|
||||
})
|
||||
.ToList();
|
||||
|
||||
// گرفتن کارفرماها فقط برای ورکشاپهایی که توی لیست بالا هستن
|
||||
var workshopIds = grouped.Select(x => x.WorkshopId).ToList();
|
||||
|
||||
var workshopEmployers = _companyContext.WorkshopEmployers.Include(x => x.Employer)
|
||||
.Where(x => query.Any(y => y.WorkshopId == x.WorkshopId))
|
||||
.GroupBy(x => x.WorkshopId).Select(x => x.FirstOrDefault()).ToList();
|
||||
var employers = _companyContext.WorkshopEmployers
|
||||
.Where(x => workshopIds.Contains(x.WorkshopId))
|
||||
.Include(x => x.Employer)
|
||||
.AsSplitQuery()
|
||||
.AsNoTracking()
|
||||
.GroupBy(x => x.WorkshopId)
|
||||
.Select(g => g.FirstOrDefault())
|
||||
.ToList();
|
||||
|
||||
|
||||
|
||||
|
||||
var result = query.ToList();
|
||||
|
||||
|
||||
result.ForEach(x =>
|
||||
// اضافه کردن اسم کارفرما
|
||||
grouped.ForEach(x =>
|
||||
{
|
||||
var employer = workshopEmployers.FirstOrDefault(y => y.WorkshopId == x.WorkshopId)?.Employer;
|
||||
x.EmployerName = employer.FullName;
|
||||
|
||||
//x.SubmittedItems.ForEach(y=>y.PicturePath= medias.FirstOrDefault(z=>z.id == y.MediaId)?.Path ?? "");
|
||||
var employer = employers.FirstOrDefault(y => y.WorkshopId == x.WorkshopId)?.Employer;
|
||||
x.EmployerName = employer?.FullName;
|
||||
});
|
||||
|
||||
return result.Where(x => x.EmployeesWithoutDocumentCount > 0).OrderByDescending(x => x.EmployeesWithoutDocumentCount).ToList();
|
||||
// فیلتر نهایی
|
||||
return grouped
|
||||
.Where(x => x.EmployeesWithoutDocumentCount > 0)
|
||||
.OrderByDescending(x => x.EmployeesWithoutDocumentCount)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
@@ -475,44 +549,83 @@ public class EmployeeDocumentsRepository : RepositoryBase<long, EmployeeDocument
|
||||
|
||||
public List<EmployeeDocumentsViewModel> GetByWorkshopIdWithItemsForAdminWorkFlow(long workshopId)
|
||||
{
|
||||
var activeEmployeesInWorkshop = _companyContext.LeftWorkList
|
||||
.Where(x => workshopId == x.WorkshopId && x.LeftWorkDate.AddDays(-1) >= DateTime.Today)
|
||||
.Include(x => x.Employee).ThenInclude(x => x.EmployeeDocuments)
|
||||
.Select(x => new { x.EmployeeId, FullName = x.Employee.FName + " " + x.Employee.LName, x.Employee.Gender });
|
||||
|
||||
var activeEmployeeIds = _companyContext.LeftWorkList
|
||||
.Where(x => x.WorkshopId == workshopId && x.LeftWorkDate.AddDays(-1) >= DateTime.Today)
|
||||
.Select(x => new
|
||||
{
|
||||
x.EmployeeId,
|
||||
FullName = x.Employee.FName + " " + x.Employee.LName,
|
||||
x.Employee.Gender
|
||||
}).ToList();
|
||||
|
||||
var activeEmployeeIdList = activeEmployeeIds.Select(x => x.EmployeeId).ToList();
|
||||
|
||||
|
||||
//var EDItemsList = _companyContext.EmployeeDocumentItems
|
||||
// .Where(x => x.WorkshopId == workshopId &&
|
||||
// x.DocumentStatus != DocumentStatus.Unsubmitted &&
|
||||
// activeEmployeeIdList.Contains(x.EmployeeId))
|
||||
// .Include(x => x.EmployeeDocuments)
|
||||
// .Where(x => x.EmployeeDocuments.IsSentToChecker == false &&
|
||||
// ((x.DocumentStatus == DocumentStatus.SubmittedByClient) ||
|
||||
// x.EmployeeDocuments.HasRejectedItems))
|
||||
// .GroupBy(x => new { x.EmployeeId, x.DocumentLabel })
|
||||
// .Select(x =>
|
||||
// x.Select(y => new
|
||||
// {
|
||||
// y.EmployeeDocumentId,
|
||||
// Id = y.id,
|
||||
// y.EmployeeDocuments.Gender,
|
||||
// y.DocumentLabel,
|
||||
// y.DocumentStatus,
|
||||
// y.MediaId,
|
||||
// y.RejectionReason,
|
||||
// y.EmployeeId,
|
||||
// y.CreationDate,
|
||||
// IsSentToChecker = y.EmployeeDocuments.IsSentToChecker,
|
||||
// y.EmployeeDocuments.IsConfirmed
|
||||
// }).OrderByDescending(y => y.CreationDate).First()).ToList();
|
||||
|
||||
var EDItemsList = _companyContext.EmployeeDocumentItems
|
||||
.Where(x => x.WorkshopId == workshopId && x.DocumentStatus != DocumentStatus.Unsubmitted &&
|
||||
activeEmployeesInWorkshop.Any(y => y.EmployeeId == x.EmployeeId))
|
||||
.Include(x => x.EmployeeDocuments)
|
||||
.Where(x => x.EmployeeDocuments.IsSentToChecker == false &&
|
||||
((x.DocumentStatus == DocumentStatus.SubmittedByClient) ||
|
||||
x.EmployeeDocuments.HasRejectedItems))
|
||||
.Where(x => x.WorkshopId == workshopId &&
|
||||
x.DocumentStatus != DocumentStatus.Unsubmitted &&
|
||||
activeEmployeeIdList.Contains(x.EmployeeId) &&
|
||||
x.EmployeeDocuments.IsSentToChecker == false &&
|
||||
(x.DocumentStatus == DocumentStatus.SubmittedByClient || x.EmployeeDocuments.HasRejectedItems))
|
||||
.Include(x=>x.EmployeeDocuments).ToList()
|
||||
.GroupBy(x => new { x.EmployeeId, x.DocumentLabel })
|
||||
.Select(x =>
|
||||
x.Select(y => new
|
||||
{
|
||||
y.EmployeeDocumentId,
|
||||
Id = y.id,
|
||||
y.EmployeeDocuments.Gender,
|
||||
y.DocumentLabel,
|
||||
y.DocumentStatus,
|
||||
y.MediaId,
|
||||
y.RejectionReason,
|
||||
y.EmployeeId,
|
||||
y.CreationDate,
|
||||
IsSentToChecker = y.EmployeeDocuments.IsSentToChecker,
|
||||
y.EmployeeDocuments.IsConfirmed
|
||||
}).OrderByDescending(y => y.CreationDate).First()).ToList();
|
||||
.Select(g => g.OrderByDescending(x => x.CreationDate).Select(y => new
|
||||
{
|
||||
y.EmployeeDocumentId,
|
||||
Id = y.id,
|
||||
y.EmployeeDocuments.Gender,
|
||||
y.DocumentLabel,
|
||||
y.DocumentStatus,
|
||||
y.MediaId,
|
||||
y.RejectionReason,
|
||||
y.EmployeeId,
|
||||
y.CreationDate,
|
||||
y.EmployeeDocuments.IsSentToChecker,
|
||||
y.EmployeeDocuments.IsConfirmed
|
||||
}).FirstOrDefault())
|
||||
.ToList();
|
||||
|
||||
var employeeClientTemp = _companyContext.EmployeeClientTemps.Where(x => x.WorkshopId == workshopId);
|
||||
var tempEmployees = _companyContext.Employees.Where(x => employeeClientTemp.Any(a => a.EmployeeId == x.id))
|
||||
.Select(x => new { EmployeeId = x.id, FullName = x.FName + " " + x.LName, x.Gender }).ToList();
|
||||
var tempEmployeeIds = _companyContext.EmployeeClientTemps
|
||||
.Where(x => x.WorkshopId == workshopId)
|
||||
.Select(x => x.EmployeeId)
|
||||
.ToList();
|
||||
|
||||
var tempEmployees = _companyContext.Employees
|
||||
.Where(x => tempEmployeeIds.Contains(x.id))
|
||||
.Select(x => new
|
||||
{
|
||||
EmployeeId = x.id,
|
||||
FullName = x.FName + " " + x.LName,
|
||||
x.Gender
|
||||
}).ToList();
|
||||
|
||||
var tempEmployeeDocuments = _companyContext.EmployeeDocuments
|
||||
.Where(x => x.WorkshopId == workshopId && employeeClientTemp.Any(e => e.EmployeeId == x.EmployeeId) &&
|
||||
.Where(x => x.WorkshopId == workshopId && tempEmployeeIds.Contains(x.EmployeeId) &&
|
||||
x.IsSentToChecker == false && x.IsConfirmed == false)
|
||||
.SelectMany(x => x.EmployeeDocumentItemCollection.DefaultIfEmpty(), // اگر خالی بود، مقدار پیشفرض ایجاد کن
|
||||
(documents, y) => new
|
||||
@@ -533,55 +646,57 @@ public class EmployeeDocumentsRepository : RepositoryBase<long, EmployeeDocument
|
||||
|
||||
|
||||
|
||||
var enumerable = EDItemsList.Concat(tempEmployeeDocuments);
|
||||
var activeEmployeesInWorkshopList = activeEmployeesInWorkshop.ToList().Concat(tempEmployees);
|
||||
//var enumerable = EDItemsList.Concat(tempEmployeeDocuments);
|
||||
//var activeEmployeesInWorkshopList = activeEmployeesInWorkshop.ToList().Concat(tempEmployees);
|
||||
|
||||
var allEmployeeDocuments = EDItemsList.Concat(tempEmployeeDocuments).ToList();
|
||||
var allEmployees = activeEmployeeIds.Concat(tempEmployees).ToList();
|
||||
|
||||
//get medias for current documents of employees
|
||||
var mediaIds = enumerable.Select(x => x.MediaId).ToList();
|
||||
var mediasList = _accountContext.Medias.Where(x => mediaIds.Contains(x.id))
|
||||
var mediaIds = allEmployeeDocuments.Select(x => x.MediaId).ToList();
|
||||
|
||||
var mediasList = _accountContext.Medias
|
||||
.Where(x => mediaIds.Contains(x.id))
|
||||
.Select(x => new MediaViewModel() { Id = x.id, Path = x.Path }).ToList();
|
||||
|
||||
|
||||
|
||||
var result = enumerable.GroupBy(x => x.EmployeeId)
|
||||
.Select(x =>
|
||||
var result = allEmployeeDocuments
|
||||
.GroupBy(x => x.EmployeeId)
|
||||
.Select(group =>
|
||||
{
|
||||
//var requiredDocs = EmployeeDocumentRequiredItems.GetByGender(x.Gender);
|
||||
var employeeLatestConfirmedDocuments = x
|
||||
var employee = allEmployees.First(e => e.EmployeeId == group.Key);
|
||||
|
||||
.Where(y => y.EmployeeId == x.Key && (y.DocumentStatus == DocumentStatus.SubmittedByClient || y.DocumentStatus == DocumentStatus.SubmittedByAdmin || y.DocumentStatus == DocumentStatus.Rejected))
|
||||
.Select(y => new EmployeeDocumentItemViewModel()
|
||||
var docs = group
|
||||
.Where(y => y.DocumentStatus == DocumentStatus.SubmittedByClient ||
|
||||
y.DocumentStatus == DocumentStatus.SubmittedByAdmin ||
|
||||
y.DocumentStatus == DocumentStatus.Rejected)
|
||||
.Select(y => new EmployeeDocumentItemViewModel
|
||||
{
|
||||
Status = y.DocumentStatus,
|
||||
MediaId = y.MediaId,
|
||||
DocumentItemLabel = y.DocumentLabel,
|
||||
Id = y.Id,
|
||||
RejectionMessage = y.RejectionReason,
|
||||
StatusString = y.DocumentStatus.ToString()
|
||||
}).ToList();
|
||||
|
||||
return new EmployeeDocumentsViewModel
|
||||
{
|
||||
Status = y.DocumentStatus,
|
||||
MediaId = y.MediaId,
|
||||
DocumentItemLabel = y.DocumentLabel,
|
||||
Id = y.Id,
|
||||
RejectionMessage = y.RejectionReason,
|
||||
StatusString = y.DocumentStatus.ToString()
|
||||
}).ToList();
|
||||
|
||||
|
||||
//var requiredItemsUploaded = employeeLatestConfirmedDocuments
|
||||
// .Where(y => requiredDocs.Contains(y.DocumentItemLabel)).Select(y => y.DocumentItemLabel)
|
||||
// .ToList();
|
||||
|
||||
return new EmployeeDocumentsViewModel()
|
||||
{
|
||||
EmployeeId = x.Key,
|
||||
IdCardPage1 = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.IdCardPage1),
|
||||
IdCardPage2 = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.IdCardPage2),
|
||||
IdCardPage3 = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.IdCardPage3),
|
||||
IdCardPage4 = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.IdCardPage4),
|
||||
EducationalDegree = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.EducationalDegree),
|
||||
EmployeeFullName = activeEmployeesInWorkshopList.First(y => y.EmployeeId == x.Key).FullName,
|
||||
NationalCardFront = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.NationalCardFront),
|
||||
NationalCardRear = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.NationalCardRear),
|
||||
MilitaryServiceCard = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.MilitaryServiceCard),
|
||||
EmployeePicture = GetByLabelAndLoadMedia(employeeLatestConfirmedDocuments, mediasList, DocumentItemLabel.EmployeePicture),
|
||||
//RequiredDocumentsUploaded = requiredItemsUploaded,
|
||||
//RequiredDocuments = requiredDocs
|
||||
EmployeeId = group.Key,
|
||||
IdCardPage1 = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.IdCardPage1),
|
||||
IdCardPage2 = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.IdCardPage2),
|
||||
IdCardPage3 = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.IdCardPage3),
|
||||
IdCardPage4 = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.IdCardPage4),
|
||||
EducationalDegree = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.EducationalDegree),
|
||||
EmployeeFullName = employee.FullName,
|
||||
NationalCardFront = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.NationalCardFront),
|
||||
NationalCardRear = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.NationalCardRear),
|
||||
MilitaryServiceCard = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.MilitaryServiceCard),
|
||||
EmployeePicture = GetByLabelAndLoadMedia(docs, mediasList, DocumentItemLabel.EmployeePicture),
|
||||
};
|
||||
}).ToList();
|
||||
})
|
||||
.ToList();
|
||||
|
||||
return result;
|
||||
|
||||
|
||||
@@ -450,7 +450,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
||||
|
||||
var employeeData = new Employee(command.FName, command.LName, command.FatherName, dateOfBirth,
|
||||
dateOfIssue,
|
||||
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality,
|
||||
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality,command.IdNumberSerial,command.IdNumberSeri,
|
||||
command.Phone, command.Address,
|
||||
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
|
||||
command.FieldOfStudy, command.BankCardNumber,
|
||||
|
||||
@@ -462,48 +462,98 @@ CreateWorkingHoursTemp command, bool holidayWorking)
|
||||
|
||||
string shiftPayValue = "0";
|
||||
List<RotatingShiftViewModel> rotatingResultList = RotatingShiftCheck(groupedRollCall);
|
||||
var moriningCount = rotatingResultList.Count(x => x.IsMorningShift);
|
||||
var eveningCount = rotatingResultList.Count(x => x.IsEveningShift);
|
||||
var nightCount = rotatingResultList.Count(x => x.IsNightShift);
|
||||
|
||||
// شبکاری
|
||||
TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks));
|
||||
var RotatingfaName = new List<string>();
|
||||
if (command.ShiftWork != "1" && command.ShiftWork != "2" && command.ShiftWork != "4")//اگر چرخشی بود و منظم نبود
|
||||
{
|
||||
if (moriningCount > 0)
|
||||
RotatingfaName.Add("صبح");
|
||||
if (eveningCount > 0)
|
||||
RotatingfaName.Add("عصر");
|
||||
if (nightCount > 0)
|
||||
RotatingfaName.Add("شب");
|
||||
}
|
||||
else// اگر منظم و شیفتی بود
|
||||
{
|
||||
var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1;
|
||||
int validCount = 0;
|
||||
if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد
|
||||
{
|
||||
validCount = 2;
|
||||
}
|
||||
else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت
|
||||
{
|
||||
validCount = 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
// تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است
|
||||
validCount = (int)((totalDays * 8) / 28);
|
||||
}
|
||||
//if (command.ShiftWork != "1" && command.ShiftWork != "2" && command.ShiftWork != "4")//اگر چرخشی بود و منظم نبود
|
||||
//{
|
||||
// if (moriningCount > 0)
|
||||
// RotatingfaName.Add("صبح");
|
||||
// if (eveningCount > 0)
|
||||
// RotatingfaName.Add("عصر");
|
||||
// if (nightCount > 0)
|
||||
// RotatingfaName.Add("شب");
|
||||
//}
|
||||
//else// اگر منظم و شیفتی بود
|
||||
//{
|
||||
// var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1;
|
||||
// int validCount = 0;
|
||||
// if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد
|
||||
// {
|
||||
// validCount = 2;
|
||||
// }
|
||||
// else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت
|
||||
// {
|
||||
// validCount = 8;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است
|
||||
// validCount = (int)((totalDays * 8) / 28);
|
||||
// }
|
||||
|
||||
if (moriningCount >= validCount)
|
||||
RotatingfaName.Add("صبح");
|
||||
if (eveningCount >= validCount)
|
||||
RotatingfaName.Add("عصر");
|
||||
if (nightCount >= validCount)
|
||||
RotatingfaName.Add("شب");
|
||||
// if (moriningCount >= validCount)
|
||||
// RotatingfaName.Add("صبح");
|
||||
// if (eveningCount >= validCount)
|
||||
// RotatingfaName.Add("عصر");
|
||||
// if (nightCount >= validCount)
|
||||
// RotatingfaName.Add("شب");
|
||||
|
||||
//}
|
||||
|
||||
int moriningCount = 0;
|
||||
int eveningCount = 0;
|
||||
int nightCount = 0;
|
||||
|
||||
int moriningWinRate = rotatingResultList.Where(x => x.IsMorningShift).Sum(x => x.WinRate);
|
||||
int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate);
|
||||
int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate);
|
||||
|
||||
|
||||
if (moriningWinRate > eveningWinRate && moriningWinRate > nightWinRate)
|
||||
{
|
||||
moriningCount = rotatingResultList.Count(x => x.IsMorningShift);
|
||||
eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55);
|
||||
nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55);
|
||||
}
|
||||
|
||||
if (eveningWinRate > moriningWinRate && eveningWinRate > nightWinRate)
|
||||
{
|
||||
moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55);
|
||||
eveningCount = rotatingResultList.Count(x => x.IsEveningShift);
|
||||
nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55);
|
||||
}
|
||||
|
||||
if (nightWinRate > moriningWinRate && nightWinRate > eveningWinRate)
|
||||
{
|
||||
moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55);
|
||||
eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55);
|
||||
nightCount = rotatingResultList.Count(x => x.IsNightShift);
|
||||
}
|
||||
|
||||
var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1;
|
||||
int validCount = 0;
|
||||
if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد
|
||||
{
|
||||
validCount = 2;
|
||||
}
|
||||
else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت
|
||||
{
|
||||
validCount = 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
// تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است
|
||||
validCount = (int)((totalDays * 8) / 28);
|
||||
}
|
||||
|
||||
if (moriningCount >= validCount)
|
||||
RotatingfaName.Add("صبح");
|
||||
if (eveningCount >= validCount)
|
||||
RotatingfaName.Add("عصر");
|
||||
if (nightCount >= validCount)
|
||||
RotatingfaName.Add("شب");
|
||||
var rotatingFaResult = "";
|
||||
if (RotatingfaName.Count > 1)// اگر تعداد شیفت های محاسبه شده بیش از یک بود
|
||||
{
|
||||
@@ -623,9 +673,41 @@ CreateWorkingHoursTemp command, bool holidayWorking)
|
||||
|
||||
string shiftPayValue = "0";
|
||||
List<RotatingShiftViewModel> rotatingResultList = RotatingShiftCheck(groupedRollCall);
|
||||
var moriningCount = rotatingResultList.Count(x => x.IsMorningShift);
|
||||
var eveningCount = rotatingResultList.Count(x => x.IsEveningShift);
|
||||
var nightCount = rotatingResultList.Count(x => x.IsNightShift);
|
||||
int moriningCount = 0;
|
||||
int eveningCount = 0;
|
||||
int nightCount = 0;
|
||||
|
||||
int moriningWinRate = rotatingResultList.Where(x=>x.IsMorningShift).Sum(x => x.WinRate);
|
||||
int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate);
|
||||
int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate);
|
||||
|
||||
|
||||
if (moriningWinRate > eveningWinRate && moriningWinRate > nightWinRate)
|
||||
{
|
||||
moriningCount = rotatingResultList.Count(x => x.IsMorningShift);
|
||||
eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55);
|
||||
nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55);
|
||||
}
|
||||
|
||||
if (eveningWinRate > moriningWinRate && eveningWinRate > nightWinRate)
|
||||
{
|
||||
moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55);
|
||||
eveningCount = rotatingResultList.Count(x => x.IsEveningShift);
|
||||
nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55);
|
||||
}
|
||||
|
||||
if (nightWinRate > moriningWinRate && nightWinRate > eveningWinRate)
|
||||
{
|
||||
moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55);
|
||||
eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55);
|
||||
nightCount = rotatingResultList.Count(x => x.IsNightShift);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// شبکاری
|
||||
TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks));
|
||||
var RotatingfaName = new List<string>();
|
||||
@@ -1061,18 +1143,28 @@ CreateWorkingHoursTemp command, bool holidayWorking)
|
||||
if (result.MorningWorkSpan > result.EveningWorkSpan
|
||||
|| result.MorningWorkSpan == result.EveningWorkSpan) // if morning bigerThan evening or equal
|
||||
{
|
||||
|
||||
if (result.MorningWorkSpan != nullWorkspan)
|
||||
{
|
||||
var sumSpan = result.MorningWorkSpan.Add(result.EveningWorkSpan);
|
||||
var sumSpanDouble = sumSpan.TotalMinutes;
|
||||
var winRate = (result.MorningWorkSpan.TotalMinutes * 100) / sumSpanDouble;
|
||||
result.WinRate = Convert.ToInt32(winRate);
|
||||
result.IsMorningShift = true;
|
||||
result.IsNightShift = false;
|
||||
result.IsEveningShift = false;
|
||||
result.RotatingShiftStatus = "صبح";
|
||||
|
||||
}
|
||||
|
||||
if (result.MorningWorkSpan < result.NightWorkSpan
|
||||
|| result.MorningWorkSpan == result.NightWorkSpan) // if night bigerThan morning or equal
|
||||
if (result.NightWorkSpan != nullWorkspan)
|
||||
{
|
||||
var sumSpan = result.MorningWorkSpan.Add(result.NightWorkSpan);
|
||||
var sumSpanDouble = sumSpan.TotalMinutes;
|
||||
var winRate = (result.NightWorkSpan.TotalMinutes * 100) / sumSpanDouble;
|
||||
result.WinRate = Convert.ToInt32(winRate);
|
||||
result.IsMorningShift = false;
|
||||
result.IsNightShift = true;
|
||||
result.IsEveningShift = false;
|
||||
@@ -1083,6 +1175,10 @@ CreateWorkingHoursTemp command, bool holidayWorking)
|
||||
{
|
||||
if (result.EveningWorkSpan != nullWorkspan)
|
||||
{
|
||||
var sumSpan = result.MorningWorkSpan.Add(result.EveningWorkSpan);
|
||||
var sumSpanDouble = sumSpan.TotalMinutes;
|
||||
var winRate = (result.EveningWorkSpan.TotalMinutes * 100) / sumSpanDouble;
|
||||
result.WinRate = Convert.ToInt32(winRate);
|
||||
result.IsEveningShift = true;
|
||||
result.IsMorningShift = false;
|
||||
result.IsNightShift = false;
|
||||
@@ -1093,6 +1189,10 @@ CreateWorkingHoursTemp command, bool holidayWorking)
|
||||
|| result.EveningWorkSpan == result.NightWorkSpan) // if night bigerThan evening or equal
|
||||
if (result.NightWorkSpan != nullWorkspan)
|
||||
{
|
||||
var sumSpan = result.EveningWorkSpan.Add(result.NightWorkSpan);
|
||||
var sumSpanDouble = sumSpan.TotalMinutes;
|
||||
var winRate = (result.NightWorkSpan.TotalMinutes * 100) / sumSpanDouble;
|
||||
result.WinRate = Convert.ToInt32(winRate);
|
||||
result.IsMorningShift = false;
|
||||
result.IsEveningShift = false;
|
||||
result.IsNightShift = true;
|
||||
|
||||
@@ -207,6 +207,7 @@ using CompanyManagment.App.Contracts.LeftWorkTemp;
|
||||
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
using Company.Domain.ContactUsAgg;
|
||||
using CompanyManagment.App.Contracts.ContactUs;
|
||||
using Company.Domain.EmployeeAuthorizeTempAgg;
|
||||
|
||||
namespace PersonalContractingParty.Config;
|
||||
|
||||
@@ -426,6 +427,9 @@ public class PersonalBootstrapper
|
||||
services.AddTransient<ILeftWorkTempRepository, LeftWorkTempRepository>();
|
||||
services.AddTransient<ILeftWorkTempApplication, LeftWorkTempApplication>();
|
||||
|
||||
services.AddTransient<IEmployeeAuthorizeTempRepository, EmployeeAuthorizeTempRepository>();
|
||||
|
||||
|
||||
services.AddTransient<IContactUsRepository, ContactUsRepository>();
|
||||
services.AddTransient<IContactUsApplication, ContactUsApplication>();
|
||||
#endregion
|
||||
|
||||
@@ -186,6 +186,7 @@ public class IndexModel : PageModel
|
||||
|
||||
result.EmployeeFullName = checkout.EmployeeFullName;
|
||||
result.YearAndMonth = $"{checkout.Month} {checkout.Year}";
|
||||
result.HasRotatingShift = result.RotatingStatus == "نوبت کاری ندارد" ? false : true;
|
||||
Console.WriteLine("ok");
|
||||
return Partial("./RotatingShiftReportDesktop", result);
|
||||
}
|
||||
|
||||
@@ -53,7 +53,17 @@
|
||||
.rotateParntModal {
|
||||
height: 600px !important;
|
||||
}
|
||||
.noRotating{
|
||||
background-color: #fe8470;
|
||||
}
|
||||
.hasRotating{
|
||||
background-color: #1bff01;
|
||||
}
|
||||
|
||||
</style>
|
||||
string noRotating = "noRotating";
|
||||
string hasRotating = "hasRotating";
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -98,7 +108,8 @@
|
||||
<div class="col-xs-3" style="text-align:left"> <h5>نوع ساعت کاری :</h5> </div>
|
||||
|
||||
|
||||
<div class="col-xs-3" style="text-align:right">
|
||||
<div class="col-xs-3 @(!Model.HasRotatingShift? @noRotating :@hasRotating )" style="text-align:right ">
|
||||
|
||||
<h5>@Model.RotatingStatus</h5>
|
||||
</div>
|
||||
<div class="col-xs-3" style="text-align:left">
|
||||
@@ -118,19 +129,8 @@
|
||||
<span style="padding: 0px 10px;"> نوبت شب </span>
|
||||
</div>
|
||||
<div id="rotatingList">
|
||||
@{
|
||||
if (@Model.RotatingStatus == "نوبت کاری ندارد")
|
||||
{
|
||||
<div class="row">
|
||||
<div class="col-xs-4"></div>
|
||||
<div class="col-xs-4">
|
||||
<h3>نوبت کاری ندارد</h3>
|
||||
</div>
|
||||
<div class="col-xs-4"></div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
@foreach (var item in @Model.RotatingResultList)
|
||||
{
|
||||
|
||||
@@ -163,9 +163,9 @@
|
||||
</div>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -16,7 +16,8 @@
|
||||
</style>
|
||||
}
|
||||
|
||||
<link href="@Href("~/Admintheme/css/personelCreate.css")" rel="stylesheet"/>
|
||||
@* <link href="@Href("~/Admintheme/css/personelCreate.css")" rel="stylesheet"/> *@
|
||||
<link href="@Href("~/Admintheme/css/personelEdit.css")" rel="stylesheet"/>
|
||||
|
||||
<fieldset class="content-fieldset">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
|
||||
@@ -1591,5 +1591,15 @@ public class IndexModel : PageModel
|
||||
});
|
||||
}
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
public async Task<IActionResult> OnPostEmployeeDataFromApi(string nationalCode, string birthDate)
|
||||
{
|
||||
var result = await _employeeApplication.GetEmployeeDataFromApi(nationalCode, birthDate);
|
||||
return new JsonResult(new
|
||||
{
|
||||
success = result.IsSuccedded,
|
||||
message = result.Message,
|
||||
data = result.Data
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -145,7 +145,7 @@
|
||||
<label class="titleForm2">
|
||||
نظام وظیفه
|
||||
</label>
|
||||
<select class="form-select form-select-sm" id="militaryStatus" asp-for="@Model.MilitaryService">
|
||||
<select class="form-select form-select-sm" id="militaryStatus" name="Command.MilitaryService" asp-for="@Model.MilitaryService">
|
||||
<option value="">انتخاب ...</option>
|
||||
<option value="مشمول">مشمول</option>
|
||||
<option value="پایان خدمت">پایان خدمت</option>
|
||||
|
||||
@@ -8,6 +8,13 @@
|
||||
.modal .modal-dialog .modal-content{
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.disable {
|
||||
filter: grayscale(100%);
|
||||
pointer-events: none;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
@media(min-width: 1650px) {
|
||||
.modal-dialog {
|
||||
margin: auto;
|
||||
@@ -74,7 +81,7 @@
|
||||
}
|
||||
|
||||
.form {
|
||||
position: absolute;
|
||||
/*position: absolute;*/
|
||||
font-size: 1.2rem;
|
||||
width: 100%;
|
||||
}
|
||||
@@ -135,17 +142,31 @@
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.form1, .listForm1 {
|
||||
.formInit {
|
||||
margin-top: 30px;
|
||||
width: 96%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.formInit .formSection {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 30px;
|
||||
height: 45vh;
|
||||
}
|
||||
|
||||
.form1, .listForm1 {
|
||||
/*left: 1200px;*/
|
||||
margin-top: 30px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.form2, .listForm2 {
|
||||
left: 1200px;
|
||||
/*left: 1200px;*/
|
||||
margin-top: 30px;
|
||||
}
|
||||
.form3, .listForm3 {
|
||||
right: 1200px;
|
||||
/*right: 1200px;*/
|
||||
padding: 0 10px;
|
||||
margin: 0;
|
||||
margin-top: 30px;
|
||||
@@ -188,13 +209,15 @@
|
||||
padding: 7px;
|
||||
text-align: center;
|
||||
margin: 0 3px 0 3px;
|
||||
width: 33.33%;
|
||||
/*width: 33.33%;*/
|
||||
width: 25%;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.progressBar {
|
||||
position: absolute;
|
||||
width: 33.33%;
|
||||
/*width: 33.33%;*/
|
||||
width: 25%;
|
||||
background: linear-gradient(90deg, rgba(15,149,0,1) 0%, rgba(53,189,37,1) 18%, rgba(68,207,52,1) 47%, rgba(73,214,57,1) 82%, rgba(15,149,0,1) 100%);
|
||||
height: 103%;
|
||||
right: -1px;
|
||||
|
||||
827
ServiceHost/wwwroot/AdminTheme/css/personelEdit.css
Normal file
827
ServiceHost/wwwroot/AdminTheme/css/personelEdit.css
Normal file
@@ -0,0 +1,827 @@
|
||||
.modal-dialog {
|
||||
width: 55%;
|
||||
margin: 30px auto;
|
||||
}
|
||||
|
||||
#MainModal {
|
||||
backdrop-filter: blur(8px);
|
||||
}
|
||||
|
||||
.modal .modal-dialog .modal-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media(min-width: 1650px) {
|
||||
.modal-dialog {
|
||||
margin: auto;
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%) !important;
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1580px) {
|
||||
.modal-dialog {
|
||||
width: 60%;
|
||||
}
|
||||
}
|
||||
|
||||
.modal .modal-dialog .modal-content {
|
||||
border-radius: 18px;
|
||||
min-height: 68rem;
|
||||
background: #ebebeb;
|
||||
}
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
.modal .modal-dialog .modal-content {
|
||||
min-height: 80rem;
|
||||
}
|
||||
}
|
||||
|
||||
.form-box {
|
||||
position: relative;
|
||||
padding: 40px 20px;
|
||||
top: 5rem;
|
||||
border: 1px solid #d1d1d1;
|
||||
position: relative;
|
||||
border-radius: 1rem;
|
||||
overflow: hidden;
|
||||
min-height: 57rem;
|
||||
}
|
||||
|
||||
.main-title {
|
||||
position: absolute;
|
||||
width: 17rem;
|
||||
font-size: 1.7rem;
|
||||
background-color: inherit;
|
||||
left: 49%;
|
||||
top: 7px;
|
||||
margin-left: -100px;
|
||||
text-align: center;
|
||||
color: black;
|
||||
border: 1px solid #00000030;
|
||||
border-radius: 9px;
|
||||
padding: 2px 0px;
|
||||
}
|
||||
|
||||
.ltr {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.close {
|
||||
margin-top: 12px;
|
||||
margin-left: -19px;
|
||||
font-size: 26px;
|
||||
position: absolute;
|
||||
right: 25px;
|
||||
}
|
||||
|
||||
.form {
|
||||
position: absolute;
|
||||
font-size: 1.2rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.input-type {
|
||||
padding: 0px 8px;
|
||||
}
|
||||
|
||||
.nationality-type {
|
||||
padding: 0.7px 4px;
|
||||
}
|
||||
|
||||
.duty-condition {
|
||||
position: relative;
|
||||
top: -5px;
|
||||
}
|
||||
|
||||
.loc-box {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.loc-text {
|
||||
height: 182px;
|
||||
}
|
||||
|
||||
.insInput {
|
||||
background-color: #d4e9ff;
|
||||
}
|
||||
|
||||
.insInputDate label {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.content-fieldset {
|
||||
width: 95%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.radio-sections {
|
||||
padding: 15px 7px !important;
|
||||
background: #ffffff6b;
|
||||
border-radius: 7px;
|
||||
border: 1px solid #0000004a;
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: space-evenly;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.form1 .form-group, .listForm1 .form-group {
|
||||
justify-content: space-around;
|
||||
padding: 15px 5px 15px 0;
|
||||
border: 1px solid #e3e3e3;
|
||||
box-shadow: 0px 0px 4px 0px #a7a7a7;
|
||||
background: #e5e5e5;
|
||||
border-radius: 7px;
|
||||
margin: 0;
|
||||
margin-bottom: 15px !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.form1, .listForm1 {
|
||||
margin-top: 30px;
|
||||
width: 96%;
|
||||
}
|
||||
|
||||
.form2, .listForm2 {
|
||||
left: 1200px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.form3, .listForm3 {
|
||||
right: 1200px;
|
||||
padding: 0 10px;
|
||||
margin: 0;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.flexible-wrap {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.form3 legend, .listForm3 legend {
|
||||
margin-bottom: 5px;
|
||||
font-size: 16px;
|
||||
border-bottom: 0px;
|
||||
color: #505458;
|
||||
width: 130px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.form3 fieldset, .listForm3 fieldset {
|
||||
border: 1px solid #999797;
|
||||
border-radius: 10px;
|
||||
padding: 5px 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.steps {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: row-reverse;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0;
|
||||
height: 42px;
|
||||
border: 1px solid #36292947;
|
||||
border-top-right-radius: 7px;
|
||||
border-top-left-radius: 7px;
|
||||
box-shadow: 0 2px 5px 0 rgb(104 106 106 / 49%), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
.step {
|
||||
padding: 7px;
|
||||
text-align: center;
|
||||
margin: 0 3px 0 3px;
|
||||
width: 33.33%;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.progressBar {
|
||||
position: absolute;
|
||||
width: 33.33%;
|
||||
background: linear-gradient(90deg, rgba(15,149,0,1) 0%, rgba(53,189,37,1) 18%, rgba(68,207,52,1) 47%, rgba(73,214,57,1) 82%, rgba(15,149,0,1) 100%);
|
||||
height: 103%;
|
||||
right: -1px;
|
||||
top: -1px;
|
||||
transition: 1s;
|
||||
}
|
||||
|
||||
.progressBar:after {
|
||||
content: '';
|
||||
border-top: 20px solid transparent;
|
||||
border-bottom: 20px solid transparent;
|
||||
position: absolute;
|
||||
left: -19px;
|
||||
top: 1px;
|
||||
border-right: 20px solid #0f9500;
|
||||
}
|
||||
|
||||
.radio-box {
|
||||
font-size: 12px;
|
||||
border-radius: 10px;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(15, 1fr);
|
||||
}
|
||||
|
||||
.radio-label {
|
||||
grid-column: 1/7;
|
||||
grid-row: 1;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.radio-input {
|
||||
grid-column: 7 / 16;
|
||||
grid-row: 1;
|
||||
text-align: left;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(15, 1fr);
|
||||
}
|
||||
|
||||
.radio-input label:first-child {
|
||||
grid-column: 1 / 8;
|
||||
}
|
||||
|
||||
.radio-input label:nth-child(2) {
|
||||
grid-column: 8 / 16;
|
||||
}
|
||||
|
||||
.radio-input.nationality {
|
||||
grid-column: 5 / 16;
|
||||
}
|
||||
|
||||
.radio-input.nationality label:first-child {
|
||||
grid-column: 1 / 7;
|
||||
}
|
||||
|
||||
.radio-input.nationality label:nth-child(2) {
|
||||
grid-column: 7 / 16;
|
||||
}
|
||||
|
||||
.form-box input[type="radio"] {
|
||||
margin: 2px 0px;
|
||||
}
|
||||
|
||||
.form-box .radio-input input[type="radio"] {
|
||||
margin: 0 4px 0px 4px;
|
||||
transform: translate(0px,4px);
|
||||
}
|
||||
|
||||
.inputs-box {
|
||||
float: left;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.inputs {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.input {
|
||||
border: 1px solid #0000004a;
|
||||
border-radius: 7px;
|
||||
padding: 7px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.input:focus {
|
||||
box-shadow: 0 2px 5px 0 rgb(136 137 141), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
|
||||
#save {
|
||||
background-color: #0f9500;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#close {
|
||||
background-color: white;
|
||||
color: #323030;
|
||||
}
|
||||
|
||||
.btn-modal {
|
||||
padding: 1rem 0;
|
||||
border-radius: 20px;
|
||||
border: none;
|
||||
font-size: 12px;
|
||||
width: 9rem;
|
||||
}
|
||||
|
||||
.btns {
|
||||
position: absolute;
|
||||
display: inline-flex;
|
||||
bottom: 12px;
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
margin-right: 50px;
|
||||
}
|
||||
|
||||
.btns-2 {
|
||||
bottom: 15px;
|
||||
margin-right: 17px;
|
||||
}
|
||||
|
||||
.btn-modal.pre, .btn-modal.listPrev {
|
||||
border-top-left-radius: 0px;
|
||||
border-bottom-left-radius: 0px;
|
||||
background-color: #c7c0c0ba;
|
||||
color: #000000b8;
|
||||
margin-left: -4px;
|
||||
}
|
||||
|
||||
.btn-modal.next, .btn-modal.listNext {
|
||||
border-top-right-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
margin-left: -4px;
|
||||
border-right: 1px solid #817b7b;
|
||||
background-color: white;
|
||||
color: #1e88b3;
|
||||
}
|
||||
|
||||
.btns-left {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.btn-rounded {
|
||||
border-radius: 2em;
|
||||
padding: 6px 10px;
|
||||
}
|
||||
|
||||
.form-footer-btns {
|
||||
position: absolute;
|
||||
bottom: 5px;
|
||||
left: 40%;
|
||||
}
|
||||
|
||||
.form-footer {
|
||||
padding: 15px;
|
||||
text-align: right;
|
||||
float: left;
|
||||
border-top: 0;
|
||||
position: absolute;
|
||||
bottom: -5px;
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
#divEdit .form-footer {
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
.children-box {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#children-container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 18rem;
|
||||
overflow-y: auto;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #f2f2f2 transparent;
|
||||
direction: ltr;
|
||||
border: 1px solid #9b97976e;
|
||||
border-radius: 10px 10px 7px 7px;
|
||||
padding: 10px 0;
|
||||
background-color: #dbdadaba;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#children {
|
||||
border-collapse: separate !important;
|
||||
position: relative;
|
||||
top: -10px;
|
||||
width: 100%;
|
||||
background: whitesmoke;
|
||||
text-align: center;
|
||||
border-radius: 10px;
|
||||
border: none !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
#children th {
|
||||
text-align: center;
|
||||
color: white;
|
||||
position: sticky;
|
||||
top: -10px;
|
||||
z-index: 20;
|
||||
background-color: #404040;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
#children th, td {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
#children th:nth-child(2n) {
|
||||
border-left: 1px solid #fff;
|
||||
}
|
||||
|
||||
#children tr:nth-child(2n) {
|
||||
background-color: #e3e3e3;
|
||||
}
|
||||
|
||||
#children th:nth-child(2n) {
|
||||
border-left: 1px solid #fff;
|
||||
}
|
||||
|
||||
|
||||
#children td:nth-child(2n) {
|
||||
border-left: 1px solid #fff;
|
||||
border-right: 1px solid #9b979721;
|
||||
}
|
||||
|
||||
#children td:nth-child(2n+1) {
|
||||
border-left: 1px solid #9b979721;
|
||||
display: flex;
|
||||
flex-direction: row-reverse;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#children td {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#children th:first-child {
|
||||
border-radius: 7px 0px 0px 0px;
|
||||
-moz-border-radius: 7px 0px 0px 0px;
|
||||
-webkit-border-radius: 7px 0px 0px 0px;
|
||||
}
|
||||
|
||||
#children th:last-child {
|
||||
border-left: 1px solid #fff;
|
||||
border-radius: 0px 7px 0 0;
|
||||
-moz-border-radius: 0px 7px 0 0;
|
||||
-webkit-border-radius: 0px 7px 0 0;
|
||||
}
|
||||
|
||||
#children tbody tr {
|
||||
min-height: 68px;
|
||||
}
|
||||
|
||||
#children-container.hide-scrollbar::-webkit-scrollbar {
|
||||
width: 0px;
|
||||
}
|
||||
|
||||
#children-container::-webkit-scrollbar {
|
||||
width: 7px;
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
#children-container::-webkit-scrollbar-track {
|
||||
background-color: #f2f2f2;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
#children-container::-webkit-scrollbar-thumb {
|
||||
background-color: #ccc;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
#children-container::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #aaa;
|
||||
}
|
||||
|
||||
.children-box .add {
|
||||
cursor: pointer;
|
||||
padding: 8px 6px;
|
||||
border-radius: 16px;
|
||||
border: 2px solid #0f9500;
|
||||
background: white;
|
||||
color: #0f9500;
|
||||
font-size: 10px;
|
||||
width: 9rem;
|
||||
}
|
||||
|
||||
.d-flex {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.trash {
|
||||
color: #c91d1d;
|
||||
font-size: 22px;
|
||||
position: relative;
|
||||
left: -7px;
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.add:hover {
|
||||
background: #0f9500;
|
||||
color: white;
|
||||
border: 2px solid #0f9500;
|
||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
.items, .items1 {
|
||||
border: 1px solid #c7c7c7;
|
||||
border-radius: 5px;
|
||||
padding: 5px 0px;
|
||||
background-color: white;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.green {
|
||||
background-color: #e0ffe0;
|
||||
}
|
||||
|
||||
.modal-content2 {
|
||||
background-color: whitesmoke;
|
||||
border: 1px solid #a5a5a59e;
|
||||
border-radius: 18px;
|
||||
margin-top: 300px;
|
||||
padding: 0px 30px;
|
||||
}
|
||||
|
||||
.modal .modal-dialoge .modal-content2 .modal-body {
|
||||
padding: 50px 20px;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.modal-dialoge {
|
||||
padding: 0px 180px;
|
||||
}
|
||||
|
||||
.error-icon {
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
top: 40px;
|
||||
font-size: 16px;
|
||||
color: red;
|
||||
}
|
||||
|
||||
.error-message {
|
||||
font-size: 1rem;
|
||||
color: red;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.input-div {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.education {
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
.errored, .patternMisMatch {
|
||||
animation: shake 300ms;
|
||||
box-shadow: inset 0 0 2px #eb3434, 0 0 5px #eb3434 !important;
|
||||
border: 1px solid #eb3434 !important;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
@media (max-width: 1550px) and (min-width:1441px) {
|
||||
.education {
|
||||
height: 33px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1550px) {
|
||||
.modal-content {
|
||||
height: 680px !important;
|
||||
}
|
||||
|
||||
.box {
|
||||
font-size: 12px;
|
||||
height: 575px;
|
||||
top: 40px;
|
||||
}
|
||||
|
||||
.inputs {
|
||||
padding: 6px 8px;
|
||||
}
|
||||
|
||||
.btn-modal {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.main-title {
|
||||
width: 185px;
|
||||
font-size: 17px;
|
||||
left: 52%;
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.trash {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 1440px) {
|
||||
|
||||
#progress:after {
|
||||
border-top: 17px solid transparent;
|
||||
border-bottom: 17px solid transparent;
|
||||
}
|
||||
|
||||
.inputs {
|
||||
padding: 8px 10px;
|
||||
}
|
||||
|
||||
.education {
|
||||
height: 29px;
|
||||
}
|
||||
|
||||
.btn-modal {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.main-title {
|
||||
width: 169px;
|
||||
font-size: 15px;
|
||||
left: 53%;
|
||||
top: 3px;
|
||||
}
|
||||
|
||||
.radio-sections {
|
||||
padding: 8px 5px !important;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.nationality-type {
|
||||
padding: 0px 2px;
|
||||
}
|
||||
|
||||
.input-type {
|
||||
padding: 0px 5px;
|
||||
}
|
||||
|
||||
.duty-condition {
|
||||
top: -9px;
|
||||
}
|
||||
|
||||
.loc-box {
|
||||
margin-top: 9px;
|
||||
}
|
||||
|
||||
#children-container, .loc-text {
|
||||
height: 136px;
|
||||
}
|
||||
|
||||
#children th, td {
|
||||
padding: 5px 8px;
|
||||
}
|
||||
|
||||
#children th {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.radio-box {
|
||||
font-size: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
.form-box {
|
||||
min-height: 69rem;
|
||||
}
|
||||
|
||||
.form1, .listForm1 {
|
||||
width: 93%;
|
||||
}
|
||||
|
||||
.radio-input.nationality label:first-child {
|
||||
grid-column: 1 / 9;
|
||||
}
|
||||
|
||||
.radio-input.nationality label:nth-child(2) {
|
||||
grid-column: 9 / 16;
|
||||
}
|
||||
|
||||
#employee-panel .name-th {
|
||||
max-width: 55px;
|
||||
}
|
||||
|
||||
#employee-panel .Lname-th {
|
||||
max-width: 85px;
|
||||
}
|
||||
|
||||
#employee-panel .code-th {
|
||||
max-width: 55px;
|
||||
}
|
||||
|
||||
#employee-panel .insurance-th {
|
||||
max-width: 50px;
|
||||
}
|
||||
|
||||
#employee-panel #datatable tbody tr td {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.modal-dialog {
|
||||
width: 75%;
|
||||
}
|
||||
/* .operationBtns a {
|
||||
width: 3.8rem;
|
||||
height: 3.6rem;
|
||||
}*/
|
||||
#employee-panel .code-th {
|
||||
max-width: 65px;
|
||||
}
|
||||
|
||||
#employee-panel .Lname-th {
|
||||
max-width: 75px;
|
||||
}
|
||||
|
||||
.Lname-td .fulltext {
|
||||
max-width: 68px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.form-box {
|
||||
min-height: 85rem;
|
||||
padding: 40px 10px;
|
||||
}
|
||||
|
||||
.radio-box, .step {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.modal .modal-dialog .modal-content {
|
||||
min-height: 96rem;
|
||||
}
|
||||
|
||||
.form1 .form-group, .listForm1 .form-group {
|
||||
padding: 8px 5px 8px 0;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.form3 fieldset, .listForm3 fieldset {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.form {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.input-type {
|
||||
padding: 0px 3px;
|
||||
}
|
||||
|
||||
.loc-text {
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.radio-input.nationality, .radio-input {
|
||||
grid-column: 5 / 16;
|
||||
}
|
||||
|
||||
.radio-input.nationality label:first-child {
|
||||
grid-column: 1 / 8;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) and (min-width:490px ) {
|
||||
.Lname-td .fulltext {
|
||||
max-width: 80px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 450px) {
|
||||
.form-box {
|
||||
min-height: 86rem;
|
||||
}
|
||||
|
||||
.form-footer-btns {
|
||||
left: 25%;
|
||||
}
|
||||
|
||||
.name-td .fulltext {
|
||||
max-width: 75px;
|
||||
}
|
||||
|
||||
.modal .modal-dialog .modal-content {
|
||||
min-height: 96rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 390px) {
|
||||
|
||||
.name-td .fulltext {
|
||||
max-width: 65px;
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,40 @@ var idCardPage3;
|
||||
var idCardPage4;
|
||||
var uploadFileCount = UploadedCount;
|
||||
var command = [];
|
||||
var allPicture = [
|
||||
{
|
||||
'label': 0,
|
||||
'changeImage': false
|
||||
},
|
||||
{
|
||||
'label': 1,
|
||||
'changeImage': false
|
||||
},
|
||||
{
|
||||
'label': 2,
|
||||
'changeImage': false
|
||||
},
|
||||
{
|
||||
'label': 3,
|
||||
'changeImage': false
|
||||
},
|
||||
{
|
||||
'label': 4,
|
||||
'changeImage': false
|
||||
},
|
||||
{
|
||||
'label': 5,
|
||||
'changeImage': false
|
||||
},
|
||||
{
|
||||
'label': 6,
|
||||
'changeImage': false
|
||||
},
|
||||
{
|
||||
'label': 7,
|
||||
'changeImage': false
|
||||
},
|
||||
]
|
||||
|
||||
var pendingMessage = `<div class="pendingMessage">بررسی</div>`;
|
||||
var pendingIcon = `<svg width="24" height="24" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11 19.25C15.5563 19.25 19.25 15.5563 19.25 11C19.25 6.44365 15.5563 2.75 11 2.75C6.44365 2.75 2.75 6.44365 2.75 11C2.75 15.5563 6.44365 19.25 11 19.25Z" fill="#FDBA74"/><path d="M11.4168 14.6667C11.4168 14.8968 11.2303 15.0833 11.0002 15.0833C10.77 15.0833 10.5835 14.8968 10.5835 14.6667C10.5835 14.4365 10.77 14.25 11.0002 14.25C11.2303 14.25 11.4168 14.4365 11.4168 14.6667Z" fill="white" stroke="white"/><path d="M11 11.916V6.41602V11.916Z" fill="white"/><path d="M11 11.916V6.41602" stroke="white" stroke-width="1.5" stroke-linecap="round"/></svg>`;
|
||||
@@ -191,10 +225,14 @@ $(document).ready(function () {
|
||||
} else {
|
||||
let picturesPart = {
|
||||
Label: label,
|
||||
PictureFile: newFile
|
||||
PictureFile: newFile,
|
||||
};
|
||||
command.push(picturesPart);
|
||||
}
|
||||
|
||||
var getChangeIndex = allPicture.findIndex(item => item.label === indexFileValue);
|
||||
allPicture[getChangeIndex].changeImage = true;
|
||||
|
||||
};
|
||||
|
||||
reader.readAsDataURL(fileInputFile);
|
||||
@@ -348,12 +386,15 @@ $(document).ready(function () {
|
||||
.then(res => res.blob())
|
||||
.then(blob => {
|
||||
|
||||
var getChangeIndex = allPicture.findIndex(item => item.label === indexFileValue);
|
||||
|
||||
const fileName = `image_${indexFileValue || Date.now()}.png`;
|
||||
const newFile = new File([blob], fileName, { type: blob.type });
|
||||
|
||||
const picturesPart = {
|
||||
Label: label,
|
||||
PictureFile: newFile
|
||||
PictureFile: newFile,
|
||||
WithoutPicture: allPicture[getChangeIndex].changeImage === true ? false : true
|
||||
};
|
||||
|
||||
const existingIndex = command.findIndex(item => item.Label === label);
|
||||
@@ -363,6 +404,8 @@ $(document).ready(function () {
|
||||
command.push(picturesPart);
|
||||
}
|
||||
|
||||
console.log(command);
|
||||
|
||||
$button.addClass('disable');
|
||||
|
||||
pdBox.addClass('pending');
|
||||
@@ -658,6 +701,9 @@ function uploadCanvasAsFile(canvas, fileName, indexFileValue, label) {
|
||||
command.push(picturesPart);
|
||||
}
|
||||
|
||||
var getChangeIndex = allPicture.findIndex(item => item.label === indexFileValue);
|
||||
allPicture[getChangeIndex].changeImage = true;
|
||||
|
||||
showLoadingAnimation(indexFileValue);
|
||||
|
||||
}, "image/png");
|
||||
@@ -749,6 +795,7 @@ function saveSubmit(id) {
|
||||
command.forEach((item, index) => {
|
||||
formData.append(`command[${index}].Label`, item.Label);
|
||||
formData.append(`command[${index}].PictureFile`, item.PictureFile);
|
||||
formData.append(`command[${index}].WithoutPicture`, item.WithoutPicture);
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
|
||||
Reference in New Issue
Block a user