using System; using System.Collections.Generic; using System.Linq; using _0_Framework.Application.Enums; using System.Threading.Tasks; using _0_Framework.InfraStructure; using Company.Domain.RepresentativeAgg; using CompanyManagment.App.Contracts.PersonalContractingParty; using CompanyManagment.App.Contracts.Representative; using Microsoft.EntityFrameworkCore; namespace CompanyManagment.EFCore.Repository; public class RepresentativeRepository : RepositoryBase, IRepresentativeRepository { private readonly CompanyContext _context; public RepresentativeRepository(CompanyContext context) : base(context) { _context = context; } public List GetRepresentatives() { return _context.RepresentativeSet.Select(x => new RepresentativeViewModel() { Id = x.id, //FName = x.FName, 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 GetContractingParties(long id) { var contractingParty = _context.PersonalContractingParties.Select(x=> new PersonalContractingPartyViewModel() { id = x.id, IsLegal = x.IsLegal, FName = x.FName, LName = x.LName, FullName = x.FName + " " + x.LName, RepresentativeId = x.RepresentativeId, SureName = x.SureName }).Where(n=>n.RepresentativeId == id).ToList(); var result = new List(); foreach (var item in contractingParty) { if (item.IsLegal == "حقوقی") { item.FullName = item.LName; } result.Add(item); } return result; } public EditRepresentative GetDetails(long id) { return _context.RepresentativeSet.Select(x => new EditRepresentative() { Id = x.id, FName = x.FName, LName = x.LName, LegalName = x.LegalName, 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 == id); } public List Search(RepresentativeSearchModel searchModel) { var query = _context.RepresentativeSet.Where(x=>x.FullName != "-").Select(x => new RepresentativeViewModel() { Id = x.id, FName = x.FName, LName = x.LName, LegalName = x.LegalName, 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, IsActive = x.IsActive }); if (!string.IsNullOrWhiteSpace(searchModel.FullName)) query = query.Where(x => x.FName.Contains(searchModel.FullName) || x.LName.Contains(searchModel.FullName) || x.LegalName.Contains(searchModel.FullName)); //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)||x.NationalId.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.IsNullOrEmpty(searchModel.ContractingPartyName)) { List representativeIds = _context.PersonalContractingParties.Where(x => (x.IsLegal == "حقیقی" && ((!string.IsNullOrWhiteSpace(x.FName) && x.FName.StartsWith(searchModel.ContractingPartyName)) || (!string.IsNullOrWhiteSpace(x.LName) &&x.LName.StartsWith(searchModel.ContractingPartyName)))) || (x.IsLegal == "حقوقی" && (!string.IsNullOrWhiteSpace(x.LName) && x.LName.Contains(searchModel.ContractingPartyName)))).Select(x=>x.RepresentativeId).ToList(); query = query.Where(x => representativeIds.Contains(x.Id)); } if (searchModel.ContractingPartyId>0) { List representativeIds = _context.PersonalContractingParties.Where(x => x.id== searchModel.ContractingPartyId).Select(x => x.RepresentativeId).ToList(); query = query.Where(x => representativeIds.Contains(x.Id)); } if (searchModel.IsActive == "false") { query = query.Where(x => x.IsActive == "false"); } else if (searchModel.IsActive == "both") { query = query.Where(x => x.IsActive == "false" || x.IsActive == "true"); } else if (searchModel.IsActive == "true") { query = query.Where(x => x.IsActive == "true"); } if (searchModel.IsLegal == "false") { query = query.Where(x => x.IsLegal == "false"); } else if (searchModel.IsLegal == "both") { query = query.Where(x => x.IsLegal == "false" || x.IsLegal == "true"); } else if (searchModel.IsLegal == "true") { query = query.Where(x => x.IsLegal == "true"); } return query.OrderByDescending(x => x.Id).ToList(); } #region NewByHeydari public List GetRepresentativeListForSearchText(string searchText) { var result = _context.RepresentativeSet.Where(x => ( x.IsLegal == "false" && ((!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchText) ) || (!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchText))) || (!string.IsNullOrEmpty(x.FullName) && x.FullName.Contains(searchText))) || (x.IsLegal == "true" && (!string.IsNullOrEmpty(x.FullName) && x.FullName.Contains(searchText))) ) .Select(x => new RepresentativeViewModel { Id = x.id, FName = x.FName, LName = x.LName, IsLegal = x.IsLegal, FullName =(x.IsLegal== "true"? x.FullName:(x.FName + " " + x.LName)) }).Take(100).ToList(); return result; } public bool DeleteRepresentative(long id) { try { var representativeList = _context.RepresentativeSet.Where(x => x.id == id).ToList(); _context.RepresentativeSet.RemoveRange(representativeList); _context.SaveChanges(); return true; } catch (Exception) { return false; } } #endregion #region Api public async Task> GetList(RepresentativeGetListSearchModel searchModel) { var query = _context.RepresentativeSet.Include(x => x.ContractingParties) .Where(x => x.FullName != "-"); if (!string.IsNullOrWhiteSpace(searchModel.CompanyNameOrFullName)) query = query.Where(x => x.FullName.Contains(searchModel.CompanyNameOrFullName)); if (!string.IsNullOrWhiteSpace(searchModel.NationalCodeOrNationalId)) query = query.Where(x => x.Nationalcode.Contains(searchModel.NationalCodeOrNationalId) || x.NationalId.Contains(searchModel.NationalCodeOrNationalId)); if (!string.IsNullOrWhiteSpace(searchModel.IdNumber)) query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumber)); if (searchModel.ContractingPartyId > 0) { query = query.Where(x => x.ContractingParties.Any(c => c.id == searchModel.ContractingPartyId)); } if (searchModel.RepresentativeType != LegalType.None) { string isLegal = searchModel.RepresentativeType switch { LegalType.Real => "false", LegalType.Legal => "true", _ => "" }; query = query.Where(x => x.IsLegal == isLegal); } if (searchModel.RepresentativeStatus != ActivationStatus.None) { string status = searchModel.RepresentativeStatus switch { ActivationStatus.Active => "true", ActivationStatus.DeActive => "false", _ => "" }; query = query.Where(x => x.IsActive == status); } var result = await query.Skip(searchModel.PageIndex).Take(30) .Select(x => new RepresentativeGetListViewModel() { Id = x.id, NationalIdOrNationalCode = x.IsLegal == "true" ? x.NationalId : x.Nationalcode, RealNameOrLegalName = x.FullName, HasAnyContractingParty = x.ContractingParties.Any(), RepresentativeStatus = x.IsActive == "false" ? ActivationStatus.DeActive : ActivationStatus.Active, RepresentativeType = x.IsLegal == "true" ? LegalType.Legal : LegalType.Real, }).ToListAsync(); return result; } public bool HasAnyContractingParty(long id) { return _context.RepresentativeSet.Where(x => x.id == id).Include(x => x.ContractingParties) .Any(x => x.ContractingParties.Any()); } public async Task> GetSelectList() { return await _context.RepresentativeSet.Select(x => new GetSelectListRepresentativeViewModel() { Id = x.id, Text = x.FullName }).ToListAsync(); } #endregion }