zinab_elgendy před 2 měsíci
rodič
revize
d589d8a197

+ 45 - 0
MTWorkHR.Application/Dtos/Contract/ContractAllHRDto.cs

@@ -0,0 +1,45 @@
+using MTWorkHR.Application.Models;
+using MTWorkHR.Core.Entities;
+using MTWorkHR.Core.Entities.Base;
+using MTWorkHR.Core.Global;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MTWorkHR.Application.Models
+{
+    public class ContractAllHRDto : EntityDto
+    {
+        public ContractTypeEnum ContractTypeId { get; set; }
+        public ContractStatusEnum ContractStatusId { get; set; }
+        public TypeOfWork? TypeOfWork { get; set; } //: :   اختيار: عقد بدوام كامل -  عقد دوام جزئي   
+
+        public long CompanyId { get; set; }
+        
+        public string UserId { get; set; }
+        public string? EmployeeName { get; set; }
+        public string? EmployeeEmail { get; set; }
+      
+        public int? JobId { get; set; }
+        //-------------------Scope of work-----------
+        public string? JobTitleName { get; set; }
+        public string? JobDescription{ get; set; }
+
+        //----------Salary-----------------
+        [MaxLength(50)]
+        public string? Currency { get; set; }
+        public decimal? Salary{ get; set; }
+        public DateTime? LastInvoiceDate { get; set; }
+        //------------------------Fixed Pay----------------
+        public string? Teams{ get; set; }
+        public int? RestVacations{ get; set; }
+        public int? SpentVacations { get; set; }
+        public int? VacationDays { get; set; } //اختيار: بدون – سنويا (رقم)
+
+    }
+}

+ 3 - 1
MTWorkHR.Application/Dtos/Contract/ContractHRDto.cs

@@ -63,7 +63,9 @@ namespace MTWorkHR.Application.Models
         public DateTime? LastPatchDateTo { get; set; } // 
         public decimal? LastPatchAmount { get; set; }
         public string? Teams{ get; set; }
-        public string? Vacations{ get; set; }
+        public int? SpentVacations{ get; set; }
+        public int? RestVacations { get; set; }
+        public int? VacationDays { get; set; } //اختيار: بدون – سنويا (رقم)
 
         //__________________HR data_________-
         public List<TeamDto>? TeamList { get; set; }

+ 1 - 0
MTWorkHR.Application/Dtos/Contract/ContractPagingInputDto.cs

@@ -11,6 +11,7 @@ namespace MTWorkHR.Application.Models
     {
         public long? ContractStatusId { get; set; }
         public long? ContractTypeId { get; set; }
+        public string? UserName { get; set; }
 
 
     }

+ 1 - 0
MTWorkHR.Application/Mapper/MappingProfile.cs

@@ -141,6 +141,7 @@ namespace MTWorkHR.Application.Mapper
             CreateMap<Invoice, InvoiceDto>().ReverseMap();
             CreateMap<Contract, ContractDto>().ForMember(d => d.WorkingDays, o => o.Ignore());
             CreateMap<Contract, ContractHRDto>().ForMember(d => d.WorkingDays, o => o.Ignore());
+            CreateMap<Contract, ContractAllHRDto>();
             CreateMap<ContractDto, Contract>()
                 .ForMember(d => d.CreateDate, o => o.Ignore())
                 .ForMember(d => d.CreateUser, o => o.Ignore());

+ 22 - 8
MTWorkHR.Application/Services/Contract/ContractService.cs

@@ -10,6 +10,7 @@ using System.Linq.Dynamic.Core;
 using Microsoft.AspNetCore.Identity;
 using MTWorkHR.Infrastructure.Entities;
 using System.Linq;
+using MTWorkHR.Core.IDto;
 
 namespace MTWorkHR.Application.Services
 {
@@ -127,7 +128,7 @@ namespace MTWorkHR.Application.Services
         }
 
         #region HR data____________________________
-        public async Task<PagingResultDto<ContractDto>> GetAllForHr(ContractPagingInputDto PagingInputDto)
+        public async Task<PagingResultDto<ContractAllHRDto>> GetAllForHr(ContractPagingInputDto PagingInputDto)
         {
             var res = await _unitOfWork.Contract.GetAllWithChildrenAsync();
             var query = res.Item1;
@@ -159,7 +160,7 @@ namespace MTWorkHR.Application.Services
             var total = await query.CountAsync();
 
             var list = MapperObject.Mapper
-                .Map<IList<ContractDto>>(await page.ToListAsync());
+                .Map<IList<ContractAllHRDto>>(await page.ToListAsync());
 
 
             var teamUsersList = await _unitOfWork.TeamUser.GetAllWithChildrenAsync();
@@ -174,23 +175,35 @@ namespace MTWorkHR.Application.Services
                         item.EmployeeName = user.FirstName + " " + user.LastName;
                         item.EmployeeEmail = user.Email;
                         //___________Get Teams
-                        var TeamsList = teamUsersList.Item1.Where(t => t.AssignedUserId == item.UserId).Select(t => GlobalInfo.lang == "en" ? t.Team.NameEn : t.Team.NameAr);
-                        item.Teams = TeamsList == null ? "" : string.Join(",", TeamsList);
+                        //var TeamsList = teamUsersList.Item1.Where(t => t.AssignedUserId == item.UserId).Select(t => GlobalInfo.lang == "en" ? t.Team.NameEn : t.Team.NameAr);
+                        //item.Teams = TeamsList == null ? "" : string.Join(",", TeamsList);
+                        var latestTeam = teamUsersList.Item1.OrderByDescending(a=> a.Id).FirstOrDefault(t => t.AssignedUserId == item.UserId);
+                        item.Teams = latestTeam == null ? "" : GlobalInfo.lang == "en" ? latestTeam.Team?.NameEn : latestTeam.Team?.NameAr;
                         //_____________Get vacation balance
                         var remainVacations = vacationAllocations.Item1.FirstOrDefault(t => t.EmployeeId == item.UserId && t.ContractId == item.Id);
-                        item.Vacations = remainVacations == null ? "" : remainVacations.NumberOfDays + " / " + item.VacationDays;
+                        item.RestVacations = remainVacations == null ? item.VacationDays : remainVacations.NumberOfDays ;
+                        item.SpentVacations = item.VacationDays - item.RestVacations;
                     }
                 }
             }
 
+            // Filter employees by name if provided
+            if (!string.IsNullOrEmpty(PagingInputDto.UserName))
+            {
+                var filter = PagingInputDto.UserName;
 
+                list = list.Where(u =>
+                     (u.EmployeeName != null && u.EmployeeName.Contains(filter))
+                    || (u.EmployeeEmail != null && u.EmployeeEmail.Contains(filter))
+                ).ToList();
+            }
 
 
 
-            var response = new PagingResultDto<ContractDto>
+            var response = new PagingResultDto<ContractAllHRDto>
             {
                 Result = list,
-                Total = total
+                Total = list.Count
             };
 
             return response;
@@ -214,7 +227,8 @@ namespace MTWorkHR.Application.Services
                 //_____________Get vacation balance
                 var vacationAllocations = await _unitOfWork.OrderAllocation.GetUserAllocations(entity.UserId, 1, 1, entity.Id, DateTime.Now.Year);
                 var remainVacations = vacationAllocations;
-                response.Vacations = remainVacations == null ? "" : remainVacations.NumberOfDays + " / " + entity.VacationDays;
+                response.RestVacations = remainVacations == null ? entity.VacationDays : remainVacations.NumberOfDays;
+                response.SpentVacations = entity.VacationDays - response.RestVacations;
                 //__-----------Order Requests----
                 var orderRequestsList = await _unitOfWork.OrderRequest.GetAllUserOrdersAsync(entity.UserId, contractId);
                 var orderList = MapperObject.Mapper.Map<List<OrderRequestDto>>(orderRequestsList.Item1);

+ 1 - 1
MTWorkHR.Application/Services/Interfaces/IContractService.cs

@@ -8,7 +8,7 @@ namespace MTWorkHR.Application.Services.Interfaces
     public interface IContractService : IService<Contract, ContractDto, ContractDto>
     {
         Task<PagingResultDto<ContractDto>> GetAll(ContractPagingInputDto PagingInputDto);
-        Task<PagingResultDto<ContractDto>> GetAllForHr(ContractPagingInputDto PagingInputDto);
+        Task<PagingResultDto<ContractAllHRDto>> GetAllForHr(ContractPagingInputDto PagingInputDto);
         Task<bool> ChangeStatus(long contractId, int statusId);
         Task<ContractHRDto> GetByIdHRDetails(long id);
     }

+ 1 - 0
MTWorkHR.Core/IDto/IContractPagingInputDto.cs

@@ -6,6 +6,7 @@ namespace MTWorkHR.Core.IDto
     {
         public long? ContractStatusId { get; set; }
         public long? ContractTypeId { get; set; }
+        public string? UserName { get; set; }
 
     }
 }