Files
Backend-Api/CompanyManagment.EFCore/Repository/EmployeeRepository .cs
2025-04-16 20:04:57 +03:30

948 lines
40 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.ClientEmployeeWorkshopAgg;
using Company.Domain.EmployeeAccountAgg;
using Company.Domain.EmployeeAgg;
using CompanyManagment.App.Contracts.Employee;
using Company.Domain.EmployeeInsuranceRecordAgg;
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using CompanyManagment.App.Contracts.Employee.DTO;
using CompanyManagment.App.Contracts.LeftWorkTemp;
namespace CompanyManagment.EFCore.Repository;
public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepository
{
private readonly IConfiguration _configuration;
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 DateTime initial = new DateTime(1922, 01, 01, 00, 00, 00, 0000000);
private readonly IAuthHelper _authHelper;
public EmployeeRepository(CompanyContext context, IConfiguration configuration, IAuthHelper authHelper) :base(context)
{
_context = context;
_configuration = configuration;
_authHelper = authHelper;
}
public List<EmployeeViewModel> GetEmployee()
{
return _context.Employees.Where(x=>x.IsActive).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 == initial ? "" : x.DateOfBirth.ToFarsi(),
Address = x.Address,
State = x.State,
City = x.City
}).ToList();
}
public EditEmployee GetDetails(long id)
{
return _context.Employees.Select(x => new EditEmployee
{
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 == initial ? "" : x.DateOfBirth.ToFarsi(),
DateOfIssue = x.DateOfIssue == initial ? "" : 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,
MclsUserName =x.MclsUserName,
MclsPassword = x.MclsPassword,
EserviceUserName = x.EserviceUserName,
EservicePassword = x.EservicePassword,
TaxOfficeUserName = x.TaxOfficeUserName,
TaxOfficepassword = x.TaxOfficepassword,
SanaUserName = x.SanaUserName,
SanaPassword = x.SanaPassword,
})
.FirstOrDefault(x => x.Id == id);
}
public async Task<List<EmployeeViewModel>> Search(EmployeeSearchModel searchModel)
{
List<EmployeeViewModel> query = null;
var connection = _configuration.GetConnectionString("MesbahDb");
using (var conn = new SqlConnection(connection))
{
await conn.OpenAsync();
var command = new SqlCommand("EmployeesMainList", conn);
command.CommandType = CommandType.StoredProcedure;
using (var reader = await command.ExecuteReaderAsync())
{
query = new List<EmployeeViewModel>();
while (await reader.ReadAsync())
{
var item = new EmployeeViewModel();
item.Id = (long)reader["Id"];
item.FName = (string)reader?["FName"];
item.LName = (string)reader["LName"];
item.NationalCode = reader["NationalCode"] != DBNull.Value ? (string)reader["NationalCode"] : null;
item.IdNumber = reader["IdNumber"] != DBNull.Value ? (string)reader["IdNumber"] : null;
item.Gender = reader["Gender"] != DBNull.Value ? (string)reader["Gender"] : null;
var dateOBirth = (DateTime)reader["DateOfBirth"];
item.DateOfBirth = (DateTime)reader["DateOfBirth"] == initial ? "" : dateOBirth.ToFarsi();
item.InsuranceCode = reader["InsuranceCode"] != DBNull.Value ? (string)reader["InsuranceCode"] : null;
item.IsActiveString = (string)reader["IsActiveString"];
item.EmployeeFullName = item.FName.Trim() + " " + item.LName.Trim();
//var children = _context.EmployeeChildrenSet.Count(x => x.EmployeeId == item.Id);
//item.NumberOfChildren = Convert.ToString(children);
query.Add(item);
}
}
}
//var query = result.Select(x => new EmployeeViewModel
// {
// Id = x.Id,
// FName = x.FName,
// LName = x.LName,
// NationalCode = x.NationalCode,
// IdNumber = x.IdNumber,
// EmployeeFullName = x.FName + " " + x.LName,
// IsActiveString = x.IsActiveString,
// });
if (!string.IsNullOrWhiteSpace(searchModel.FName))
query = query.Where(x => x.FName.Contains(searchModel.FName)).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.LName))
query = query.Where(x => x.LName.Contains(searchModel.LName)).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
query = query.Where(x => x.NationalCode.Contains(searchModel.NationalCode)).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.IdNumber))
query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumber)).ToList();
if (searchModel.Id > 0)
query = query.Where(x => x.Id == searchModel.Id).ToList();
if (searchModel.IsActiveString == null)
{
query = query.Where(x => x.IsActiveString == "true").ToList();
}
if (searchModel.IsActiveString == "false")
{
query = query.Where(x => x.IsActiveString == "false").ToList();
}
else if (searchModel.IsActiveString == "both")
{
query = query.Where(x => x.IsActiveString == "false" || x.IsActiveString == "true").ToList();
}
return query.OrderByDescending(x => x.Id).Take(100).ToList();
}
public async Task<List<EmployeeSelectListViewModel>> GetEmployeeToList()
{
var watch = System.Diagnostics.Stopwatch.StartNew();
List<EmployeeSelectListViewModel> result = null;
var connection = _configuration.GetConnectionString("MesbahDb");
using (var conn = new SqlConnection(connection))
{
await conn.OpenAsync();
var command = new SqlCommand("EmployeeFullNameId", conn);
command.CommandType = CommandType.StoredProcedure;
using (var reader = await command.ExecuteReaderAsync())
{
result = new List<EmployeeSelectListViewModel>();
while (await reader.ReadAsync())
{
var item = new EmployeeSelectListViewModel();
item.Id = (long)reader["Id"];
var fname = (string)reader["FName"];
var lname = (string)reader["LName"];
item.EmployeeFullName = fname.Trim() + " " + lname.Trim();
result.Add(item);
}
}
}
Console.WriteLine(watch.Elapsed);
return result;
}
public List<EmployeeInsuranceRecordViewModel> SearchInsuranceRecord(EmployeeInsuranceRecordSearchModel searchModel)
{
var query = _context.EmployeeInsuranceRecords
.Include(c => c.Employee)
.Include(c => c.Workshop).Select(x => new EmployeeInsuranceRecordViewModel
{
Id = x.id,
EmployeeId = x.EmployeeId,
WorkShopId = x.WorkShopId,
DateOfStart = x.DateOfStart == initial ? "" : x.DateOfStart.ToFarsi(),
DateOfEnd = x.DateOfEnd == initial ? "" : x.DateOfEnd.ToFarsi(),
TotalDays = Tools.BetweenDateGeorgianToDay(x.DateOfStart, x.DateOfEnd),
Employee = new EmployeeViewModel
{
Id = x.Workshop.id,
FName = x.Employee.FName,
LName = x.Employee.LName
},
Workshop = new App.Contracts.Workshop.WorkshopViewModel
{
Id = x.Workshop.id,
WorkshopFullName = x.Workshop.WorkshopFullName,
IsActiveString = x.Workshop.IsActiveString
}
});
if (searchModel.EmployeeId != 0)
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
return query.OrderByDescending(x => x.Id).ToList();
}
public void CreateEmployeeInsuranceRecord(EmployeeInsuranceRecord entity)
{
_context.Add(entity);
}
public EmployeeInsuranceRecord GetEmployeeInsuranceRecord(long id)
{
return _context.Find<EmployeeInsuranceRecord>(id);
}
public void RemoveEmployeeInsuranceRecord(long id)
{
var query = _context.EmployeeInsuranceRecords.Where(x => x.id == id).FirstOrDefault();
_context.Set<EmployeeInsuranceRecord>().Remove(query);
_context.SaveChanges();
}
//بیمه
public EditEmployee GetDetailsByADDate(long id)
{
return _context.Employees.Select(x => new EditEmployee
{
Id = x.id,
FName = x.FName,
LName = x.LName,
Gender = x.Gender,
NationalCode = x.NationalCode,
IdNumber = x.IdNumber,
Nationality = x.Nationality,
FatherName = x.FatherName,
DateOfBirthGr = x.DateOfBirth ,
DateOfIssueGr = x.DateOfIssue ,
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,
MclsUserName = x.MclsUserName,
MclsPassword = x.MclsPassword,
EserviceUserName = x.EserviceUserName,
EservicePassword = x.EservicePassword,
TaxOfficeUserName = x.TaxOfficeUserName,
TaxOfficepassword = x.TaxOfficepassword,
SanaUserName = x.SanaUserName,
SanaPassword = x.SanaPassword,
})
.FirstOrDefault(x => x.Id == id);
}
public List<EmployeeViewModel> GetEmployeeByTextSearch(string textSearch)
{
var empList = _context.Employees.FromSqlInterpolated($"SelectQuery_EmployeeTextSearch {textSearch}").AsNoTracking().ToList();
return empList.Select(x => new EmployeeViewModel()
{
Id = x.id,
EmployeeFullName = x.FName + " " + x.LName,
IsActive = x.IsActive
}).Where(x=>x.IsActive).ToList();
}
#region Client
public List<EmployeeViewModel> SearchForClient(EmployeeSearchModel searchModel)
{
//var employeeIds = _context.ClientEmployeeWorkshops.Where(x => x.WorkshopId == searchModel.WorkshopId).Select(x => x.EmployeeId).ToList();
//List<EmployeeViewModel> query = null;
//query = _context.Employees.Where(x => x.IsActive).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 == initial ? "" : x.DateOfBirth.ToFarsi(),
// Address = x.Address,
// State = x.State,
// City = x.City,
// Gender = x.Gender,
// InsuranceCode = x.InsuranceCode,
// IsActiveString = x.IsActiveString,
//}).Take(200).ToList();
List<EmployeeViewModel> query = null;
query = _context.ClientEmployeeWorkshops.Where(x => x.WorkshopId == searchModel.WorkshopId).Include(x => x.Employee).ToList().Select(x => new EmployeeViewModel
{
Id = x.Employee.id,
FName = x.Employee.FName,
LName = x.Employee.LName,
EmployeeFullName = x.Employee.FName + " " + x.Employee.LName,
FatherName = x.Employee.FatherName,
NationalCode = x.Employee.NationalCode,
IdNumber = x.Employee.IdNumber,
DateOfBirth = x.Employee.DateOfBirth == initial ? "" : x.Employee.DateOfBirth.ToFarsi(),
Address = x.Employee.Address,
State = x.Employee.State,
City = x.Employee.City,
Gender = x.Employee.Gender,
InsuranceCode = x.Employee.InsuranceCode,
IsActiveString = x.Employee.IsActiveString,
IsActive = x.Employee.IsActive,
}).Where(x => x.IsActive).ToList();
//if (!string.IsNullOrWhiteSpace(searchModel.FName))
// query = query.Where(x => x.FName.Contains(searchModel.FName)).ToList();
//if (!string.IsNullOrWhiteSpace(searchModel.LName))
// query = query.Where(x => x.LName.Contains(searchModel.LName)).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.EmployeeFullName))
query = query.Where(x => x.EmployeeFullName.Contains(searchModel.EmployeeFullName)).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
query = query.Where(x => x.NationalCode.Contains(searchModel.NationalCode)).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.InsuranceCode))
query = query.Where(x => x.InsuranceCode != null && x.InsuranceCode.Contains(searchModel.InsuranceCode)).ToList();
if (searchModel.Id > 0)
query = query.Where(x => x.Id == searchModel.Id).ToList();
if (searchModel.IsActiveString == null)
{
query = query.Where(x => x.IsActiveString == "true").ToList();
}
if (searchModel.IsActiveString == "false")
{
query = query.Where(x => x.IsActiveString == "false").ToList();
}
else if (searchModel.IsActiveString == "both")
{
query = query.Where(x => x.IsActiveString == "false" || x.IsActiveString == "true").ToList();
}
return query.OrderByDescending(x => x.Id).ToList();
}
public void Remove(long id)
{
var employee = _context.Employees.Where(x => x.id == id)?.FirstOrDefault();
_context.Employees.Remove(employee);
}
public List<EmployeeViewModel> GetEmployeeByTextSearchForClient(string textSearch, long workshopId)
{
//var acountID = _authHelper.CurrentAccountId();
var empList = _context.Employees.FromSqlInterpolated($"SelectQuery_EmployeeTextSearchForClient {textSearch},{workshopId}").AsNoTracking().ToList();
return empList.Select(x => new EmployeeViewModel()
{
Id = x.id,
SearchResultTitle = x.FName + " " + x.LName,
}).ToList();
}
public List<EmployeeViewModel> GetEmployeeByTextSearchNationalCodeForClient(string textSearch, long workshopId)
{
//var acountID = _authHelper.CurrentAccountId();
var empList = _context.Employees.FromSqlInterpolated($"SelectQuery_EmployeeTextSearchNationalCodeForClient {textSearch},{workshopId}").AsNoTracking().ToList();
return empList.Select(x => new EmployeeViewModel()
{
Id = x.id,
SearchResultTitle = x.NationalCode,
}).ToList();
}
public List<EmployeeViewModel> GetEmployeeByTextSearchInsuranceCodeForClient(string textSearch, long workshopId)
{
//var acountID = _authHelper.CurrentAccountId();
var empList = _context.Employees.FromSqlInterpolated($"SelectQuery_EmployeeTextSearchInsuranceCodeForClient {textSearch},{workshopId}").AsNoTracking().ToList();
return empList.Select(x => new EmployeeViewModel()
{
Id = x.id,
SearchResultTitle = x.InsuranceCode,
}).ToList();
}
public long CreateEmployeeForClient(CreateEmployee command)
{
using (var transaction = _context.Database.BeginTransaction())
{
try
{
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.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);
Create(employeeData);
_context.SaveChanges();
var acountID = _authHelper.CurrentAccountId();
//خودش
var employeeAccount = new EmployeeAccount();
employeeAccount.AccountId = acountID;
employeeAccount.EmployeeId = employeeData.id;
_context.EmployeeAccounts.Add(employeeAccount);
if (acountID != 3)//آقای مصباح
{
employeeAccount = new EmployeeAccount();
employeeAccount.AccountId = 3;
employeeAccount.EmployeeId = employeeData.id;
_context.EmployeeAccounts.Add(employeeAccount);
}
if (acountID != 2) //آقای فرخی
{
employeeAccount = new EmployeeAccount();
employeeAccount.AccountId = 2;
employeeAccount.EmployeeId = employeeData.id;
_context.EmployeeAccounts.Add(employeeAccount);
}
var clientEmployeeWorkshops = new ClientEmployeeWorkshop();
clientEmployeeWorkshops.WorkshopId = command.WorkshopId;
clientEmployeeWorkshops.EmployeeId = employeeData.id;
_context.ClientEmployeeWorkshops.Add(clientEmployeeWorkshops);
_context.SaveChanges();
transaction.Commit();
return employeeData.id;
}
catch (Exception)
{
transaction.Rollback();
return 0;
}
}
}
public bool ExistsEmployeeAccountNationalCode(string nationalCode)
{
var acountID = _authHelper.CurrentAccountId();
var employeeIdstList = _context.EmployeeAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployeeId).ToList();
if (employeeIdstList != null && employeeIdstList.Count > 0)
{
return _context.Employees.Any(x => employeeIdstList.Contains(x.id) && x.NationalCode == nationalCode);
}
else
return false;
}
public bool ExistsEmployeeAccountNationalCodeEmployeeId(string nationalcode, long id)
{
var acountID = _authHelper.CurrentAccountId();
var employerIdstList = _context.EmployeeAccounts.Where(x => x.AccountId == acountID && x.EmployeeId != id).Select(x => x.EmployeeId).ToList();
if (employerIdstList != null && employerIdstList.Count > 0)
{
return _context.Employees.Any(x => employerIdstList.Contains(x.id) && x.NationalCode == nationalcode);
}
else
return false;
}
public bool ExistsEmployeeWorkshopNationalCode(string commandNationalCode, long commandWorkshopId)
{
var employerIdstList = _context.ClientEmployeeWorkshops.Where(x => x.WorkshopId == commandWorkshopId).Select(x => x.EmployeeId).ToList();
if (employerIdstList != null && employerIdstList.Count > 0)
{
return _context.Employees.Any(x => employerIdstList.Contains(x.id) && x.NationalCode == commandNationalCode);
}
else
return false;
}
public bool ExistsEmployeeWorkshopNationalCodeEmployeeId(string nationalCode, long workshopId, long id)
{
var employerIdstList = _context.ClientEmployeeWorkshops.Where(x => x.WorkshopId == workshopId && x.EmployeeId != id).Select(x => x.EmployeeId).ToList();
if (employerIdstList != null && employerIdstList.Count > 0)
{
return _context.Employees.Any(x => employerIdstList.Contains(x.id) && x.NationalCode == nationalCode);
}
else
return false;
}
public bool ExistsEmployeeWorkshoppInsuranceCode(string insuranceCode, long workshopId)
{
var employerIdstList = _context.ClientEmployeeWorkshops.Where(x => x.WorkshopId == workshopId).Select(x => x.EmployeeId).ToList();
if (employerIdstList != null && employerIdstList.Count > 0)
{
return _context.Employees.Any(x => employerIdstList.Contains(x.id) && x.InsuranceCode == insuranceCode);
}
else
return false;
}
public bool ExistsEmployeeWorkshopInsuranceCodeEmployeeId(string commandInsuranceCode, long commandWorkshopId, long commandId)
{
var employerIdstList = _context.ClientEmployeeWorkshops.Where(x => x.WorkshopId == commandWorkshopId && x.EmployeeId != commandId).Select(x => x.EmployeeId).ToList();
if (employerIdstList != null && employerIdstList.Count > 0)
{
return _context.Employees.Any(x => employerIdstList.Contains(x.id) && x.InsuranceCode == commandInsuranceCode);
}
else
return false;
}
#endregion
#region NewByHeydari
public List<EmployeeViewModel> SearchForMain(EmployeeSearchModel searchModel)
{
bool hasSearch = false;
var currentDate = DateTime.Now.AddDays(1).Date;
//var query = _context.Employees.Include(x=>x.LeftWorks).Include(x=>x.LeftWorkInsurances).Select(x => new EmployeeViewModel
//{
// Id = x.id,
// FName = x.FName,
// LName = x.LName,
// NationalCode = x.NationalCode,
// IdNumber = x.IdNumber,
// Gender = x.Gender,
// DateOfBirth = (DateTime)x.DateOfBirth == initial ? "" : x.DateOfBirth.ToFarsi(),
// InsuranceCode = x.InsuranceCode,
// IsActiveString = x.IsActiveString,
// EmployeeFullName = x.FName.Trim() + " " + x.LName.Trim(),
// LeftWorkList = x.LeftWorks.Select(y=>new LeftWorkViewModel(){WorkshopId = y.WorkshopId,WorkshopName =y.WorkshopName,LeftWorkDateGr = y.LeftWorkDate}).Where(y=>y.LeftWorkDateGr.Date< currentDate).ToList(),
// LeftWorkInsuranceList = x.LeftWorkInsurances.Select(y=>new LeftWorkInsuranceViewModel(){WorkshopId = y.WorkshopId,WorkshopName =y.WorkshopName,LeftWorkDateGr = y.LeftWorkDate}).Where(y => y.LeftWorkDateGr!=null && ((DateTime)y.LeftWorkDateGr).Date < currentDate).ToList(),
//}).ToList();
var query = _context.Employees.Select(x => new EmployeeViewModel
{
Id = x.id,
FName = x.FName,
LName = x.LName,
NationalCode = x.NationalCode,
IdNumber = x.IdNumber,
Gender = x.Gender,
DateOfBirth = (DateTime)x.DateOfBirth == initial ? "" : x.DateOfBirth.ToFarsi(),
InsuranceCode = x.InsuranceCode,
IsActiveString = x.IsActiveString,
IsActive = x.IsActive,
EmployeeFullName = x.FName.Trim() + " " + x.LName.Trim(),
}).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
{
hasSearch = true;
query = query.Where(x => !string.IsNullOrEmpty(x.NationalCode) && x.NationalCode.Contains(searchModel.NationalCode)).ToList();
}
if (searchModel.Id > 0)
{
hasSearch = true;
var serchedById = query.FirstOrDefault(x => x.Id == searchModel.Id);
query = query.Where(x => x.EmployeeFullName.Contains(serchedById.EmployeeFullName)).ToList();
}
else if (!string.IsNullOrEmpty(searchModel.EmployeeName))
{
hasSearch = true;
query = query.Where(x =>
(!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchModel.EmployeeName)) ||
(!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchModel.EmployeeName)) || (x.FName + " " + x.LName).Contains(searchModel.EmployeeName))
.OrderByDescending(x => x.Id).ToList();
}
#region workshop
if (searchModel.WorkshopId > 0 || !string.IsNullOrEmpty(searchModel.WorkshopName))
{
hasSearch = true;
List<long> employeeIds = new List<long>();
if (searchModel.WorkshopId > 0)
{
employeeIds = _context.LeftWorkList.Where(x => x.WorkshopId == searchModel.WorkshopId).Select(x => x.EmployeeId).ToList();
employeeIds.AddRange(_context.LeftWorkInsuranceList.Where(x => x.WorkshopId == searchModel.WorkshopId).Select(x => x.EmployeeId).ToList());
}
else if (!string.IsNullOrEmpty(searchModel.WorkshopName))
{
employeeIds = _context.LeftWorkList.Where(x => x.WorkshopName.Contains(searchModel.WorkshopName)).Select(x => x.EmployeeId).ToList();
employeeIds.AddRange(_context.LeftWorkInsuranceList.Where(x => x.WorkshopName.Contains(searchModel.WorkshopName)).Select(x => x.EmployeeId).ToList());
}
query = query.Where(x => employeeIds.Contains(x.Id)).ToList();
}
#endregion
#region employer
if (searchModel.EmployerId > 0 || !string.IsNullOrEmpty(searchModel.EmployerLName))
{
hasSearch = true;
List<long> employeeIds = new List<long>();
List<long> workshopIds = new List<long>();
if (searchModel.EmployerId > 0)
{
workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == searchModel.EmployerId).Select(x => x.WorkshopId).ToList();
}
else if (!string.IsNullOrEmpty(searchModel.EmployerLName))
{
var employerIds = _context.Employers.Where(x =>
(!string.IsNullOrEmpty(x.FName) && x.FName.Contains(searchModel.EmployerLName)) ||
(!string.IsNullOrEmpty(x.LName) && x.LName.Contains(searchModel.EmployerLName))).Select(x => x.id);
workshopIds = _context.WorkshopEmployers.Where(x => employerIds.Contains(x.EmployerId)).Select(x => x.WorkshopId).ToList();
}
employeeIds = _context.LeftWorkList.Where(x => workshopIds.Contains(x.WorkshopId)).Select(x => x.EmployeeId).ToList();
employeeIds.AddRange(_context.LeftWorkInsuranceList.Where(x => workshopIds.Contains(x.WorkshopId)).Select(x => x.EmployeeId).ToList());
query = query.Where(x => employeeIds.Contains(x.Id)).ToList();
}
#endregion
if (!string.IsNullOrEmpty(searchModel.InsuranceCode))
{
hasSearch = true;
query = query.Where(x => !string.IsNullOrEmpty(x.InsuranceCode) && x.InsuranceCode.Contains(searchModel.InsuranceCode)).ToList();
}
if (!string.IsNullOrEmpty(searchModel.State))
{
hasSearch = true;
query = query.Where(x => x.State == searchModel.State).ToList();
}
if (!string.IsNullOrEmpty(searchModel.City))
{
hasSearch = true;
query = query.Where(x => x.City == searchModel.City).ToList();
}
switch (searchModel.IsActiveString)
{
case null:
case "":
query = query.Where(x => x.IsActive == true).ToList();
break;
case "false":
query = query.Where(x => x.IsActive == false).ToList();
hasSearch = true;
break;
case "both":
query = query.Where(x => x.IsActive == true || x.IsActive == false).ToList();
hasSearch = true;
break;
}
if (hasSearch)
{
return query.OrderByDescending(x => x.Id).ToList();
}
else
{
return query.OrderByDescending(x => x.Id).Take(100).ToList();
}
}
public Employee GetByNationalCode(string nationalCode)
{
return _context.Employees.FirstOrDefault(x => x.NationalCode == nationalCode);
}
#endregion
#region Mahan
public List<EmployeeViewModel> GetBy(List<long> employeeIds)
{
return _context.Employees.Where(x => employeeIds.Contains(x.id)).Select(x => new EmployeeViewModel()
{
Id = x.id,
EmployeeFullName = x.FullName
}).ToList();
}
public Employee GetByNationalCodeIgnoreQueryFilter(string nationalCode)
{
return _context.Employees.IgnoreQueryFilters().FirstOrDefault(x => x.NationalCode == nationalCode);
}
public async Task<ICollection<ClientStartedWorkEmployeesDto>> GetClientEmployeesStartWork(long workshopId)
{
var res = await _context.Employees
.GroupJoin(_context.LeftWorkTemps.Where(x => x.WorkshopId == workshopId && x.LeftWorkType == LeftWorkTempType.StartWork),
employees => employees.id,
leftWorkTemp => leftWorkTemp.EmployeeId,
(employee, leftWorkTemps) => new { employee, leftWorkTemps })
.GroupJoin(_context.EmployeeDocuments.Where(x => x.WorkshopId == workshopId),
(query) => query.employee.id,
(employeeDoc) => employeeDoc.EmployeeId,
(query, employeeDoc) => new
{ query, employeeDoc }).SelectMany(x => x.employeeDoc.DefaultIfEmpty(),
(q, doc) => new
{
q.query,
EmployeeDoc = doc
}).Where(x => x.query.leftWorkTemps.Any(l => l.WorkshopId == workshopId && l.LeftWorkType == LeftWorkTempType.StartWork)).Select(
x => new ClientStartedWorkEmployeesDto()
{
WorkshopId = workshopId,
EmployeeId = x.query.employee.id,
EmployeeName = x.query.employee.FName + " " + x.query.employee.LName,
// ReSharper disable once SimplifyConditionalTernaryExpression
HasCompleteEmployeeDocument = x.EmployeeDoc == null ? false : x.EmployeeDoc.IsConfirmed
}).ToListAsync();
return res;
}
public async Task<ICollection<ClientLeftWorkWorkEmployeesDto>> GetEmployeesForLeftWorkTemp(long workshopId)
{
var res = await _context.Employees
.Join(_context.LeftWorkTemps.Where(x => x.WorkshopId == workshopId && x.LeftWorkType == LeftWorkTempType.LeftWork),
employees => employees.id,
leftWorkTemp => leftWorkTemp.EmployeeId,
(employee, leftWorkTemps) => new { employee, leftWorkTemps })
.Select(
x => new ClientLeftWorkWorkEmployeesDto()
{
WorkshopId = workshopId,
EmployeeId = x.employee.id,
EmployeeName = x.employee.FName + " " + x.employee.LName,
LeftWorkDateTime = x.leftWorkTemps.LeftWork.ToFarsi()
}).ToListAsync();
return res;
}
public Employee GetIgnoreQueryFilter(long id)
{
return _context.Employees.IgnoreQueryFilters().FirstOrDefault(x => x.id == id);
}
public async Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId)
{
var workshopActiveLeftWorksQuery = _context.LeftWorkList.Where(x => x.WorkshopId == workshopId);
var workshopActiveInsuranceLeftWorksQuery = _context.LeftWorkInsuranceList.Where(x => x.WorkshopId == workshopId);
var employeesQuery = _context.Employees.Where(x =>
workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) ||
workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id)).Select(x => new
{
leftWork = workshopActiveLeftWorksQuery.Where(l => l.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(),
insuranceLeftWork = workshopActiveInsuranceLeftWorksQuery.Where(i => i.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(),
Employee = x
});
return (await employeesQuery.ToListAsync()).Select(x =>
{
var leftWork = x.leftWork;
var insuranceLeftWork = x.insuranceLeftWork;
return new EmployeeSelectListViewModel()
{
Id = x.Employee.id,
EmployeeFullName = x.Employee.FullName,
Black = ((leftWork != null && leftWork.LeftWorkDate < DateTime.Now &&
insuranceLeftWork != null && insuranceLeftWork.LeftWorkDate != null) ||
(leftWork != null && insuranceLeftWork == null &&
leftWork.LeftWorkDate < DateTime.Now) ||
(insuranceLeftWork != null && insuranceLeftWork.LeftWorkDate != null && x.leftWork == null &&
insuranceLeftWork.LeftWorkDate != null))
? true
: false,
};
}).OrderBy(x => x.Black).ToList();
}
#endregion
#region Pooya
public List<Employee> GetRangeByIds(IEnumerable<long> newEmployeeIds)
{
return _context.Employees.Where(x => newEmployeeIds.Contains(x.id)).ToList();
}
public List<EmployeeViewModel> GetWorkingEmployeesByWorkshopId(long workshopId)
{
var dateNow = DateTime.Now.Date;
var workshopActiveLeftWorksQuery = _context.LeftWorkList.Where(x => x.WorkshopId == workshopId &&
x.StartWorkDate <= dateNow && x.LeftWorkDate > dateNow);
var workshopActiveInsuranceLeftWorksQuery = _context.LeftWorkInsuranceList.Where(x => x.WorkshopId == workshopId &&
x.StartWorkDate <= dateNow && (x.LeftWorkDate > dateNow || x.LeftWorkDate == null));
var employeesQuery = _context.Employees.Where(x => workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) ||
workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id));
return employeesQuery.Select(x => new EmployeeViewModel()
{
Id = x.id,
EmployeeFullName = x.FullName
}).ToList();
}
public async Task<GetEditEmployeeInEmployeeDocumentViewModel> GetEmployeeEditInEmployeeDocumentWorkFlow(long employeeId, long workshopId)
{
var employee = await _context.Employees.Where(x => x.id == employeeId).Select(x => new GetEditEmployeeInEmployeeDocumentViewModel()
{
EmployeeId = x.id,
LName = x.LName,
BirthDate = x.DateOfBirth.ToFarsi(),
FName = x.FName,
FatherName = x.FatherName,
MaritalStatus = x.MaritalStatus,
MilitaryService = x.MilitaryService,
NationalCode = x.NationalCode,
IdNumber = x.IdNumber,
Nationality = x.Nationality,
Gender = x.Gender,
IsAuthorized = x.IsAuthorized
}).FirstOrDefaultAsync();
var employeeClientTemp =
await _context.EmployeeClientTemps.FirstOrDefaultAsync(x =>
x.EmployeeId == employeeId && x.WorkshopId == workshopId);
if (employeeClientTemp != null)
{
employee.MaritalStatus = employeeClientTemp.MaritalStatus;
}
return employee;
}
public List<(long Id, string Name)> SimpleGetRangeByIds(IEnumerable<long> newEmployeeIds)
{
return _context.Employees.Where(x => newEmployeeIds.Contains(x.id)).Select(x => new
{
Id = x.id,
x.FName,
x.LName
}).AsEnumerable().Select(x => (x.Id, x.FName + " " + x.LName)).ToList();
}
public List<EmployeeViewModel> GetWorkingEmployeesByWorkshopIdsAndNationalCodeAndDate(List<long> workshopIds, string nationalCode, DateTime date)
{
return _context.Employees.Where(x => x.NationalCode.Contains(nationalCode)).Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances)
.Where(x => (x.LeftWorks.Any(y => workshopIds.Contains(y.WorkshopId) && y.StartWorkDate <= date && y.LeftWorkDate >= date)) ||
(x.LeftWorkInsurances.Any(y => workshopIds.Contains(y.WorkshopId) && y.StartWorkDate <= date && y.LeftWorkDate == null)))
.Select(x => new EmployeeViewModel()
{
NationalCode = x.NationalCode,
FName = x.FName,
LName = x.LName,
Phone = x.Phone
}).ToList();
}
public List<EmployeeViewModel> GetWorkedEmployeesByWorkshopIdsAndNationalCodeAndDate(List<long> workshopIds, string nationalCode, DateTime date)
{
return _context.Employees.Where(x => x.NationalCode.Contains(nationalCode)).Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances)
.Where(x => x.LeftWorks.Any(y => workshopIds.Contains(y.WorkshopId)) || x.LeftWorkInsurances.Any(y => workshopIds.Contains(y.WorkshopId)))
.Select(x => new EmployeeViewModel()
{
NationalCode = x.NationalCode,
FName = x.FName,
LName = x.LName,
Phone = x.Phone
}).ToList();
}
#endregion
}