using System.Collections.Generic; using System.Linq; using _0_Framework.InfraStructure; using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Position; using AccountManagement.Domain.AccountAgg; using AccountManagement.Domain.PositionAgg; using AccountMangement.Infrastructure.EFCore; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; namespace TaskManager.Infrastructure.EFCore.Repository; public class PositionRepository : RepositoryBase, IPositionRepository { private readonly AccountContext _accountContext; private readonly IHttpContextAccessor _contextAccessor; public PositionRepository(AccountContext accountContext, IHttpContextAccessor contextAccessor) : base(accountContext) { _accountContext = accountContext; _contextAccessor = contextAccessor; } public List GetPositions() { // این متد تمام سمت ها را بدست می آورد return _accountContext.Positions.Select(x => new PositionViewModel() { Value = x.PositionValue, Id = x.id, Name = x.PositionName, CountUsers = _accountContext.Accounts.Count(a => a.PositionId == x.id &&a.PositionIsActive=="true") }).OrderBy(x => x.Value).ToList(); } public List GetLowerPosition() { var posValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); return _accountContext.Positions.Where(x => x.PositionValue >= posValue).Select(x => new PositionViewModel() { Value = x.PositionValue, Id = x.id, Name = x.PositionName }).OrderBy(x => x.Value).ToList(); } public List GetUnUsedPositionValues() { List values = new List() { 1, 2, 3, 4, 5 }; var usedPositions = _accountContext.Positions.Select(x => x.PositionValue).ToList(); return values.Where(x => !usedPositions.Contains(x)).ToList(); } //لیست کسانی که سمتی برایشان ثبت نشده است public List GetNoPositionAccounts() { return _accountContext.Accounts.Where(x =>( x.PositionId == null || (x.PositionId !=null && x.PositionIsActive!= "true"))&& x.IsActiveString == "true" && x.AdminAreaPermission == "true").Select(x => new AccountViewModel() { Id = x.id, Fullname = x.Fullname }).ToList(); } public List GetAllPositionAccounts() { return _accountContext.Accounts.Where(x => x.PositionId != null && x.PositionIsActive == "true").Select(x => new AccountViewModel() { Id = x.id, Fullname = x.Fullname }).ToList(); } public List GetAccountsByPositionIds(List ids) { var res = _accountContext.Accounts.Include(x => x.Position).Where(x => x.PositionId != null); return res.Where(x => ids.Contains((long)x.PositionId)).ToList(); } public void Remove(long id) { var position = Get(id); Remove(position); } public int GetLastPositionValue() { if (!_accountContext.Positions.Any()) { return 1; } else { return _accountContext.Positions.Max(x => x.PositionValue); } } public bool HasPositionValue(long accountId) { var userPositionId= _accountContext.Accounts.Find(accountId); return userPositionId.PositionId is > 0 && userPositionId.PositionIsActive == "true"; } }