ContractRepository.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Microsoft.EntityFrameworkCore;
  2. using MTWorkHR.Core.Entities;
  3. using MTWorkHR.Core.IDto;
  4. using MTWorkHR.Core.IRepositories;
  5. using MTWorkHR.Infrastructure.Entities;
  6. using MTWorkHR.Infrastructure.DBContext;
  7. using MTWorkHR.Core.Global;
  8. namespace MTWorkHR.Infrastructure.Repositories
  9. {
  10. public class ContractRepository : Repository<Contract>, IContractRepository
  11. {
  12. private readonly DbSet<Contract> dbSet;
  13. private readonly DbSet<TeamUser> dbSet2;
  14. public ContractRepository(HRDataContext context) : base(context)
  15. {
  16. dbSet = context.Set<Contract>();
  17. dbSet2 = context.Set<TeamUser>();
  18. }
  19. public async Task<Contract> GetByIdWithAllChildren(long id)
  20. {
  21. return await dbSet
  22. .Include(x => x.ContractTasks)
  23. .Include(x => x.FixedAllowances)
  24. .Include(x => x.ProjectStages)
  25. // .Include(x => x.WorkingDays)
  26. .FirstOrDefaultAsync(x => x.Id == id);
  27. }
  28. public async Task<Contract> GetLatestActiveContract(string userId)
  29. {
  30. return await dbSet
  31. .FirstOrDefaultAsync(x => x.UserId == userId
  32. && x.ContractStatusId == (int)ContractStatusEnum.Approved
  33. && x.StartDate <= DateTime.Now.Date
  34. && (x.EndDate == null || x.EndDate < DateTime.Now.Date));
  35. }
  36. public async Task<Tuple<IQueryable<Contract>, int>> GetAllWithChildrenAsync()
  37. {
  38. var query = dbSet//.Join(x => x.TeamUser)
  39. .AsQueryable();
  40. var total = await query.CountAsync();
  41. return new Tuple<IQueryable<Contract>, int>(query, total);
  42. }
  43. public async Task<Tuple<IQueryable<Contract>, int>> GetAllWithTeamsAsync()
  44. {
  45. var query = dbSet//.Join(x => x.TeamUser)
  46. .AsQueryable();
  47. //var teamUsersList = dbSet2.Include(x => x.Team).ToList();
  48. var query2 = dbSet
  49. .Join(
  50. dbSet2.Include(x => x.Team),
  51. c => c.UserId,
  52. teamUser => teamUser.AssignedUserId,
  53. (contract, teamUser) => new
  54. {
  55. Contract = contract,
  56. Team = teamUser.Team.NameEn
  57. }
  58. )
  59. .AsQueryable();
  60. var total = await query2.CountAsync();
  61. return new Tuple<IQueryable<Contract>, int>(query, total);
  62. }
  63. }
  64. }