using Microsoft.EntityFrameworkCore; using MTWorkHR.Application.Identity; using MTWorkHR.Application.Mapper; using MTWorkHR.Application.Models; using MTWorkHR.Core.Global; using MTWorkHR.Core.UnitOfWork; using MTWorkHR.Application.Services.Interfaces; using MTWorkHR.Core.Entities; using System.Linq.Dynamic.Core; using Microsoft.AspNetCore.Identity; using MTWorkHR.Infrastructure.Entities; namespace MTWorkHR.Application.Services { public class ContractService : BaseService, IContractService { private readonly IUnitOfWork _unitOfWork; private readonly IUserService _userService; private readonly GlobalInfo _globalInfo; public ContractService(IUnitOfWork unitOfWork, IUserService userService, GlobalInfo globalInfo) : base(unitOfWork) { _unitOfWork = unitOfWork; _userService = userService; _globalInfo = globalInfo; } public override async Task GetById(long id) { var entity = await _unitOfWork.Contract.GetByIdWithAllChildren(id); var response = MapperObject.Mapper.Map(entity); return response; } public override async Task Create(ContractDto input) { var entity = MapperObject.Mapper.Map(input); if (entity is null) { throw new AppException(ExceptionEnum.MapperIssue); } var team = await _unitOfWork.Contract.AddAsync(entity); await _unitOfWork.CompleteAsync(); var response = MapperObject.Mapper.Map(team); return response; } //public override async Task Update(ContractDto input) //{ // var entity = MapperObject.Mapper.Map(input); // if (entity is null) // { // throw new AppException(ExceptionEnum.MapperIssue); // } // var contract = await _unitOfWork.Contract.upd(entity); // await _unitOfWork.CompleteAsync(); // var response = Mapper.MapperObject.Mapper.Map(entity); // return response; //} public async Task> GetAll(ContractPagingInputDto PagingInputDto) { var res = await _unitOfWork.Contract.GetAllWithChildrenAsync(); var query = res.Item1; if (_globalInfo.UserType != UserTypeEnum.Business) { // query = query.Where(m => m.ContractUsers != null && m.ContractUsers.Count > 0 && m.ContractUsers.Count(u=> u.AssignedUserId == _globalInfo.UserId) > 0); } if (PagingInputDto.Filter != null) { var filter = PagingInputDto.Filter; query = query.Where(u => u.JobDescription.Contains(filter)); } if (PagingInputDto.ContractStatusId != null) { query = query.Where(u => (int)u.ContractStatusId == PagingInputDto.ContractStatusId); } if (PagingInputDto.ContractTypeId != null) { query = query.Where(u => (int)u.ContractTypeId == PagingInputDto.ContractTypeId); } var order = query.OrderBy(PagingInputDto.OrderByField + " " + PagingInputDto.OrderType); var page = order.Skip((PagingInputDto.PageNumber * PagingInputDto.PageSize) - PagingInputDto.PageSize).Take(PagingInputDto.PageSize); var total = await query.CountAsync(); var list = MapperObject.Mapper .Map>(await page.ToListAsync()); foreach (var item in list) { if (item.UserId != null) { var user = await _userService.GetUserWithAttachmentById(item.UserId); if (user != null) { item.EmployeeName = user.FirstName + " " + user.LastName; item.EmployeeEmail = user.Email; } } } var response = new PagingResultDto { Result = list, Total = total }; return response; } public async Task ChangeStatus(long contractId, int statusId) { var entity = await _unitOfWork.Contract.GetByIdAsync(contractId); if (entity == null) throw new AppException(ExceptionEnum.RecordNotExist); entity.ContractStatusId = statusId; bool result = true; if (statusId == (int)ContractStatusEnum.Approved) { var updatedSuccess = await _userService.Update(entity.UserId, entity.CompanyId); if (!updatedSuccess) { result = false; } } await _unitOfWork.CompleteAsync(); return result; } } }