Files
Backend-Api/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs
2024-12-07 18:57:44 +03:30

399 lines
17 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.RollCallEmployeeAgg;
using CompanyManagment.App.Contracts.RollCallEmployee;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace CompanyManagment.EFCore.Repository;
public class RollCallEmployeeRepository : RepositoryBase<long, RollCallEmployee>, IRollCallEmployeeRepository
{
private readonly CompanyContext _context;
private readonly IPasswordHasher _passwordHasher;
private readonly IWebHostEnvironment _webHostEnvironment;
// private IRollCallEmployeeRepository _rollCallEmployeeRepositoryImplementation;
public RollCallEmployeeRepository(CompanyContext context, IPasswordHasher passwordHasher,
IWebHostEnvironment webHostEnvironment) : base(context)
{
_context = context;
_passwordHasher = passwordHasher;
_webHostEnvironment = webHostEnvironment;
}
public List<RollCallEmployeeViewModel> GetByWorkshopId(long workshopId)
{
var query = _context.RollCallEmployees.Select(x => new RollCallEmployeeViewModel()
{
Id = x.id,
EmployeeId = x.EmployeeId,
WorkshopId = x.WorkshopId,
EmployeeFullName = x.EmployeeFullName,
IsActiveString = x.IsActiveString,
HasUploadedImage = x.HasUploadedImage
}).Where(x => x.WorkshopId == workshopId);
return query.ToList();
}
public EditRollCallEmployee GetDetails(long id)
{
return _context.RollCallEmployees.Select(x => new RollCallEmployeeViewModel()
{
Id = x.id,
WorkshopId = x.WorkshopId,
EmployeeFName = x.FName,
EmployeeLName = x.LName,
EmployeeFullName = x.EmployeeFullName,
IsActiveString = x.IsActiveString,
HasUploadedImage = x.HasUploadedImage
}).FirstOrDefault(x => x.Id == id);
}
public RollCallEmployeeViewModel GetByEmployeeIdAndWorkshopId(long employeeId, long workshopId)
{
return _context.RollCallEmployees.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId).Select(
x => new RollCallEmployeeViewModel()
{
Id = x.id,
EmployeeId = x.EmployeeId,
WorkshopId = x.WorkshopId,
EmployeeFName = x.FName,
EmployeeLName = x.LName,
EmployeeFullName = x.EmployeeFullName,
IsActiveString = x.IsActiveString,
HasUploadedImage = x.HasUploadedImage
}).FirstOrDefault();
}
public List<RollCallEmployeeViewModel> GetPersonnelRollCallListPaginate(RollCallEmployeeSearchModel command)
{
var dateNow = DateTime.Now;
var employeeQuery = _context.Employees.AsQueryable();
//if (!string.IsNullOrWhiteSpace(command.Name))
//{
// var rollCallNames = _context.RollCallEmployees.Where(x => command.WorkshopId == x.WorkshopId &&
// x.EmployeeFullName.Contains(command.Name)).Select(
// x => new
// {
// x.EmployeeId,
// x.EmployeeFullName
// });
// employeeQuery = employeeQuery.Where(x => rollCallNames.Any(y => y.EmployeeId == x.id));
//}
var rawQuery = employeeQuery.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances)
.Where(x => x.LeftWorks.Any(y =>
y.WorkshopId == command.WorkshopId && y.StartWorkDate <= dateNow &&
y.LeftWorkDate > dateNow) ||
x.LeftWorkInsurances.Any(y =>
y.WorkshopId == command.WorkshopId && y.StartWorkDate <= dateNow &&
(y.LeftWorkDate > dateNow || y.LeftWorkDate == null))).OrderByDescending(x => x.id)
.Select(x => new
{
Id = x.id,
FullName =x.FName +" "+x.LName,
x.NationalCode,
}).AsSplitQuery();
var rollCallEmployees = _context.RollCallEmployees.Where(x => x.WorkshopId == command.WorkshopId);
var joinedQuery = from employee in rawQuery
join rollCallEmployee in rollCallEmployees
on employee.Id equals rollCallEmployee.EmployeeId into grp
from joinedRollCall in grp.DefaultIfEmpty()
select new RollCallEmployeeViewModel()
{
WorkshopId = command.WorkshopId,
EmployeeId = employee.Id,
Id = joinedRollCall == null ? 0 : joinedRollCall.id,
EmployeeFullName = joinedRollCall == null ? employee.FullName : joinedRollCall.EmployeeFullName,
NationalCode = employee.NationalCode,
IsActiveString = joinedRollCall.EmployeesStatus.Any(y => y.StartDate.Date <= dateNow.Date && y.EndDate.Date > dateNow.Date) ? "true" : "false",
HasUploadedImage = joinedRollCall == null ? "false" : joinedRollCall.HasUploadedImage
};
if (!string.IsNullOrWhiteSpace(command.Name))
{
joinedQuery = joinedQuery.Where(x => x.EmployeeFullName.Contains(command.Name));
}
var firstlist = joinedQuery.AsSplitQuery();
var list = firstlist.OrderByDescending(x => x.IsActiveString == "true" ? 1 : 0)
.ThenByDescending(x => x.HasUploadedImage == "true" ? 1 : 0)
.Skip(command.PageIndex).Take(30).ToList();
var watch = new Stopwatch();
watch.Start();
list.ForEach(x =>
{
x.EmployeeSlug = _passwordHasher.SlugHasher(x.EmployeeId);
if (x.HasUploadedImage == "true")
{
try
{
var path = Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", command.WorkshopId.ToString(),
x.EmployeeId.ToString());
var thumbnailPath = Path.Combine(path, "Thumbnail.jpg");
if (System.IO.File.Exists(thumbnailPath))
{
var bytes = System.IO.File.ReadAllBytes(thumbnailPath);
var image = Convert.ToBase64String(bytes);
x.ImagePath = image;
}
else if (System.IO.File.Exists(Path.Combine(path, "1.jpg")))
{
var thumbnail = Tools.ResizeImage(Path.Combine(path, "1.jpg"), 150, 150);
System.IO.File.WriteAllBytes(thumbnailPath, Convert.FromBase64String(thumbnail));
x.ImagePath = thumbnail;
}
}
catch
{
// ignored
}
}
});
Console.WriteLine(watch.Elapsed);
return list;
}
public RollCallEmployee GetWithRollCallStatus(long id)
{
return _context.RollCallEmployees.Include(x => x.EmployeesStatus)
.FirstOrDefault(x => x.id == id);
}
public int activedPerson(long workshopId)
{
return _context.RollCallEmployees.Count(x =>
x.WorkshopId == workshopId && x.IsActiveString == "true" && x.HasUploadedImage == "true");
}
#region Pooya
public List<RollCallEmployeeViewModel> GetRollCallEmployeesByWorkshopId(long workshopId)
{
return _context.RollCallEmployees.Where(x => x.WorkshopId == workshopId)
.Select(x =>
new RollCallEmployeeViewModel()
{
EmployeeId = x.EmployeeId,
EmployeeFullName = x.EmployeeFullName,
Id = x.id,
WorkshopId = x.WorkshopId,
IsActiveString = x.IsActiveString,
HasUploadedImage = x.HasUploadedImage,
Statuses = x.EmployeesStatus.Select(y => new RollCallEmployeeStatusViewModel()
{
StartDateGr = y.StartDate,
EndDateGr = y.EndDate,
Id = y.id
})
}).ToList();
}
public List<RollCallEmployeeViewModel> GetByEmployeeIdWithStatuses(long employeeId)
{
return _context.RollCallEmployees.Include(x => x.EmployeesStatus)
.Where(x => x.EmployeeId == employeeId).Select(x =>
new RollCallEmployeeViewModel()
{
EmployeeId = x.EmployeeId,
EmployeeFullName = x.EmployeeFullName,
Id = x.id,
WorkshopId = x.WorkshopId,
IsActiveString = x.IsActiveString,
HasUploadedImage = x.HasUploadedImage,
Statuses = x.EmployeesStatus.Select(y => new RollCallEmployeeStatusViewModel()
{
StartDateGr = y.StartDate,
EndDateGr = y.EndDate,
Id = y.id
})
}).ToList();
;
}
public bool HasEmployees(long workshopId)
{
var dateNow = DateTime.Now;
return _context.Employees.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances)
.Any(x => x.LeftWorks.Any(y =>
y.WorkshopId == workshopId && y.StartWorkDate <= dateNow &&
y.LeftWorkDate > dateNow) ||
x.LeftWorkInsurances.Any(y =>
y.WorkshopId == workshopId && y.StartWorkDate <= dateNow &&
(y.LeftWorkDate > dateNow || y.LeftWorkDate == null)));
}
public List<RollCallEmployeeViewModel> GetActivePersonnelByWorkshopId(long workshopId)
{
var dateNow = DateTime.Now.Date;
var rollCallEmployeesQuery = _context.RollCallEmployees.Include(x => x.EmployeesStatus).Where(x => x.WorkshopId == workshopId
&& x.EmployeesStatus.Any(y => y.StartDate.Date <= dateNow && y.EndDate.Date > dateNow) && x.HasUploadedImage == "true");
var personnel =
_context.PersonnelCodeSet.Where(x => x.WorkshopId == workshopId && rollCallEmployeesQuery.Any(y => y.EmployeeId == x.EmployeeId && y.WorkshopId == x.WorkshopId))
.Select(x => new { x.EmployeeId, x.PersonnelCode }).ToList();
var rollCallEmployeesList = rollCallEmployeesQuery.ToList();
return personnel.Select(x =>
{
var name = rollCallEmployeesList.FirstOrDefault(y => x.EmployeeId == y.EmployeeId);
return new RollCallEmployeeViewModel()
{
PersonelCode = x.PersonnelCode,
EmployeeFName = name.FName,
EmployeeLName = name.LName,
EmployeeId = x.EmployeeId,
EmployeeFullName = name.EmployeeFullName
};
}).OrderBy(x => x.EmployeeLName).ToList();
}
public List<RollCallEmployeeViewModel> GetEmployeeRollCalls(long workshopId)
{
var f = _context.RollCallEmployees.Include(x=>x.EmployeesStatus)
.Where(x => x.WorkshopId == workshopId && x.EmployeesStatus.Any());
var res = f.Select(x => new RollCallEmployeeViewModel
{
RollCallEmployeeId = x.id,
EmployeeId = x.EmployeeId,
EmployeeFullName = x.EmployeeFullName
})
.ToList();
return res;
}
public List<RollCallEmployeeViewModel> GetPersonnelRollCallListAll(long workshopId)
{
//var dateNow = DateTime.Now;
//var f = _context.Employees.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances)
// .Where(x => x.LeftWorks.Any(y => y.WorkshopId == workshopId && y.StartWorkDate <= dateNow && y.LeftWorkDate > dateNow) ||
// x.LeftWorkInsurances.Any(y => y.WorkshopId == workshopId && y.StartWorkDate <= dateNow &&
// (y.LeftWorkDate > dateNow || y.LeftWorkDate == null))).ToList();
//var res = f.Select(x => new RollCallEmployeeViewModel
//{
// WorkshopId = workshopId,
// EmployeeId = x.id,
// Id = _context.RollCallEmployees.Any(r => r.EmployeeId == x.id && r.WorkshopId == workshopId) ?
// _context.RollCallEmployees.FirstOrDefault(r => r.EmployeeId == x.id && r.WorkshopId == workshopId)!.id : 0,
// EmployeeFullName = $"{x.FName} {x.LName}",
// EmployeeSlug = _passwordHasher.SlugHasher(x.id),
// NationalCode = _context.Employees.FirstOrDefault(e => e.id == x.id).NationalCode,
// IsActiveString = _context.RollCallEmployees.Any(r => r.EmployeeId == x.id && r.WorkshopId == workshopId && r.IsActiveString == "true") ? "true" : "false",
// HasUploadedImage = _context.RollCallEmployees.Any(r => r.EmployeeId == x.id && r.WorkshopId == workshopId && r.HasUploadedImage == "true") ? "true" : "false",
// ImagePath = (System.IO.File.Exists(Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", workshopId.ToString(), x.id.ToString(), "1.jpg")))
// ? Tools.ResizeImage(Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", workshopId.ToString(), x.id.ToString(), "1.jpg"), 150, 150)
// : "",
//}).OrderBy(x => x.PersonelCode)
// .ToList();
//return res;
return new();
}
public (int activeEmployees, int deActiveEmployees) GetActiveAndDeActiveRollCallEmployees(long workshopId)
{
var dateNow = DateTime.Now;
//var employeeQuery = _context.Employees.AsQueryable();
//var rawQuery = employeeQuery.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances)
// .Where(x => x.LeftWorks.Any(y =>
// y.WorkshopId == command.WorkshopId && y.StartWorkDate <= dateNow &&
// y.LeftWorkDate > dateNow) ||
// x.LeftWorkInsurances.Any(y =>
// y.WorkshopId == command.WorkshopId && y.StartWorkDate <= dateNow &&
// (y.LeftWorkDate > dateNow || y.LeftWorkDate == null))).OrderByDescending(x => x.id)
// .Select(x => new
// {
// Id = x.id,
// x.FullName,
// x.NationalCode,
// }).AsSplitQuery();
//var rollCallEmployees = _context.RollCallEmployees.Where(x => x.WorkshopId == command.WorkshopId);
//var joinedQuery = from employee in rawQuery
// join rollCallEmployee in rollCallEmployees
// on employee.Id equals rollCallEmployee.EmployeeId into grp
// from joinedRollCall in grp.DefaultIfEmpty()
// select new RollCallEmployeeViewModel()
// {
// WorkshopId = command.WorkshopId,
// EmployeeId = employee.Id,
// Id = joinedRollCall == null ? 0 : joinedRollCall.id,
// EmployeeFullName = joinedRollCall == null ? employee.FullName : joinedRollCall.EmployeeFullName,
// NationalCode = employee.NationalCode,
// IsActiveString = joinedRollCall == null ? "false" : joinedRollCall.IsActiveString,
// HasUploadedImage = joinedRollCall == null ? "false" : joinedRollCall.HasUploadedImage
// };
var rawQuery = _context.Employees.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances)
.Where(x => x.LeftWorks.Any(y =>
y.WorkshopId == workshopId && y.StartWorkDate <= dateNow &&
y.LeftWorkDate > dateNow) ||
x.LeftWorkInsurances.Any(y =>
y.WorkshopId == workshopId && y.StartWorkDate <= dateNow &&
(y.LeftWorkDate > dateNow || y.LeftWorkDate == null))).OrderByDescending(x => x.id)
.Select(x => new
{
Id = x.id,
}).Distinct();
var rollCallEmployees = _context.RollCallEmployees.Where(x => x.WorkshopId == workshopId);
var joinedQuery = from employee in rawQuery
join rollCallEmployee in rollCallEmployees
on employee.Id equals rollCallEmployee.EmployeeId into grp
from joinedRollCall in grp.DefaultIfEmpty()
select new RollCallEmployeeViewModel()
{
IsActiveString = joinedRollCall == null ? "false" : joinedRollCall.IsActiveString,
};
var deActiveCount = joinedQuery.Count(x => x.IsActiveString == "false");
var ActiveCount = joinedQuery.Count(x => x.IsActiveString == "true");
return (ActiveCount, deActiveCount);
#endregion
}
}