Files
Backend-Api/CompanyManagment.Application/EmployeeAplication.cs

1714 lines
71 KiB
C#

using System;
using System.IO;
using System.Collections.Generic;
using _0_Framework.InfraStructure;
using Company.Domain.EmployeeAgg;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.EFCore;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
using Company.Domain.EmployeeInsuranceRecordAgg;
using Company.Domain.WorkshopAgg;
using System.Linq;
using System.Threading.Tasks;
using Company.Domain.PersonnelCodeAgg;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using CompanyManagment.App.Contracts.EmployeeBankInformation;
using CompanyManagment.App.Contracts.EmployeeDocuments;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
using Microsoft.AspNetCore.Hosting;
using System.IO;
using System.Transactions;
using Company.Domain.EmployeeClientTempAgg;
using Company.Domain.LeftWorkTempAgg;
using CompanyManagment.App.Contracts.LeftWorkTemp;
using _0_Framework.Application.UID;
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
using Company.Domain.EmployeeDocumentsAgg;
using Company.Domain.RollCallEmployeeAgg;
using Company.Domain.CustomizeWorkshopGroupSettingsAgg;
using Company.Domain.LeftWorkAgg;
using CompanyManagment.App.Contracts.Employee.DTO;
using Company.Domain.EmployeeAuthorizeTempAgg;
using Company.Domain.LeftWorkInsuranceAgg;
using _0_Framework.Application.FaceEmbedding;
namespace CompanyManagment.Application;
public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeApplication
{
private readonly IEmployeeRepository _EmployeeRepository;
private readonly IWorkshopRepository _WorkShopRepository;
private readonly CompanyContext _context;
public bool nationalCodValid = false;
public bool idnumberIsOk = true;
public bool nameIsOk = true;
public bool nationalcodeIsOk = true;
public bool StatCity = true;
public bool city = true;
public bool address = true;
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
private readonly ICustomizeWorkshopSettingsApplication _customizeWorkshopSettingsApplication;
private readonly IEmployeeDocumentsApplication _employeeDocumentsApplication;
private readonly IEmployeeBankInformationApplication _employeeBankInformationApplication;
private readonly ILeftWorkTempRepository _leftWorkTempRepository;
private readonly IUidService _uidService;
private readonly ICustomizeWorkshopEmployeeSettingsRepository _customizeWorkshopEmployeeSettingsRepository;
private readonly ILeftWorkRepository _leftWorkRepository;
private readonly IPersonnelCodeRepository _personnelCodeRepository;
private readonly IEmployeeClientTempRepository _employeeClientTempRepository;
private readonly ICustomizeWorkshopGroupSettingsRepository _customizeWorkshopGroupSettingsRepository;
private readonly IEmployeeAuthorizeTempRepository _employeeAuthorizeTempRepository;
private readonly ILeftWorkInsuranceRepository _leftWorkInsuranceRepository;
private readonly IFaceEmbeddingService _faceEmbeddingService;
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, ILeftWorkInsuranceRepository leftWorkInsuranceRepository, IFaceEmbeddingService faceEmbeddingService) : base(context)
{
_context = context;
_WorkShopRepository = workShopRepository;
_webHostEnvironment = webHostEnvironment;
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
_rollCallEmployeeRepository = rollCallEmployeeRepository;
_customizeWorkshopSettingsApplication = customizeWorkshopSettingsApplication;
_employeeDocumentsApplication = employeeDocumentsApplication;
_employeeBankInformationApplication = employeeBankInformationApplication;
_leftWorkTempRepository = leftWorkTempRepository;
_uidService = uidService;
_customizeWorkshopEmployeeSettingsRepository = customizeWorkshopEmployeeSettingsRepository;
_personnelCodeRepository = personnelCodeRepository;
_employeeClientTempRepository = employeeClientTempRepository;
_leftWorkRepository = leftWorkRepository;
_employeeAuthorizeTempRepository = employeeAuthorizeTempRepository;
_leftWorkInsuranceRepository = leftWorkInsuranceRepository;
_EmployeeRepository = employeeRepository;
_faceEmbeddingService = faceEmbeddingService;
}
public OperationResult Create(CreateEmployee command)
{
var opration = new OperationResult();
if (_EmployeeRepository.Exists(x =>
x.LName == command.LName && x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(command.NationalCode) && x.NationalCode != null && x.IsActiveString == "true"))
return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد");
//if (_EmployeeRepository.Exists(x => x.IdNumber == command.IdNumber && x.IdNumber !=null))
//{
// idnumberIsOk = false;
// return opration.Failed("شماره شناسنامه وارد شده تکراری است");
//}
//if (_EmployeeRepository.Exists(x => x.LName == command.LName && x.FName == command.FName))
//{
// nameIsOk = false;
// return opration.Failed("نام و نام خانوادگی وارد شده تکراری است");
//}
if (command.Address != null && command.State == null)
{
StatCity = false;
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "لطفا شهر را انتخاب نمایید")
{
city = false;
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
address = false;
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (!string.IsNullOrWhiteSpace(command.NationalCode))
{
try
{
char[] chArray = command.NationalCode.ToCharArray();
int[] numArray = new int[chArray.Length];
var cunt = chArray.Length;
for (int i = 0; i < chArray.Length; i++)
{
numArray[i] = (int)char.GetNumericValue(chArray[i]);
}
int num2 = numArray[9];
switch (command.NationalCode)
{
case "0000000000":
case "1111111111":
case "22222222222":
case "33333333333":
case "4444444444":
case "5555555555":
case "6666666666":
case "7777777777":
case "8888888888":
case "9999999999":
nationalCodValid = false;
return opration.Failed("کد ملی وارد شده صحیح نمی باشد");
}
int num3 =
((((((((numArray[0] * 10) + (numArray[1] * 9)) + (numArray[2] * 8)) + (numArray[3] * 7)) +
(numArray[4] * 6)) + (numArray[5] * 5)) + (numArray[6] * 4)) + (numArray[7] * 3)) +
(numArray[8] * 2);
int num4 = num3 - ((num3 / 11) * 11);
if ((((num4 == 0) && (num2 == num4)) || ((num4 == 1) && (num2 == 1))) ||
((num4 > 1) && (num2 == Math.Abs((int)(num4 - 11)))) && cunt <= 10)
{
nationalCodValid = true;
}
else
{
nationalCodValid = false;
return opration.Failed("کد ملی وارد شده نا معتبر است");
}
}
catch (Exception)
{
nationalCodValid = false;
return opration.Failed("لطفا کد ملی 10 رقمی وارد کنید");
}
if (_EmployeeRepository.Exists(x => x.NationalCode == command.NationalCode))
{
nationalcodeIsOk = false;
return opration.Failed("کد ملی وارد شده تکراری است");
}
}
string initial = "1300/10/11";
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.IdNumberSerial, command.IdNumberSeri,
command.Phone, command.Address,
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
command.FieldOfStudy, command.BankCardNumber,
command.BankBranch, command.InsuranceCode, command.InsuranceHistoryByYear,
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();
return opration.Succcedded(employeeData.id);
}
public OperationResult Edit(EditEmployee command)
{
var opration = new OperationResult();
var employee = _EmployeeRepository.Get(command.Id);
if (employee == null)
return opration.Failed("رکورد مورد نظر یافت نشد");
if (_EmployeeRepository.Exists(x =>
x.LName == command.LName && x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(command.NationalCode) && x.id != command.Id && x.IsActiveString == "true"))
return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد");
//if (_EmployeeRepository.Exists(x => x.IdNumber == command.IdNumber && x.IdNumber != null && x.id != command.Id))
// return opration.Failed("شماره شناسنامه وارد شده تکراری است");
if (command.Address != null && command.State == null)
{
StatCity = false;
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "لطفا شهر را انتخاب نمایید")
{
city = false;
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
address = false;
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (!string.IsNullOrWhiteSpace(command.NationalCode))
{
try
{
char[] chArray = command.NationalCode.ToCharArray();
int[] numArray = new int[chArray.Length];
var cunt = chArray.Length;
for (int i = 0; i < chArray.Length; i++)
{
numArray[i] = (int)char.GetNumericValue(chArray[i]);
}
int num2 = numArray[9];
switch (command.NationalCode)
{
case "0000000000":
case "1111111111":
case "22222222222":
case "33333333333":
case "4444444444":
case "5555555555":
case "6666666666":
case "7777777777":
case "8888888888":
case "9999999999":
nationalCodValid = false;
return opration.Failed("کد ملی وارد شده صحیح نمی باشد");
}
int num3 =
((((((((numArray[0] * 10) + (numArray[1] * 9)) + (numArray[2] * 8)) + (numArray[3] * 7)) +
(numArray[4] * 6)) + (numArray[5] * 5)) + (numArray[6] * 4)) + (numArray[7] * 3)) +
(numArray[8] * 2);
int num4 = num3 - ((num3 / 11) * 11);
if ((((num4 == 0) && (num2 == num4)) || ((num4 == 1) && (num2 == 1))) ||
((num4 > 1) && (num2 == Math.Abs((int)(num4 - 11)))) && cunt <= 10)
{
nationalCodValid = true;
}
else
{
if (command.Nationality == "ایرانی")
{
nationalCodValid = false;
return opration.Failed("کد ملی وارد شده نا معتبر است");
}
else
{
nationalCodValid = true;
}
}
}
catch (Exception)
{
nationalCodValid = false;
return opration.Failed("لطفا کد ملی 10 رقمی وارد کنید");
}
if (_EmployeeRepository.Exists(x => x.NationalCode == command.NationalCode && x.id != command.Id))
{
nationalcodeIsOk = false;
return opration.Failed("کد ملی وارد شده تکراری است");
}
}
string initial = "1300/10/11";
var dateOfBirth = command.DateOfBirth != null ? command.DateOfBirth.ToGeorgianDateTime() : initial.ToGeorgianDateTime();
var dateOfIssue = command.DateOfIssue != null ? command.DateOfIssue.ToGeorgianDateTime() : initial.ToGeorgianDateTime();
employee.Edit(command.FName, command.LName, command.FatherName, dateOfBirth,
dateOfIssue,
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality,
command.Phone, command.Address,
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
command.FieldOfStudy, command.BankCardNumber,
command.BankBranch, command.InsuranceCode, command.InsuranceHistoryByYear,
command.InsuranceHistoryByMonth, command.NumberOfChildren, command.OfficePhone
, command.MclsUserName, command.MclsPassword, command.EserviceUserName, command.EservicePassword,
command.TaxOfficeUserName, command.TaxOfficepassword, command.SanaUserName, command.SanaPassword);
_EmployeeRepository.SaveChanges();
return opration.Succcedded();
}
public EditEmployee GetDetails(long id)
{
return _EmployeeRepository.GetDetails(id);
}
public OperationResult Active(long id)
{
var opration = new OperationResult();
var employer = _EmployeeRepository.Get(id);
if (employer == null)
return opration.Failed("رکورد مورد نظر یافت نشد");
employer.Active();
_EmployeeRepository.SaveChanges();
return opration.Succcedded();
}
public OperationResult DeActive(long id)
{
var opration = new OperationResult();
var employer = _EmployeeRepository.Get(id);
if (employer == null)
return opration.Failed("رکورد مورد نظر یافت نشد");
employer.DeActive();
_EmployeeRepository.SaveChanges();
return opration.Succcedded();
}
public Task<List<EmployeeSelectListViewModel>> GetEmployeeToList()
{
return _EmployeeRepository.GetEmployeeToList();
}
public List<EmployeeViewModel> GetEmployee()
{
return _EmployeeRepository.GetEmployee();
}
public async Task<List<EmployeeViewModel>> Search(EmployeeSearchModel searchModel)
{
var res = await _EmployeeRepository.Search(searchModel);
foreach (var item in res)
{
var children = _context.EmployeeChildrenSet.Count(x => x.EmployeeId == item.Id);
item.NumberOfChildren = Convert.ToString(children);
}
return res;
}
public List<EmployeeInsuranceRecordViewModel> SearchInsuranceRecord(EmployeeInsuranceRecordSearchModel searchModel)
{
return _EmployeeRepository.SearchInsuranceRecord(searchModel);
}
public OperationResult CreateEmployeeInsuranceRecord(CreateEmployeeInsuranceRecord command)
{
var opration = new OperationResult();
var employeeData = new EmployeeInsuranceRecord(command.EmployeeId, command.WorkShopId, command.DateOfStart, command.DateOfEnd);
_EmployeeRepository.CreateEmployeeInsuranceRecord(employeeData);
_EmployeeRepository.SaveChanges();
return opration.Succcedded();
}
public OperationResult EditEmployeeInsuranceRecord(EditEmployeeInsuranceRecord command)
{
var opration = new OperationResult();
var employee = _EmployeeRepository.GetEmployeeInsuranceRecord(command.Id);
employee.Edit(command.EmployeeId, command.WorkShopId, command.DateOfStart, command.DateOfEnd);
_EmployeeRepository.SaveChanges();
return opration.Succcedded();
}
public void RemoveEmployeeInsuranceRecord(long Id)
{
_EmployeeRepository.RemoveEmployeeInsuranceRecord(Id);
}
public OperationResult ValidationEmployeeInsuranceRecord(EmployeeInsuranceRecordViewModel eir)
{
var opration = new OperationResult();
if (eir.WorkShopId == 0)
{
return opration.Failed("خطا در انتخاب کارگاه");
}
var ws = _WorkShopRepository.GetDetails(eir.WorkShopId);
if (string.IsNullOrWhiteSpace(eir.DateOfStart))
{
return opration.Failed("تاریخ شروع نمی تواند خالی باشد - " + ws.WorkshopFullName);
}
if (!string.IsNullOrWhiteSpace(eir.DateOfEnd))
{
if (eir.DateOfEnd.ToGeorgianDateTime() < eir.DateOfStart.ToGeorgianDateTime())
{
return opration.Failed("خطا در وارد کردن تاریخ ئر کارگاه " + ws.WorkshopFullName);
}
}
if (eir.DateOfStart.ToString() == "1/1/0001 12:00:00 AM")
{
return opration.Failed("تاریخ شروع نمی تواند خالی باشد - " + ws.WorkshopFullName);
}
return opration.Succcedded();
}
public OperationResult ValidationEmployeeInsuranceRecord(List<CreateEmployeeInsuranceRecord> eir_lst)
{
var opration = new OperationResult();
int count = 0;
var _eir_lst = eir_lst.OrderBy(x => x.DateOfStart);
var ws = eir_lst.Select(x => x.WorkShopId).ToList();
foreach (var work in ws)
{
var wshop = _WorkShopRepository.GetDetails(work);
var q = _eir_lst.Where(x => x.WorkShopId == work).ToList();
count = 0;
for (int i = 0; i < q.Count; i++)
{
if ((i + 1) < q.Count)
if (q[i].DateOfEnd > q[i + 1].DateOfStart)
{
return opration.Failed("خطا در تداخل تاریخ - " + wshop.WorkshopFullName);
}
if (string.IsNullOrEmpty(q[i].DateOfEnd.ToString()))
{
count++;
}
}
if (count > 1)
{
return opration.Failed("تاریخ ترک کار را وارد نمایید ");
}
}
return opration.Succcedded();
}
public OperationResult ValidationEmployeeCompleteItem(long employeeId)
{
var opration = new OperationResult();
string error = "";
if (employeeId == 0)
{
return opration.Failed("خطا در انتخاب پرسنل");
}
var employee = _EmployeeRepository.GetDetails(employeeId);
if (string.IsNullOrWhiteSpace(employee.FName))
{
error += "(نام)" + Environment.NewLine;
}
if (string.IsNullOrWhiteSpace(employee.LName))
{
error += "(نام خانوادگی)" + Environment.NewLine;
}
if (string.IsNullOrWhiteSpace(employee.NationalCode))
{
error += "(کد ملی)" + Environment.NewLine;
}
if (string.IsNullOrWhiteSpace(employee.PlaceOfIssue))
{
error += "(شهر محل تولد)" + Environment.NewLine;
}
if (string.IsNullOrWhiteSpace(employee.DateOfBirth))
{
error += "(تاریخ تولد)" + Environment.NewLine;
}
if (string.IsNullOrWhiteSpace(employee.IdNumber))
{
error += "(شماره شناسنامه)" + Environment.NewLine;
}
if (string.IsNullOrWhiteSpace(employee.InsuranceCode))
{
error += "(شماره بیمه)" + Environment.NewLine;
}
if (!string.IsNullOrWhiteSpace(error))
{
var note = "آیتم های زیر برای ثبت سابقه الزامی می باشد" + Environment.NewLine + error;
return opration.Failed(note);
}
return opration.Succcedded();
}
public List<EmployeeViewModel> GetEmployeeByTextSearch(string textSearch)
{
return _EmployeeRepository.GetEmployeeByTextSearch(textSearch);
}
public List<EmployeeViewModel> SearchForClient(EmployeeSearchModel searchModel)
{
var res = _EmployeeRepository.SearchForClient(searchModel);
try
{
//Stopwatch w = new Stopwatch();
//w.Start();
//foreach (var item in res)
//{
// var personnelCode = _context.PersonnelCodeSet.FirstOrDefault(x => x.EmployeeId == item.Id);
// item.PersonnelCode = personnelCode!=null? personnelCode.PersonnelCode:null;
//}
//w.Stop();
//Console.WriteLine("for :" + w.ElapsedMilliseconds);
//Stopwatch w2 = new Stopwatch();
//w2.Start();
res = res.Select(x => new EmployeeViewModel
{
Id = x.Id,
FName = x.FName,
LName = x.LName,
EmployeeFullName = x.FName + " " + x.LName,
FatherName = x.FatherName,
NationalCode = x.NationalCode,
IdNumber = x.IdNumber,
DateOfBirth = x.DateOfBirth,
Address = x.Address,
State = x.State,
City = x.City,
Gender = x.Gender,
InsuranceCode = x.InsuranceCode,
IsActiveString = x.IsActiveString,
IsActive = x.IsActive,
PersonnelCode = _context.PersonnelCodeSet.FirstOrDefault(p => p.EmployeeId == x.Id && p.WorkshopId == searchModel.WorkshopId)?.PersonnelCode
}).ToList();
//w2.Stop();
//Console.WriteLine("efore :" + w2.ElapsedMilliseconds);
}
catch (Exception ex)
{
}
return res;
}
public OperationResult Remove(long id)
{
var opration = new OperationResult();
try
{
_EmployeeRepository.Remove(id);
_EmployeeRepository.SaveChanges();
opration.Message = "حذف با موفقیت انجام شد";
opration.IsSuccedded = true;
return opration;
}
catch (Exception er)
{
return opration.Failed("حذف با خطا مواجه شد");
}
}
public List<EmployeeViewModel> GetEmployeeByTextSearchForClient(string textSearch, long workshopId)
{
return _EmployeeRepository.GetEmployeeByTextSearchForClient(textSearch, workshopId);
}
public List<EmployeeViewModel> GetEmployeeByTextSearchNationalCodeForClient(string textSearch, long workshopId)
{
return _EmployeeRepository.GetEmployeeByTextSearchNationalCodeForClient(textSearch, workshopId);
}
public List<EmployeeViewModel> GetEmployeeByTextSearchInsuranceCodeForClient(string textSearch, long workshopId)
{
return _EmployeeRepository.GetEmployeeByTextSearchInsuranceCodeForClient(textSearch, workshopId);
}
public OperationResult CreateEmployeeForClient(CreateEmployee command)
{
var opration = new OperationResult();
if (_EmployeeRepository.Exists(x => x.NationalCode == command.NationalCode && x.NationalCode != null))
{
//if (_EmployeeRepository.ExistsEmployeeAccountNationalCode(command.NationalCode))
if (_EmployeeRepository.ExistsEmployeeWorkshopNationalCode(command.NationalCode, command.WorkshopId))
return opration.Failed("کد ملی وارد شده تکراری است");
}
if (_EmployeeRepository.Exists(x => x.InsuranceCode == command.InsuranceCode && x.InsuranceCode != null))
{
if (_EmployeeRepository.ExistsEmployeeWorkshoppInsuranceCode(command.InsuranceCode, command.WorkshopId))
return opration.Failed("کد بیمه وارد شده تکراری است");
}
if (command.Address != null && command.State == null)
{
StatCity = false;
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "لطفا شهر را انتخاب نمایید")
{
city = false;
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
address = false;
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (!string.IsNullOrWhiteSpace(command.NationalCode))
{
try
{
char[] chArray = command.NationalCode.ToCharArray();
int[] numArray = new int[chArray.Length];
var cunt = chArray.Length;
for (int i = 0; i < chArray.Length; i++)
{
numArray[i] = (int)char.GetNumericValue(chArray[i]);
}
int num2 = numArray[9];
switch (command.NationalCode)
{
case "0000000000":
case "1111111111":
case "22222222222":
case "33333333333":
case "4444444444":
case "5555555555":
case "6666666666":
case "7777777777":
case "8888888888":
case "9999999999":
nationalCodValid = false;
return opration.Failed("کد ملی وارد شده صحیح نمی باشد");
}
int num3 =
((((((((numArray[0] * 10) + (numArray[1] * 9)) + (numArray[2] * 8)) + (numArray[3] * 7)) +
(numArray[4] * 6)) + (numArray[5] * 5)) + (numArray[6] * 4)) + (numArray[7] * 3)) +
(numArray[8] * 2);
int num4 = num3 - ((num3 / 11) * 11);
if ((((num4 == 0) && (num2 == num4)) || ((num4 == 1) && (num2 == 1))) ||
((num4 > 1) && (num2 == Math.Abs((int)(num4 - 11)))) && cunt <= 10)
{
nationalCodValid = true;
}
else
{
nationalCodValid = false;
return opration.Failed("کد ملی وارد شده نا معتبر است");
}
}
catch (Exception)
{
nationalCodValid = false;
return opration.Failed("لطفا کد ملی 10 رقمی وارد کنید");
}
//if (_EmployeeRepository.Exists(x => x.NationalCode == command.NationalCode))
//{
// nationalcodeIsOk = false;
// return opration.Failed("کد ملی وارد شده تکراری است");
//}
}
var result = _EmployeeRepository.CreateEmployeeForClient(command);
if (result != 0)
return opration.Succcedded(result);
else
return opration.Failed("ثبت با خطا مواجه شد!");
}
public OperationResult EditEmployeeForClient(EditEmployee command)
{
var opration = new OperationResult();
var employee = _EmployeeRepository.Get(command.Id);
if (employee == null)
return opration.Failed("رکورد مورد نظر یافت نشد");
//if (_EmployeeRepository.Exists(x =>
// x.LName == command.LName && x.NationalCode == command.NationalCode && x.NationalCode != null && x.id != command.Id))
// return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد");
if (_EmployeeRepository.Exists(x => x.NationalCode == command.NationalCode && x.id != command.Id))
{
nationalcodeIsOk = false;
if (_EmployeeRepository.ExistsEmployeeWorkshopNationalCodeEmployeeId(command.NationalCode, command.WorkshopId, command.Id))
return opration.Failed("کد ملی وارد شده تکراری است");
}
if (!string.IsNullOrEmpty(command.InsuranceCode) && _EmployeeRepository.Exists(x => x.InsuranceCode == command.InsuranceCode && x.id != command.Id))
{
nationalcodeIsOk = false;
if (_EmployeeRepository.ExistsEmployeeWorkshopInsuranceCodeEmployeeId(command.InsuranceCode, command.WorkshopId, command.Id))
return opration.Failed("کد بیمه وارد شده تکراری است");
}
if (command.Address != null && command.State == null)
{
StatCity = false;
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "لطفا شهر را انتخاب نمایید")
{
city = false;
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
address = false;
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (!string.IsNullOrWhiteSpace(command.NationalCode))
{
try
{
char[] chArray = command.NationalCode.ToCharArray();
int[] numArray = new int[chArray.Length];
var cunt = chArray.Length;
for (int i = 0; i < chArray.Length; i++)
{
numArray[i] = (int)char.GetNumericValue(chArray[i]);
}
int num2 = numArray[9];
switch (command.NationalCode)
{
case "0000000000":
case "1111111111":
case "22222222222":
case "33333333333":
case "4444444444":
case "5555555555":
case "6666666666":
case "7777777777":
case "8888888888":
case "9999999999":
nationalCodValid = false;
return opration.Failed("کد ملی وارد شده صحیح نمی باشد");
}
int num3 =
((((((((numArray[0] * 10) + (numArray[1] * 9)) + (numArray[2] * 8)) + (numArray[3] * 7)) +
(numArray[4] * 6)) + (numArray[5] * 5)) + (numArray[6] * 4)) + (numArray[7] * 3)) +
(numArray[8] * 2);
int num4 = num3 - ((num3 / 11) * 11);
if ((((num4 == 0) && (num2 == num4)) || ((num4 == 1) && (num2 == 1))) ||
((num4 > 1) && (num2 == Math.Abs((int)(num4 - 11)))) && cunt <= 10)
{
nationalCodValid = true;
}
else
{
nationalCodValid = false;
return opration.Failed("کد ملی وارد شده نا معتبر است");
}
}
catch (Exception)
{
nationalCodValid = false;
return opration.Failed("لطفا کد ملی 10 رقمی وارد کنید");
}
}
string initial = "1300/10/11";
var dateOfBirth = command.DateOfBirth != null ? command.DateOfBirth.ToGeorgianDateTime() : initial.ToGeorgianDateTime();
var dateOfIssue = command.DateOfIssue != null ? command.DateOfIssue.ToGeorgianDateTime() : initial.ToGeorgianDateTime();
employee.Edit(command.FName, command.LName, command.FatherName, dateOfBirth,
dateOfIssue,
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality,
command.Phone, command.Address,
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
command.FieldOfStudy, command.BankCardNumber,
command.BankBranch, command.InsuranceCode, command.InsuranceHistoryByYear,
command.InsuranceHistoryByMonth, command.NumberOfChildren, command.OfficePhone
, command.MclsUserName, command.MclsPassword, command.EserviceUserName, command.EservicePassword,
command.TaxOfficeUserName, command.TaxOfficepassword, command.SanaUserName, command.SanaPassword);
_EmployeeRepository.SaveChanges();
return opration.Succcedded();
}
public EditEmployee GetDetailsForClient(long id, long workshopId)
{
var employee = _EmployeeRepository.GetDetails(id);
employee.PersonelCode = _context.PersonnelCodeSet.FirstOrDefault(p => p.EmployeeId == id && p.WorkshopId == workshopId)?.PersonnelCode;
return employee;
}
#region NewByHeydari
public List<EmployeeViewModel> SearchForMain(EmployeeSearchModel searchModel)
{
var res = _EmployeeRepository.SearchForMain(searchModel);
foreach (var item in res)
{
var children = _context.EmployeeChildrenSet.Count(x => x.EmployeeId == item.Id);
item.NumberOfChildren = Convert.ToString(children);
}
return res;
}
#endregion
#region Pooya
public EmployeeViewModel GetEmployeeByNationalCodeIfHasActiveLeftWork(string nationalCode, List<long> workshopIds)
{
if (nationalCode.NationalCodeValid() != "valid")
return new();
var workshopEmployeesWithLeftWork = _EmployeeRepository.GetWorkingEmployeesByWorkshopIdsAndNationalCodeAndDate(workshopIds, nationalCode, DateTime.Now.Date);
return workshopEmployeesWithLeftWork.FirstOrDefault();
}
public EmployeeViewModel GetEmployeeByNationalCodeIfHasLeftWork(string nationalCode, List<long> workshopIds)
{
if (nationalCode.NationalCodeValid() != "valid")
return new();
var workshopEmployeesWithLeftWork = _EmployeeRepository.GetWorkedEmployeesByWorkshopIdsAndNationalCodeAndDate(workshopIds, nationalCode, DateTime.Now.Date);
return workshopEmployeesWithLeftWork.FirstOrDefault();
}
public List<EmployeeViewModel> GetWorkingEmployeesByWorkshopId(long workshopId)
{
return _EmployeeRepository.GetWorkingEmployeesByWorkshopId(workshopId);
}
public List<EmployeeViewModel> GetRangeByIds(IEnumerable<long> employeeIds)
{
return _EmployeeRepository.GetRangeByIds(employeeIds).Select(x => new EmployeeViewModel
{
Id = x.id,
FName = x.FName,
LName = x.LName,
Gender = x.Gender,
NationalCode = x.NationalCode,
IdNumber = x.IdNumber,
Nationality = x.Nationality,
FatherName = x.FatherName,
DateOfBirth = x.DateOfBirth.ToFarsi(),
DateOfIssue = x.DateOfIssue.ToFarsi(),
PlaceOfIssue = x.PlaceOfIssue,
Phone = x.Phone,
Address = x.Address,
State = x.State,
City = x.City,
MaritalStatus = x.MaritalStatus,
MilitaryService = x.MilitaryService,
LevelOfEducation = x.LevelOfEducation,
FieldOfStudy = x.FieldOfStudy,
BankCardNumber = x.BankCardNumber,
BankBranch = x.BankBranch,
InsuranceCode = x.InsuranceCode,
InsuranceHistoryByYear = x.InsuranceHistoryByYear,
InsuranceHistoryByMonth = x.InsuranceHistoryByMonth,
NumberOfChildren = x.NumberOfChildren,
OfficePhone = x.OfficePhone,
EmployeeFullName = x.FName + " " + x.LName
}).ToList();
}
#endregion
#region Mahan
public OperationResult CreateEmployeeByClient(CreateEmployeeByClient command)
{
OperationResult op = new();
if (command.Gender != "مرد" && command.Gender != "زن")
return op.Failed("جنسیت را انتخاب کنید");
if (string.IsNullOrWhiteSpace(command.FirstName) || string.IsNullOrWhiteSpace(command.LastName))
return op.Failed("نام نمی تواند خالی باشد");
if (command.MaritalStatus != "مجرد" && command.MaritalStatus != "متاهل")
return op.Failed("وضعیت تاهل نمی تواند خالی باشد");
bool isNationalCardValid = command.NationalCode?.NationalCodeValid() == "valid";
if (isNationalCardValid == false)
return op.Failed("کد ملی وارد شده معتبر نمی باشد");
if (command.Nationality != "ایرانی")
return op.Failed("خطای سیستمی");
if (!_WorkShopRepository.Exists(x => x.id == command.WorkshopId))
{
return op.Failed("کارگاه نامعتبر است");
}
using var transaction = new TransactionScope();
//if (_EmployeeRepository.ExistsIgnoreQueryFilter(x => x.NationalCode == command.NationalCode && x.EmployeeType == EmployeeType.CreatedByClient))
//{
// return op.Failed("این پرسنل قبلا افزوده شده است و در انتظار تایید میباشد");
//}
var employee = _EmployeeRepository.GetByNationalCodeIgnoreQueryFilter(command.NationalCode);
var workshop = _WorkShopRepository.GetDetails(command.WorkshopId);
if (employee == null && command.CanceledAuthorize)
{
var birthDate = command.BirthDate.ToGeorgianDateTime();
var dateOfIssue = new DateTime(1922, 1, 1);
employee = new Employee(command.FirstName, command.LastName, null, birthDate,
dateOfIssue, null, command.NationalCode, null, command.Gender, "ایرانی", null, null);
_EmployeeRepository.Create(employee);
_EmployeeRepository.SaveChanges();
}
if (employee == null)
{
return op.Failed("خطای سیستمی. لطفا دوباره تلاش کنید . درصورت تکرار این مشکل با تیم پشتیبان تماس بگیرید");
}
if (_leftWorkTempRepository.Exists(x =>
x.EmployeeId == employee.id && x.WorkshopId == command.WorkshopId && x.LeftWorkType == LeftWorkTempType.StartWork))
{
return op.Failed("این پرسنل در کارگاه شما قبلا افزوده شده است و در انتظار تایید میباشد");
}
var startLeftWork = command.StartLeftWork.ToGeorgianDateTime();
var leftWorkViewModel = _leftWorkRepository.GetLastLeftWorkByEmployeeIdAndWorkshopId(command.WorkshopId, employee.id);
PersonnelCodeDomain personnelCode = null;
if (leftWorkViewModel != null)
{
if (leftWorkViewModel.HasLeft == false && leftWorkViewModel.LeftWorkDate > DateTime.Now)
{
return op.Failed("شما نمیتوانید پرسنلی که در کارگاه شما در حال کار است را ایجاد کنید");
}
if (leftWorkViewModel.LeftWorkDate > startLeftWork)
{
return op.Failed("شما نمیتوانید قبل از بازه ترک کار قبلی پرسنل شروع به کاری ثبت کنید");
}
}
else
{
var insuranceLeftWork =
_leftWorkInsuranceRepository.GetLastLeftWorkByEmployeeIdAndWorkshopId(command.WorkshopId, employee.id);
if (insuranceLeftWork == null)
{
var lastPersonnelCodeByWorkshop =
_personnelCodeRepository.GetLastPersonnelCodeByWorkshop(command.WorkshopId);
personnelCode = new PersonnelCodeDomain(command.WorkshopId,
employee.id, lastPersonnelCodeByWorkshop + 1);
}
}
var leftWorkTemp = LeftWorkTemp.CreateStartWork(command.WorkshopId, employee.id, startLeftWork, command.JobId);
_leftWorkTempRepository.Create(leftWorkTemp);
_leftWorkTempRepository.SaveChanges();
if (personnelCode != null)
{
_personnelCodeRepository.Create(personnelCode);
_personnelCodeRepository.SaveChanges();
}
if ((string.IsNullOrWhiteSpace(command.RollCallUploadEmployeePicture?.Picture1) == false &&
string.IsNullOrWhiteSpace(command.RollCallUploadEmployeePicture?.Picture2) == false) &&
command.CreateCustomizeEmployeeSettings.GroupId > 0)
{
var directoryPath = $"{_webHostEnvironment.ContentRootPath}\\Faces\\{command.WorkshopId}\\{employee.id}";
if (!Directory.Exists(directoryPath))
Directory.CreateDirectory(directoryPath);
var filePath1 = Path.Combine(directoryPath) + $@"\1.jpg";
CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture1, filePath1);
var filePath2 = Path.Combine(directoryPath) + $@"\2.jpg";
CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture2, filePath2);
var rollCallEmployee =
_rollCallEmployeeRepository.GetBy(employee.id, command.WorkshopId);
if (rollCallEmployee == null)
{
if (_employeeClientTempRepository.Exists(x =>
x.EmployeeId == employee.id && x.WorkshopId == command.WorkshopId))
{
//var employeeTemp =
// _employeeClientTempRepository.GetByEmployeeIdAndWorkshopId(employee.id, command.WorkshopId);
rollCallEmployee = new RollCallEmployee(command.WorkshopId, employee.id, employee.FName,
employee.LName);
}
else
{
rollCallEmployee =
new RollCallEmployee(command.WorkshopId, employee.id, employee.FName, employee.LName);
}
rollCallEmployee.HasImage();
_rollCallEmployeeRepository.Create(rollCallEmployee);
_rollCallEmployeeRepository.SaveChanges();
string employeeFullName = employee.FName + " " + employee.LName;
var res = _faceEmbeddingService.GenerateEmbeddingsAsync(employee.id,command.WorkshopId,employeeFullName, filePath1,filePath2).GetAwaiter().GetResult();
if (!res.IsSuccedded)
{
return op.Failed(res.Message);
}
}
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 rollCallEmployeeStatusResult = _rollCallEmployeeStatusApplication.Create(
new CreateRollCallEmployeeStatus() { RollCallEmployeeId = rollCallEmployee.id });
if (rollCallEmployeeStatusResult.IsSuccedded == false)
{
return rollCallEmployeeStatusResult;
}
}
}
else if (command.CreateCustomizeEmployeeSettings.GroupId > 0 ||
(string.IsNullOrWhiteSpace(command.RollCallUploadEmployeePicture?.Picture1) == false &&
string.IsNullOrWhiteSpace(command.RollCallUploadEmployeePicture?.Picture2) == false))
{
return op.Failed("برای استفاده از حضورغیاب، تب گروهبندی و آپلودعکس را تکمیل کنید");
//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);
//if (rollCallEmployee == null)
//{
// if (_employeeClientTempRepository.Exists(x =>
// x.EmployeeId == employee.id && x.WorkshopId == command.WorkshopId))
// {
// rollCallEmployee = new RollCallEmployee(command.WorkshopId, employee.id, employee.FName,
// employee.LName);
// }
// else
// {
// rollCallEmployee =
// new RollCallEmployee(command.WorkshopId, employee.id, employee.FName, employee.LName);
// }
// _rollCallEmployeeRepository.Create(rollCallEmployee);
// _rollCallEmployeeRepository.SaveChanges();
}
command.EmployeeDocumentItems = command.EmployeeDocumentItems ?? [];
var employeeDocumentResult = _employeeDocumentsApplication.AddRangeEmployeeDocumentItemsByClient(command.WorkshopId,
employee.id, command.EmployeeDocumentItems);
if (employeeDocumentResult.IsSuccedded == false)
{
return employeeDocumentResult;
}
var employeeTemp = new EmployeeClientTemp(command.WorkshopId, startLeftWork, employee.id,
command.MaritalStatus, employee.FullName);
_employeeClientTempRepository.Create(employeeTemp);
_employeeClientTempRepository.SaveChanges();
if (command.HasBankInformation)
{
var employeeBankInfos = command.EmployeeBankInfos.Select(x => new CreateEmployeeInformation
{
WorkshopId = command.WorkshopId,
BankAccountNumber = x.BankAccountNumber,
BankId = x.BankId,
CardNumber = x.CardNumber,
EmployeeId = employee.id,
EmployeeName = employee.FullName,
ShebaNumber = x.ShebaNumber
}).ToList();
var employeeBankInformationResult =
_employeeBankInformationApplication.GroupCreate(command.WorkshopId, employeeBankInfos);
if (employeeBankInformationResult.IsSuccedded == false)
{
return employeeBankInformationResult;
}
}
transaction.Complete();
return op.Succcedded(employee.id);
}
private void CreateImageFromBase64(string picture, string filePath)
{
var subBase64 = picture.Substring(picture.LastIndexOf(',') + 1);
byte[] bytes = Convert.FromBase64String(subBase64);
System.IO.File.WriteAllBytes(filePath, bytes);
}
public async Task<OperationResult<EmployeeByNationalCodeInWorkshopViewModel>>
ValidateCreateEmployeeClientByNationalCodeAndWorkshopId(string nationalCode, string birthDate, long workshopId)
{
var op = new OperationResult<EmployeeByNationalCodeInWorkshopViewModel>();
if (nationalCode.NationalCodeValid() != "valid")
{
return op.Failed("کد ملی معتبر نمیباشد");
}
if (birthDate.TryToGeorgianDateTime(out _) == false)
{
return op.Failed("تاریخ تولد معتبر نمیباشد");
}
var employee = _EmployeeRepository.GetByNationalCodeIgnoreQueryFilter(nationalCode);
if (employee == null)
{
var personalInfo = await _uidService.GetPersonalInfo(nationalCode, birthDate);
if (personalInfo.ResponseContext.Status.Code == 14)
{
return op.Failed("سامانه احراز هویت در دسترس نمیباشد لطفا اطلاعات پرسنل را به صورت دستی وارد کنید", new EmployeeByNationalCodeInWorkshopViewModel() { AuthorizedCanceled = true });
}
if (personalInfo.ResponseContext.Status.Code != 0)
{
return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
}
var basicInfo = personalInfo.BasicInformation;
var identityInfo = personalInfo.IdentificationInformation;
DateTime apiBirthDate = identityInfo.BirthDate.ToGeorgianDateTime();
var dateOfIssue = new DateTime(1922, 1, 1);
var gender = basicInfo.GenderEnum switch
{
Gender.Female => "زن",
Gender.Male => "مرد",
_ => throw new AggregateException()
};
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, "ایرانی", identityInfo.ShenasnameSerial, identityInfo.ShenasnameSeri);
newEmployee.Authorized();
await _EmployeeRepository.CreateAsync(newEmployee);
await _EmployeeRepository.SaveChangesAsync();
return op.Succcedded(new EmployeeByNationalCodeInWorkshopViewModel()
{
EmployeeId = newEmployee.id,
EmployeeFName = newEmployee.FName,
Gender = newEmployee.Gender,
Nationality = newEmployee.Nationality,
EmployeeLName = newEmployee.LName
});
}
if (_leftWorkTempRepository.ExistsIgnoreQueryFilter(x =>
x.EmployeeId == employee.id && x.WorkshopId == workshopId && x.LeftWorkType == LeftWorkTempType.StartWork))
{
return op.Failed("این پرسنل در کارگاه شما قبلا افزوده شده است و در انتظار تایید میباشد");
}
if (employee.IsAuthorized == false)
{
var personalInfoResponse = await _uidService.GetPersonalInfo(nationalCode, birthDate);
if (personalInfoResponse.ResponseContext.Status.Code == 0)
{
var basicInfo = personalInfoResponse.BasicInformation;
var identityInfo = personalInfoResponse.IdentificationInformation;
var apiBirthDate = identityInfo.BirthDate.ToGeorgianDateTime();
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, apiBirthDate,
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();
}
else
{
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)
{
return op.Succcedded(new EmployeeByNationalCodeInWorkshopViewModel()
{
EmployeeId = employee.id,
EmployeeFName = employee.FName,
Gender = employee.Gender,
Nationality = employee.Nationality,
EmployeeLName = employee.LName
}); ;
}
if (leftWorkViewModel.LeftWorkDate >= DateTime.Now || !leftWorkViewModel.HasLeft)
return op.Failed("این پرسنل در کارگاه شما در حال کار است");
var rollCallEmployee = _rollCallEmployeeRepository.GetBy(employee.id, workshopId);
string picture1 = string.Empty;
string picture2 = string.Empty;
if (rollCallEmployee != null)
{
var directoryPath = $"{_webHostEnvironment.ContentRootPath}\\Faces\\{workshopId}\\{employee.id}";
if (Directory.Exists(directoryPath))
{
var filePath1 = Path.Combine(directoryPath, @"1.jpg");
var filePath2 = Path.Combine(directoryPath, @"2.jpg");
if (System.IO.File.Exists(filePath1))
{
byte[] imageBytes1 = await System.IO.File.ReadAllBytesAsync(filePath1);
picture1 = Convert.ToBase64String(imageBytes1);
}
if (System.IO.File.Exists(filePath2))
{
byte[] imageBytes2 = await System.IO.File.ReadAllBytesAsync(filePath2);
picture2 = Convert.ToBase64String(imageBytes2);
}
}
}
var personnelCode = _personnelCodeRepository.GetPSCodeByWorkshopIdAndEmployeeId(workshopId, employee.id);
var bankInformationViewModel = _employeeBankInformationApplication.GetByEmployeeId(workshopId, employee.id);
var employeeDocumentsViewModel = _employeeDocumentsApplication.GetDetailsForClient(employee.id, workshopId);
return op.Succcedded(new EmployeeByNationalCodeInWorkshopViewModel
{
EmployeeId = employee.id,
EmployeeFName = employee.FName,
EmployeeLName = employee.LName,
Nationality = employee.Nationality,
MaritalStatus = employee.MaritalStatus,
Gender = employee.Gender,
Picture1 = picture1,
Picture2 = picture2,
PersonnelCode = personnelCode,
EmployeeBankInfos = bankInformationViewModel.BankInformation.Select(x => new EmployeeByNationalCodeEmployeeBankInfoViewModel
{
ShebaNumber = x.ShebaNumber,
IsDefault = x.IsDefault,
CardNumber = x.CardNumber,
BankAccountNumber = x.BankAccountNumber,
BankId = x.BankId,
BankLogoMediaId = x.BankLogoMediaId,
BankLogoPath = x.BankLogoPath,
BankName = x.BankName
}).ToList(),
EmployeeDocument = new EmployeeByNationalCodeEmployeeDocumentViewModel
{
EducationalDegree = employeeDocumentsViewModel.EducationalDegree,
EmployeePicture = employeeDocumentsViewModel.EmployeePicture,
IdCardPage1 = employeeDocumentsViewModel.IdCardPage1,
IdCardPage2 = employeeDocumentsViewModel.IdCardPage2,
IdCardPage3 = employeeDocumentsViewModel.IdCardPage3,
IdCardPage4 = employeeDocumentsViewModel.IdCardPage4,
MilitaryServiceCard = employeeDocumentsViewModel.MilitaryServiceCard,
NationalCardFront = employeeDocumentsViewModel.NationalCardFront,
NationalCardRear = employeeDocumentsViewModel.NationalCardRear
}
});
}
public async Task<ICollection<ClientStartedWorkEmployeesDto>> GetClientEmployeesStartWork(long workshopId)
{
return await _EmployeeRepository.GetClientEmployeesStartWork(workshopId);
}
public async Task<ICollection<ClientLeftWorkWorkEmployeesDto>> GetEmployeesForLeftWorkTemp(long workshopId)
{
return await _EmployeeRepository.GetEmployeesForLeftWorkTemp(workshopId);
}
public async Task<GetEditEmployeeInEmployeeDocumentViewModel> GetEmployeeEditInEmployeeDocumentWorkFlow(
long employeeId,
long workshopId)
{
return await _EmployeeRepository.GetEmployeeEditInEmployeeDocumentWorkFlow(employeeId, workshopId);
}
public async Task<OperationResult> EditEmployeeInEmployeeDocumentWorkFlow(EditEmployeeInEmployeeDocument command)
{
var op = new OperationResult();
if (command.MaritalStatus is not ("مجرد" or "متاهل"))
{
return op.Failed("وضعیت تاهل وارد شده نامعتبر میباشد");
}
var employee = _EmployeeRepository.Get(command.EmployeeId);
if (employee == null)
{
return op.Failed("پرسنل مورد نظر یافت نشد");
}
if (!employee.IsAuthorized)
{
if (command.Gender is not ("مرد" or "زن"))
{
return op.Failed("جنسیت وارد شده نامعتبر است");
}
if (command.BirthDate.TryToGeorgianDateTime(out var birthDateGr) == false)
{
return op.Failed("تاریخ تولد وارد شده نامعتبر است");
}
if (command.Nationality is not ("غیر ایرانی" or "ایرانی"))
{
return op.Failed("ملیت وارد شده نامعتبر است");
}
if (string.IsNullOrWhiteSpace(command.FName))
{
return op.Failed("لطفا نام پرسنل را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.LName))
{
return op.Failed("لطفا نام خانوادگی پرسنل را وارد کنید");
}
if (command.NationalCode.NationalCodeValid() != "valid")
{
return op.Failed("کد ملی وارد شده نامعتبر است");
}
if (string.IsNullOrWhiteSpace(command.IdNumber))
{
return op.Failed("لطفا شماره شناسنامه را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.FatherName))
{
return op.Failed("لطفا نام پدر را وارد کنید");
}
}
var employeeClientTemp = _employeeClientTempRepository.GetByEmployeeIdAndWorkshopId(command.EmployeeId, command.WorkshopId);
employeeClientTemp?.Edit(command.MaritalStatus);
if (!employee.IsAuthorized)
{
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,
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();
}
public async Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId)
{
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 == null)
{
return op.Failed("این پرسنل در بانک اطلاعات موجود میباشد");
}
if (apiResult.ResponseContext.Status.Code is 14 or 3)
{
return op.Failed("این پرسنل در بانک اطلاعات موجود میباشد");
}
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 == null)
{
return op.Failed("سامانه احراز هویت در دسترس نمیباشد لطفا اطلاعات پرسنل را به صورت دستی وارد کنید", new EmployeeDataFromApiViewModel() { AuthorizedCanceled = true });
}
if (apiResult.ResponseContext.Status.Code is 14 or 3)
{
return op.Failed("سامانه احراز هویت در دسترس نمیباشد لطفا اطلاعات پرسنل را به صورت دستی وارد کنید", new EmployeeDataFromApiViewModel() { AuthorizedCanceled = true });
}
if (apiResult.ResponseContext.Status.Code == 3)
{
return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
}
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
#region Api
public async Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id)
{
return await _EmployeeRepository.GetSelectList(searchText,id );
}
public async Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel)
{
return await _EmployeeRepository.GetList(searchModel);
}
#endregion
}