948 lines
40 KiB
C#
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
|
|
} |