using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.Application.Enums; using _0_Framework.InfraStructure; using Company.Domain.EmployerAccountAgg; using Company.Domain.empolyerAgg; using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Employer; using Microsoft.EntityFrameworkCore; namespace CompanyManagment.EFCore.Repository; public class EmployerRepository : RepositoryBase, IEmployerRepository { private readonly CompanyContext _context; private readonly IAuthHelper _authHelper; public DateTime initial = new DateTime(1922, 01, 01, 00, 00, 00, 0000000); public EmployerRepository(CompanyContext context, IAuthHelper authHelper) : base(context) { _context = context; _authHelper = authHelper; } public List GetEmployers() { return _context.Employers.Where(x => x.IsActive == true).Select(x => new EmployerViewModel { Id = x.id, FName = x.FName, LName = x.LName, FullName = x.FullName, Nationalcode = x.Nationalcode, IdNumber = x.IdNumber, RegisterId = x.RegisterId, NationalId = x.NationalId, IsLegal = x.IsLegal, Phone = x.Phone, AgentPhone = x.AgentPhone, Address = x.Address }).ToList(); } public List GetEmployers(List id) { return _context.Employers.Select(x => new EmployerViewModel() { Id = x.id, IsActive = x.IsActive, FName = x.FName, LName = x.LName, FullName = x.FullName, Nationalcode = x.Nationalcode, IdNumber = x.IdNumber, RegisterId = x.RegisterId, NationalId = x.NationalId, IsLegal = x.IsLegal, Phone = x.Phone, AgentPhone = x.AgentPhone, Address = x.Address }).Where(x => id.Contains(x.Id)) .Where(x => x.IsActive).ToList(); //var empList = new List(); //foreach (var item in id) //{ // var e = _context.Employers.Where(x=>x.IsActive).Select(x => new EmployerViewModel // { // Id = x.id, // FName = x.FName, // LName = x.LName, // FullName = x.FullName, // Nationalcode = x.Nationalcode, // IdNumber = x.IdNumber, // RegisterId = x.RegisterId, // NationalId = x.NationalId, // IsLegal = x.IsLegal, // Phone = x.Phone, // AgentPhone = x.AgentPhone, // Address = x.Address // }) // .FirstOrDefault(x=>x.Id == item); // empList.Add(e); //} //return empList; } public EditEmployer GetDetails(long id) { return _context.Employers.Select(x => new EditEmployer { Id = x.id, FName = x.FName, LName = x.LName, ContractingPartyId = x.ContractingPartyId, 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, RegisterId = x.RegisterId, NationalId = x.NationalId, EmployerLName = x.EmployerLName, IsLegal = x.IsLegal, Phone = x.Phone, AgentPhone = x.AgentPhone, Address = x.Address, MclsUserName = x.MclsUserName, MclsPassword = x.MclsPassword, EserviceUserName = x.EserviceUserName, EservicePassword = x.EservicePassword, TaxOfficeUserName = x.EservicePassword, SanaUserName = x.SanaUserName, SanaPassword = x.SanaPassword, EmployerNo = x.EmployerNo, FullName = x.FullName }) .FirstOrDefault(x => x.Id == id); } public List GetEmployerByWorkshopId(long workshopId) { var result = _context.WorkshopEmployers.Where(x => x.WorkshopId == workshopId).Include(x => x.Employer) .Select(x => new EmprViewModel() { EmployerFullName = x.Employer.FName + " " + x.Employer.LName, Id = x.Employer.id, FName = x.Employer.FName, EmployerLName = x.Employer.EmployerLName, IsLegal = x.Employer.IsLegal, LName = x.Employer.LName, IsBlockContractingParty = _context.PersonalContractingParties .Where(p => p.Employers.Any(e => e.id == x.Employer.id)) .Select(p => p.IsBlock) .FirstOrDefault(), }); //var employerlist = _context.Employers.Where(x => emps.Contains(x.id)).ToList(); //var employers = new List(); //foreach (var element in employerlist) //{ // var employer = new EmprViewModel() // { // EmployerFullName = element.FName + " " + element.LName, // Id = element.id, // FName = element.FName, // EmployerLName = element.EmployerLName, // IsLegal = element.IsLegal, // LName = element.LName, // IsBlockContractingParty = _context.PersonalContractingParties.FirstOrDefault(x => x.id == element.ContractingPartyId)?.IsBlock, // }; // employers.Add(employer); //} return result.ToList(); } public List GetEmployerByContracrtingPartyID(long contractingPartyId) { return _context.Employers.Select(x => new EmployerViewModel() { Id = x.id, FName = x.FName, LName = x.LName, ContractingPartyID = x.ContractingPartyId, EmployerNo = x.EmployerNo, Nationalcode = x.Nationalcode, IdNumber = x.IdNumber, Nationality = x.Nationality, RegisterId = x.RegisterId, NationalId = x.NationalId, EmployerLName = x.EmployerLName, IsLegal = x.IsLegal, FullName = x.FName + " " + x.LName, }).Where(x => x.ContractingPartyID == contractingPartyId) .ToList(); } public List Search(EmployerSearchModel searchModel) { var workshopEmp = _context.WorkshopEmployers.Select(x => x.EmployerId); var query = _context.Employers.Include(x => x.ContractingParty) .Select(x => new EmployerViewModel { Id = x.id, FName = x.FName, ContractingPartyID = x.ContractingPartyId, LName = x.LName, Nationalcode = x.Nationalcode, IdNumber = x.IdNumber, EmployerLName = x.EmployerLName, IsLegal = x.IsLegal, RegisterId = x.RegisterId, NationalId = x.NationalId, ContractingParty = x.ContractingParty.LName, IsActive = x.IsActive, Address = x.Address, EmployerNo = x.EmployerNo, HasContractingParty = x.ContractingPartyId == 30428 && workshopEmp.Any(n => n == x.id), HasBlockContractingParty = x.ContractingParty.IsBlock == "true", }); if (searchModel.Id > 0) query = query.Where(x => x.Id == searchModel.Id); if (!string.IsNullOrWhiteSpace(searchModel.LName)) query = query.Where(x => x.LName.Contains(searchModel.FName) || x.FName.Contains(searchModel.LName)); if (!string.IsNullOrWhiteSpace(searchModel.Nationalcode) && searchModel.Nationalcode != "0") query = query.Where(x => x.Nationalcode.Contains(searchModel.Nationalcode) || x.NationalId.Contains(searchModel.Nationalcode)); if (!string.IsNullOrWhiteSpace(searchModel.IdNumber) && searchModel.IdNumber != "0") query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumber) || x.RegisterId.Contains(searchModel.IdNumber)); if (!string.IsNullOrWhiteSpace(searchModel.EmployerLName)) query = query.Where(x => (x.IsLegal == "حقیقی" && ((!string.IsNullOrWhiteSpace(x.FName) && x.FName.StartsWith(searchModel.EmployerLName)) || (!string.IsNullOrWhiteSpace(x.LName) && x.LName.StartsWith(searchModel.EmployerLName)))) || (x.IsLegal == "حقوقی" && (!string.IsNullOrWhiteSpace(x.LName) && x.LName.Contains(searchModel.EmployerLName)))); if (!string.IsNullOrWhiteSpace(searchModel.IsLegal)) query = query.Where(x => x.IsLegal.Contains(searchModel.IsLegal)); if (!string.IsNullOrEmpty(searchModel.ContactingPartyName)) { var personalContractingPIds = _context.PersonalContractingParties.Where(x => !string.IsNullOrEmpty(x.FName) && (x.FName + " " + x.LName).Contains(searchModel.ContactingPartyName)).Select(x => x.id).ToList(); query = query.Where(x => personalContractingPIds.Contains(x.ContractingPartyID)); } if (searchModel.ContractingPartyID != 0) query = query.Where(x => x.ContractingPartyID == searchModel.ContractingPartyID); if (searchModel.Address == null) { query = query.Where(x => x.Address == "true"); } if (searchModel.Address == "false") { query = query.Where(x => x.Address == "false"); } else if (searchModel.Address == "both") { query = query.Where(x => x.Address == "false" || x.Address == "true"); } return query.OrderByDescending(x => x.Id).ToList(); } public List GetEmployerByEmployerIds(List employerIds) { return _context.Employers.Select(x => new EmprViewModel() { Id = x.id, FName = x.FName, LName = x.LName, EmployerLName = x.EmployerLName, IsLegal = x.IsLegal, //FullName = x.FName + " " + x.LName, }).Where(x => employerIds.Contains(x.Id)) .ToList(); } ///client public bool Remove(long id) { using (var transaction = _context.Database.BeginTransaction()) { try { var employerAccountList = _context.EmployerAccounts.Where(x => x.EmployerId == id).ToList(); _context.EmployerAccounts.RemoveRange(employerAccountList); var employer = _context.Employers.Where(x => x.id == id)?.FirstOrDefault(); _context.Employers.Remove(employer); _context.SaveChanges(); transaction.Commit(); return true; } catch (Exception) { transaction.Rollback(); return false; } } } public bool CreateForClient(Employer command) { using (var transaction = _context.Database.BeginTransaction()) { try { Create(command); _context.SaveChanges(); var acountID = _authHelper.CurrentAccountId(); //خودش var employerAccount = new EmployerAccount(); employerAccount.AccountId = acountID; employerAccount.EmployerId = command.id; _context.EmployerAccounts.Add(employerAccount); if (acountID != 3) //آقای مصباح { employerAccount = new EmployerAccount(); employerAccount.AccountId = 3; employerAccount.EmployerId = command.id; _context.EmployerAccounts.Add(employerAccount); } if (acountID != 2) //آقای فرخی { employerAccount = new EmployerAccount(); employerAccount.AccountId = 2; employerAccount.EmployerId = command.id; _context.EmployerAccounts.Add(employerAccount); } _context.SaveChanges(); transaction.Commit(); return true; } catch (Exception) { transaction.Rollback(); return false; } } } public List SearchForClient(EmployerSearchModel searchModel) { var acountID = _authHelper.CurrentAccountId(); var employerIds = _context.EmployerAccounts.Where(x => x.AccountId == acountID).AsNoTracking().Select(x => x.EmployerId).ToList(); var query = _context.Employers.Where(x => employerIds.Contains(x.id)).Include(x => x.ContractingParty) .Select(x => new EmployerViewModel { Id = x.id, FName = x.FName, ContractingPartyID = x.ContractingPartyId, LName = x.LName, Nationalcode = x.Nationalcode, IdNumber = x.IdNumber, EmployerLName = x.EmployerLName, IsLegal = x.IsLegal, RegisterId = x.RegisterId, NationalId = x.NationalId, ContractingParty = x.ContractingParty.LName, IsActive = x.IsActive, Address = x.Address, EmployerNo = x.EmployerNo, }); if (!string.IsNullOrWhiteSpace(searchModel.FName)) query = query.Where(x => x.FName.Contains(searchModel.FName)); if (!string.IsNullOrWhiteSpace(searchModel.LName)) query = query.Where(x => x.LName.Contains(searchModel.LName)); if (!string.IsNullOrWhiteSpace(searchModel.Nationalcode)) query = query.Where(x => x.Nationalcode.Contains(searchModel.Nationalcode)); if (!string.IsNullOrWhiteSpace(searchModel.IdNumber)) query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumber)); if (!string.IsNullOrWhiteSpace(searchModel.RegisterId)) query = query.Where(x => x.RegisterId.Contains(searchModel.RegisterId)); if (!string.IsNullOrWhiteSpace(searchModel.NationalId)) query = query.Where(x => x.NationalId.Contains(searchModel.NationalId)); if (!string.IsNullOrWhiteSpace(searchModel.EmployerLName)) query = query.Where(x => x.EmployerLName.Contains(searchModel.EmployerLName)); if (!string.IsNullOrWhiteSpace(searchModel.IsLegal)) query = query.Where(x => x.IsLegal.Contains(searchModel.IsLegal)); if (searchModel.ContractingPartyID != 0) query = query.Where(x => x.ContractingPartyID == searchModel.ContractingPartyID); if (searchModel.Address == null) { query = query.Where(x => x.Address == "true"); } if (searchModel.Address == "false") { query = query.Where(x => x.Address == "false"); } else if (searchModel.Address == "both") { query = query.Where(x => x.Address == "false" || x.Address == "true"); } return query.OrderByDescending(x => x.Id).ToList(); } public List GetEmployersForClient(long acountID) { // var acountID = _authHelper.CurrentAccountId(); var employerIds = _context.EmployerAccounts.Where(x => x.AccountId == acountID).AsNoTracking().Select(x => x.EmployerId).ToList(); return _context.Employers.Where(x => employerIds.Contains(x.id) && x.IsActive == true).Select(x => new EmployerViewModel { Id = x.id, FName = x.FName, LName = x.LName, FullName = x.FullName, Nationalcode = x.Nationalcode, IdNumber = x.IdNumber, RegisterId = x.RegisterId, NationalId = x.NationalId, IsLegal = x.IsLegal, Phone = x.Phone, AgentPhone = x.AgentPhone, Address = x.Address }).ToList(); } public bool CreateLegalsForClient(Employer legalEmployerData) { using (var transaction = _context.Database.BeginTransaction()) { try { Create(legalEmployerData); _context.SaveChanges(); var acountID = _authHelper.CurrentAccountId(); //خودش var employerAccount = new EmployerAccount(); employerAccount.AccountId = acountID; employerAccount.EmployerId = legalEmployerData.id; _context.EmployerAccounts.Add(employerAccount); _context.SaveChanges(); if (acountID != 3) //آقای مصباح { employerAccount = new EmployerAccount(); employerAccount.AccountId = 3; employerAccount.EmployerId = legalEmployerData.id; _context.EmployerAccounts.Add(employerAccount); _context.SaveChanges(); } if (acountID != 2) //آقای فرخی { employerAccount = new EmployerAccount(); employerAccount.AccountId = 2; employerAccount.EmployerId = legalEmployerData.id; _context.EmployerAccounts.Add(employerAccount); _context.SaveChanges(); } transaction.Commit(); return true; } catch (Exception ex) { transaction.Rollback(); return false; } } } public bool ExistsEmployerAccount(string commandNationalcode) { var acountID = _authHelper.CurrentAccountId(); var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); if (employerIdstList != null && employerIdstList.Count > 0) { return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.Nationalcode == commandNationalcode); } else return false; } public bool ExistsEmployerAccountNationalId(string commandNationalId) { var acountID = _authHelper.CurrentAccountId(); var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); if (employerIdstList != null && employerIdstList.Count > 0) { return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.NationalId == commandNationalId); } else return false; } public bool ExistsEmployerAccountById(string nationalcode, long commandId) { var acountID = _authHelper.CurrentAccountId(); var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID && x.EmployerId != commandId).Select(x => x.EmployerId).ToList(); if (employerIdstList != null && employerIdstList.Count > 0) { return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.Nationalcode == nationalcode); } else return false; } public bool ExistsEmployerAccountNationalIdEmployerId(string nationalId, long commandId) { var acountID = _authHelper.CurrentAccountId(); var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID && x.EmployerId != commandId).Select(x => x.EmployerId).ToList(); if (employerIdstList != null && employerIdstList.Count > 0) { return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.NationalId == nationalId); } else return false; } public bool ExistsEmployerAccountRegisterId(string commandRegisterId) { var acountID = _authHelper.CurrentAccountId(); var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); if (employerIdstList != null && employerIdstList.Count > 0) { return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.RegisterId == commandRegisterId); } else return false; } public bool ExistsEmployerAccountLName(string commandLName) { var acountID = _authHelper.CurrentAccountId(); var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); if (employerIdstList != null && employerIdstList.Count > 0) { return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.LName == commandLName); } else return false; } #region Mahan public List GetEmployersHasWorkshop() { return _context.WorkshopEmployers.Include(x => x.Employer).Select(x => new EmployerViewModel() { FullName = x.Employer.FullName, Id = x.Employer.id }).ToList(); } public async Task> GetSelectList(string search) { var query = _context.Employers.Select(x => new EmployerSelectListViewModel() { Id = x.id, Name = x.FullName }); if (!string.IsNullOrWhiteSpace(search)) { query = query.Where(x => x.Name.Contains(search)); } return await query.Take(100).ToListAsync(); } #endregion #region NewByHeydari public OperationResult DeleteEmployer(long id) { var op = new OperationResult(); try { var personalContractingParties = _context.Employers.Where(x => x.id == id)?.FirstOrDefault(); _context.Employers.Remove(personalContractingParties); _context.SaveChanges(); return op.Succcedded(-1, "حذف با موفقیت انجام شد."); } catch (Exception) { return op.Failed("حذف با خطا مواجه شد."); } } public List GetEmployerWithFNameOrLName(string searchText) { var result = _context.Employers.Where(x => (!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchText)) || (!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchText)) || (x.IsLegal == "حقیقی" && (!string.IsNullOrEmpty(x.FName) && !string.IsNullOrEmpty(x.LName)) && (x.FName + " " + x.LName).Contains(searchText))) .Select(x => new EmployerViewModel { Id = x.id, LName = (x.IsLegal == "حقیقی" ? x.FullName : x.LName), }).Take(100).ToList(); return result; } public List GetEmployerWithIdNumberOrRegisterId(string searchText) { var result = _context.Employers.Where(x => (x.IsLegal == "حقیقی" && !string.IsNullOrEmpty(x.IdNumber) && x.IdNumber.StartsWith(searchText)) || (x.IsLegal == "حقوقی" && !string.IsNullOrEmpty(x.RegisterId) && x.RegisterId.StartsWith(searchText))) .Select(x => new EmployerViewModel { Id = x.id, IdNumber = (x.IsLegal == "حقیقی" ? x.IdNumber : x.RegisterId), }).Take(100).ToList(); return result; } public List GetEmployerWithNationalcodeOrNationalId(string searchText) { var result = _context.Employers.Where(x => (x.IsLegal == "حقیقی" && !string.IsNullOrEmpty(x.Nationalcode) && x.Nationalcode.StartsWith(searchText)) || (x.IsLegal == "حقوقی" && !string.IsNullOrEmpty(x.NationalId) && x.NationalId.StartsWith(searchText))) .Select(x => new EmployerViewModel { Id = x.id, Nationalcode = (x.IsLegal == "حقیقی" ? x.Nationalcode : x.NationalId), }).Take(100).ToList(); return result; } public OperationResult DeActiveAll(long id) { OperationResult result = new OperationResult(); using (var transaction = _context.Database.BeginTransaction()) { try { var employer = _context.Employers.FirstOrDefault(x => x.id == id); employer.DeActive(); var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).Select(x => x.WorkshopId).ToList(); var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList(); workshops.ForEach(x => x.DeActive(x.ArchiveCode)); var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList(); contracts.ForEach(x => x.DeActive()); var contractIds = contracts.Select(x => x.id).ToList(); var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList(); checkouts.ForEach(x => x.DeActive()); _context.SaveChanges(); transaction.Commit(); result.Failed("DeActive"); } catch (Exception) { result.Failed("غیرفعال کردن کارفرما با خطا مواجه شد"); transaction.Rollback(); } } return result; } public OperationResult ActiveAll(long id) { OperationResult result = new OperationResult(); using (var transaction = _context.Database.BeginTransaction()) { try { var employer = _context.Employers.FirstOrDefault(x => x.id == id); employer.Active(); var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).Select(x => x.WorkshopId).ToList(); var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList(); workshops.ForEach(x => x.Active(x.ArchiveCode)); var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList(); contracts.ForEach(x => x.Active()); var contractIds = contracts.Select(x => x.id).ToList(); var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList(); checkouts.ForEach(x => x.Active()); _context.SaveChanges(); transaction.Commit(); result.Succcedded(); } catch (Exception) { result.Failed("فعال کردن کارفرما با خطا مواجه شد"); transaction.Rollback(); } } return result; } public List GetAllEmployers() { return _context.Employers.Select(x => new EmployerViewModel { Id = x.id, FName = x.FName, LName = x.LName, FullName = x.FullName, Nationalcode = x.Nationalcode, //IdNumber = x.IdNumber, //RegisterId = x.RegisterId, NationalId = x.NationalId, IsLegal = x.IsLegal, }).ToList(); } #endregion #region Insurance /// /// نام کارفرما /// وضعیت حقیقی حقوقی /// /// /// public (string employerName, bool isLegal) InsuranceEmployerByWorkshopId(long workshopId) { var res = _context.WorkshopEmployers.Where(x => x.WorkshopId == workshopId) .Include(x => x.Employer).Select(x => new EmprViewModel { //EmployerFullName = x.Employer.IsLegal == "حقوقی" ? // (x.Employer.EmployerLName != "#" ? x.Employer.FName + " " + x.Employer.EmployerLName: x.Employer.LName) : x.Employer.FullName, FName = x.Employer.FName, LName = x.Employer.LName, EmployerLName = x.Employer.EmployerLName, EmployerFullName = x.Employer.FullName, IsLegal = x.Employer.IsLegal, }); string employer = ""; bool isLegal = res.Any(x => x.IsLegal == "حقوقی"); //اگر حقوقی بود نام همان کارفرما کافیست if (isLegal) { var legalEmloyer = res.FirstOrDefault(x => x.IsLegal == "حقوقی"); employer = legalEmloyer.EmployerLName != "#" ? legalEmloyer.FName + " " + legalEmloyer.EmployerLName : legalEmloyer.LName; return (employer, true); } //در غیر این صورت رشته ای از نام کارفرماها ساخته می شود foreach (var item in res) employer += (item.EmployerFullName + ","); employer = employer.Substring(0, employer.Length - 1); return (employer, false); } #endregion #region Api public async Task> GetEmployerList(GetEmployerSearchModel searchModel) { var query = _context.Employers.Include(x => x.ContractingParty).Include(x => x.WorkshopEmployers).ThenInclude(x => x.Workshop).AsQueryable(); if (!string.IsNullOrWhiteSpace(searchModel.FullNameOrCompanyName)) query = query.Where(x => x.FullName.Contains(searchModel.FullNameOrCompanyName)); if (!string.IsNullOrWhiteSpace(searchModel.NationalCodeOrNationalId)) query = query.Where(x => x.Nationalcode.Contains(searchModel.NationalCodeOrNationalId) || x.NationalId.Contains(searchModel.NationalCodeOrNationalId)); if (!string.IsNullOrWhiteSpace(searchModel.IdNumberOrRegisterId)) query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumberOrRegisterId) || x.RegisterId.Contains(searchModel.IdNumberOrRegisterId)); if (searchModel.EmployerType != LegalType.None) { var type = searchModel.EmployerType switch { LegalType.Legal => "true", LegalType.Real => "false", _ => "", }; query = query.Where(x => x.IsLegal == type); } if (searchModel.EmployerStatus != ActivationStatus.None) { var status = searchModel.EmployerStatus switch { ActivationStatus.Active => true, ActivationStatus.DeActive => false, _ => false }; query = query.Where(x => x.IsActive == status); } if (!string.IsNullOrEmpty(searchModel.ContractingPartyName)) { query = query.Where(x => x.ContractingParty.IsLegal == "true" ? (x.ContractingParty.LName).Contains(searchModel.ContractingPartyName) : (x.ContractingParty.FName + " " + x.ContractingParty.LName).Contains(searchModel .ContractingPartyName)); } var employerList = await query.Select(x => new GetEmployerListViewModel() { Id = x.id, FullName = x.FullName, HasContractingParty = x.ContractingPartyId == 30428 && x.WorkshopEmployers.Any(), HasBlockContractingParty = x.ContractingParty.IsBlock == "true", NationalCodeOrNationalId = x.IsLegal == "true" ? x.NationalId : x.Nationalcode, WorkshopNames = x.WorkshopEmployers.Select(w => w.Workshop.WorkshopFullName).ToList(), LegalType = x.IsLegal == "حقیقی" ? LegalType.Real : LegalType.Legal, EmployerStatus = x.IsActive ? ActivationStatus.Active : ActivationStatus.DeActive, }).Skip(searchModel.PageIndex).Take(30).ToListAsync(); return employerList; } public async Task GetLegalEmployerDetail(long id) { var employer = await _context.Employers.Where(x => x.IsLegal == "حقوقی").Include(x => x.ContractingParty).Select(x => new GetLegalEmployerDetailViewModel() { Id = x.id, CompanyName = x.LName, ContractingPartyName = x.ContractingParty.FName + " " + x.ContractingParty.LName, DateOfBirth = x.DateOfBirth.ToFarsi(), DateOfIssue = x.DateOfIssue.ToFarsi(), CeoFullName = x.FName + " " + x.EmployerLName, EmployerNo = x.EmployerNo, FatherName = x.FatherName, GenderStr = x.Gender, Gender = string.IsNullOrWhiteSpace(x.Gender) ? Gender.None : x.Gender == "مرد" ? Gender.Male : Gender.Female, NationalCode = x.Nationalcode, IdNumber = x.IdNumber, NationalId = x.NationalId, Nationality = x.Nationality, PhoneNumber = x.Phone, PlaceOfIssue = x.PlaceOfIssue, RegisterId = x.RegisterId, TelephoneNumber = x.AgentPhone, CeoFName = x.FName, CeoLName = x.EmployerLName, GovernmentSystemInfo = new GovernmentSystemInfo { EServicePassword = x.EservicePassword, EServiceUsername = x.EservicePassword, MclPassword = x.MclsPassword, MclUsername = x.MclsUserName, SanaUsername = x.SanaUserName, SanaPassword = x.SanaPassword, TaxUsername = x.TaxOfficeUserName, TaxPassword = x.TaxOfficepassword }, ContractingPartyId = x.ContractingPartyId }).FirstOrDefaultAsync(x => x.Id == id); return employer; } public async Task GetRealEmployerDetail(long id) { var employer = await _context.Employers.Where(x => x.IsLegal == "حقیقی").Include(x => x.ContractingParty).Select(x => new GetRealEmployerDetailViewModel() { Id = x.id, ContractingPartyName = x.ContractingParty.FName + " " + x.ContractingParty.LName, DateOfBirth = x.DateOfBirth.ToFarsi(), DateOfIssue = x.DateOfIssue.ToFarsi(), EmployerNo = x.EmployerNo, FatherName = x.FatherName, GenderStr = x.Gender, Gender = string.IsNullOrWhiteSpace(x.Gender) ? Gender.None : x.Gender == "مرد" ? Gender.Male : Gender.Female, NationalCode = x.Nationalcode, IdNumber = x.IdNumber, Nationality = x.Nationality, PhoneNumber = x.Phone, PlaceOfIssue = x.PlaceOfIssue, TelephoneNumber = x.AgentPhone, FullName = x.FullName, FName = x.FName, LName = x.LName, GovernmentSystemInfo = new GovernmentSystemInfo { EServicePassword = x.EservicePassword, EServiceUsername = x.EservicePassword, MclPassword = x.MclsPassword, MclUsername = x.MclsUserName, SanaUsername = x.SanaUserName, SanaPassword = x.SanaPassword, TaxUsername = x.TaxOfficeUserName, TaxPassword = x.TaxOfficepassword }, ContractingPartyId = x.ContractingPartyId }).FirstOrDefaultAsync(x => x.Id == id); return employer; } public async Task> DeactivateWithSubordinates(long id) { var op = new OperationResult(); ; using (var transaction = await _context.Database.BeginTransactionAsync()) { try { var employer = await _context.Employers .Include(x => x.Contracts) .Include(x => x.WorkshopEmployers) .ThenInclude(x => x.Workshop) .ThenInclude(x => x.Checkouts).FirstOrDefaultAsync(x => x.id == id); if (employer == null) { return op.Failed("چنین آیتمی وجود ندارد"); } var workshops = employer.WorkshopEmployers.Select(x => x.Workshop).ToList(); var contracts = employer.Contracts.ToList(); var checkouts = workshops.SelectMany(x => x.Checkouts).ToList(); employer.DeActive(); foreach (var workshop in workshops) { workshop.DeActive(workshop.ArchiveCode); } foreach (var contract in contracts) { contract.DeActive(); } foreach (var checkout in checkouts) { checkout.DeActive(); } await _context.SaveChangesAsync(); await transaction.CommitAsync(); return op.Succcedded("DeActivate"); } catch (Exception) { await transaction.RollbackAsync(); return op.Failed("غیرفعال کردن کارفرما با خطا مواجه شد"); } } } #endregion }