Files
Backend-Api/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs
2024-08-29 15:00:22 +03:30

209 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.RollCallEmployeeAgg;
using CompanyManagment.App.Contracts.RollCallEmployee;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
namespace CompanyManagment.EFCore.Repository;
public class RollCallEmployeeRepository : RepositoryBase<long, RollCallEmployee>, IRollCallEmployeeRepository
{
private readonly CompanyContext _context;
private readonly IPasswordHasher _passwordHasher;
private readonly IWebHostEnvironment _webHostEnvironment;
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,
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,
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,
WorkshopId = x.WorkshopId,
EmployeeFullName = x.EmployeeFullName,
IsActiveString = x.IsActiveString,
HasUploadedImage = x.HasUploadedImage
}).FirstOrDefault();
}
public List<RollCallEmployeeViewModel> GetPersonnelRollCallList(long workshopId)
{
//var nowFa = DateTime.Now;
//var employee = _context.Employees.Include(x => x.LeftWorks).Where(l => l.LeftWorks.Any(c => c.StartWorkDate <= nowFa && c.LeftWorkDate > nowFa && c.WorkshopId == workshopId));
//return employee.Select(x => new RollCallEmployeeViewModel
//{
// WorkshopId = workshopId,
// EmployeeId = x.id,
// EmployeeFullName= x.FName + ' ' + x.LName,
// NationalCode = x.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",
//}).ToList();
var leftDate = new DateTime(2121, 3, 21);
var join = new List<RollCallEmployeeViewModel>();
var contractLeftWork = _context.LeftWorkList.Select(x => new RollCallEmployeeViewModel()
{
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
PersonName = x.EmployeeFullName,
PersonelCode = 0,
ContractPerson = true,
ContractLeft = x.LeftWorkDate != leftDate,
StartWork = x.StartWorkDate
}).Where(x => x.WorkshopId == workshopId).OrderByDescending(x => x.StartWork).ToList();
contractLeftWork = contractLeftWork.Select(x => new RollCallEmployeeViewModel()
{
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
PersonName = x.PersonName,
PersonelCode = _context.PersonnelCodeSet.Any(p => p.EmployeeId == x.EmployeeId && p.WorkshopId == x.WorkshopId) ?
_context.PersonnelCodeSet.FirstOrDefault(p => p.EmployeeId == x.EmployeeId && p.WorkshopId == x.WorkshopId)!.PersonnelCode : 0,
ContractPerson = true,
ContractLeft = x.ContractLeft,
StartWork = x.StartWork
}).ToList();
var insuranceLeftWork = _context.LeftWorkInsuranceList.Select(x => new RollCallEmployeeViewModel()
{
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
PersonName = x.EmployeeFullName,
PersonelCode = 0,
InsurancePerson = true,
InsurancetLeft = x.LeftWorkDate != null,
StartWork = x.StartWorkDate
}).Where(x => x.WorkshopId == workshopId).OrderByDescending(x => x.StartWork).ToList();
insuranceLeftWork = insuranceLeftWork.Select(x => new RollCallEmployeeViewModel()
{
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
PersonName = x.PersonName,
PersonelCode = _context.PersonnelCodeSet.Any(p => p.EmployeeId == x.EmployeeId && p.WorkshopId == x.WorkshopId) ?
_context.PersonnelCodeSet.FirstOrDefault(p => p.EmployeeId == x.EmployeeId && p.WorkshopId == x.WorkshopId)!.PersonnelCode : 0,
InsurancePerson = true,
InsurancetLeft = x.InsurancetLeft,
StartWork = x.StartWork
}).ToList();
var joinEqualList = contractLeftWork.Join(insuranceLeftWork, x => x.EmployeeId, c => c.EmployeeId,
(first, second) => new RollCallEmployeeViewModel
{
EmployeeId = first.EmployeeId,
ContractPerson = first.ContractPerson,
ContractLeft = first.ContractLeft,
InsurancePerson = second.InsurancePerson,
InsurancetLeft = second.InsurancetLeft
}).ToList();
if (contractLeftWork.Any() && !insuranceLeftWork.Any())
{
join = contractLeftWork.ToList();
}
else if (!contractLeftWork.Any() && insuranceLeftWork.Any())
{
join = insuranceLeftWork.ToList();
}
else if (contractLeftWork.Any() && insuranceLeftWork.Any())
{
join = contractLeftWork.Concat(insuranceLeftWork).ToList();
}
if (joinEqualList.Count == 0)
return join;
join = join.GroupBy(x => x.EmployeeId).Select(d => d.First()).ToList();
var finalList = join.Select(x => new RollCallEmployeeViewModel()
{
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
PersonName = x.PersonName,
PersonelCode = x.PersonelCode,
ContractPerson = joinEqualList.Any(c => c.EmployeeId == x.EmployeeId) ? joinEqualList.FirstOrDefault(c => c.EmployeeId == x.EmployeeId)!.ContractPerson : x.ContractPerson,
InsurancePerson = joinEqualList.Any(c => c.EmployeeId == x.EmployeeId) ? joinEqualList.FirstOrDefault(c => c.EmployeeId == x.EmployeeId)!.InsurancePerson : x.InsurancePerson,
ContractLeft = joinEqualList.Any(c => c.EmployeeId == x.EmployeeId) ? joinEqualList.FirstOrDefault(c => c.EmployeeId == x.EmployeeId)!.ContractLeft : x.ContractLeft,
InsurancetLeft = joinEqualList.Any(c => c.EmployeeId == x.EmployeeId) ? joinEqualList.FirstOrDefault(c => c.EmployeeId == x.EmployeeId)!.InsurancetLeft : x.InsurancetLeft,
Black = false,
}).ToList();
var f = finalList.GroupBy(x => x.EmployeeId).Select(x => x.First()).ToList();
var res = f.Select(x => new RollCallEmployeeViewModel
{
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
Id = _context.RollCallEmployees.FirstOrDefault(r => r.EmployeeId == x.EmployeeId && r.WorkshopId == workshopId) == null ? 0 :
_context.RollCallEmployees.FirstOrDefault(r => r.EmployeeId == x.EmployeeId && r.WorkshopId == workshopId).id,
EmployeeFullName = x.PersonName,
EmployeeSlug = _passwordHasher.SlugHasher(x.EmployeeId),
NationalCode = _context.Employees.FirstOrDefault(e => e.id == x.EmployeeId)?.NationalCode,
PersonName = x.PersonName,
IsActiveString = _context.RollCallEmployees.Any(r => r.EmployeeId == x.EmployeeId && r.WorkshopId == workshopId && r.IsActiveString == "true") ? "true" : "false",
HasUploadedImage = _context.RollCallEmployees.Any(r => r.EmployeeId == x.EmployeeId && r.WorkshopId == workshopId && r.HasUploadedImage == "true") ? "true" : "false",
ImagePath = (System.IO.File.Exists(Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", x.WorkshopId.ToString(), x.EmployeeId.ToString(), "1.jpg")))
? Tools.ResizeImage(Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", x.WorkshopId.ToString(), x.EmployeeId.ToString(), "1.jpg"), 150, 150)
: "",
// ImagePath = x.HasUploadedImage == "true" ? Convert.ToBase64String(System.IO.File.ReadAllBytes($"{_webHostEnvironment.ContentRootPath}\\Faces\\{x.WorkshopId}\\{x.EmployeeId}\\1.jpg")) : "",
ContractPerson = x.ContractPerson,
InsurancePerson = x.InsurancePerson,
ContractLeft = x.ContractLeft,
InsurancetLeft = x.InsurancetLeft,
Black = ((x.ContractPerson && x.InsurancePerson && x.InsurancetLeft && x.ContractLeft) || (x.ContractPerson && !x.InsurancePerson && x.ContractLeft) || (x.InsurancePerson && !x.ContractPerson && x.InsurancetLeft)) ? true : false
}).ToList();
return res.Where(x => !x.Black).ToList();
}
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");
}
}