209 lines
10 KiB
C#
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");
|
|
}
|
|
} |