403 lines
17 KiB
C#
403 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.LeftWorkTemp;
|
|
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.IgnoreQueryFilters().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)
|
|
.GroupJoin(_context.LeftWorkTemps.Where(x => x.WorkshopId == command.WorkshopId),
|
|
employee => employee.id,
|
|
leftWorkTemp => leftWorkTemp.EmployeeId,
|
|
((employee, temp) => new { employee, temp }))
|
|
.SelectMany(x => x.temp.DefaultIfEmpty(),
|
|
(x, temp) => new { x.employee, temp })
|
|
.Where(x => (x.employee.LeftWorks.Any(y =>
|
|
y.WorkshopId == command.WorkshopId && y.StartWorkDate <= dateNow &&
|
|
y.LeftWorkDate > dateNow) ||
|
|
x.employee.LeftWorkInsurances.Any(y =>
|
|
y.WorkshopId == command.WorkshopId && y.StartWorkDate <= dateNow &&
|
|
(y.LeftWorkDate > dateNow || y.LeftWorkDate == null))) || x.temp != null).OrderByDescending(x => x.employee.id)
|
|
.Select(x => new
|
|
{
|
|
Id = x.employee.id,
|
|
FullName = x.employee.FName + " " + x.employee.LName,
|
|
x.employee.NationalCode,
|
|
workshopTemp = x.temp
|
|
|
|
}).AsSplitQuery();
|
|
|
|
|
|
|
|
var rollCallEmployees = _context.RollCallEmployees.Where(x => x.WorkshopId == command.WorkshopId);
|
|
|
|
var employeeClient = _context.EmployeeClientTemps.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()
|
|
join employeeClientT in employeeClient on employee.Id equals employeeClientT.EmployeeId into employeeCT
|
|
from clientTemp in employeeCT.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,
|
|
CreatedByClient = clientTemp != null || (employee.workshopTemp != null &&employee.workshopTemp.LeftWorkType == LeftWorkTempType.StartWork)
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(command.Name))
|
|
{
|
|
joinedQuery = joinedQuery.Where(x => x.EmployeeFullName.Contains(command.Name));
|
|
}
|
|
var firstlist = joinedQuery.AsSplitQuery();
|
|
|
|
|
|
|
|
var list = firstlist.OrderByDescending(x => x.CreatedByClient).ThenByDescending(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)
|
|
{
|
|
var dateNow = DateTime.Now.Date;
|
|
var personnelCodes = _context.PersonnelCodeSet.Where(x => x.WorkshopId == workshopId);
|
|
return _context.RollCallEmployees.Include(x => x.EmployeesStatus).Where(x => x.WorkshopId == workshopId &&
|
|
personnelCodes.Any(y => y.EmployeeId == x.EmployeeId))
|
|
.Select(x =>
|
|
new RollCallEmployeeViewModel()
|
|
{
|
|
EmployeeId = x.EmployeeId,
|
|
EmployeeFullName = x.EmployeeFullName,
|
|
Id = x.id,
|
|
WorkshopId = x.WorkshopId,
|
|
IsActiveString = x.EmployeesStatus.Any(y => y.StartDate.Date <= dateNow && y.EndDate.Date > dateNow) ? "true" : "false",
|
|
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 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 personnelCodes = _context.PersonnelCodeSet.Where(x => x.WorkshopId == workshopId);
|
|
|
|
var rollCallEmployeesQuery = _context.RollCallEmployees.Include(x=>x.EmployeesStatus)
|
|
.Where(x => x.WorkshopId == workshopId && x.EmployeesStatus.Any() && personnelCodes.Any(y=>y.EmployeeId == x.EmployeeId));
|
|
|
|
var res = rollCallEmployeesQuery.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();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Farokhi&Mahan
|
|
|
|
public (int activeEmployees, int deActiveEmployees) GetActiveAndDeActiveRollCallEmployees(long workshopId)
|
|
{
|
|
var dateNow = DateTime.Now;
|
|
|
|
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.Include(x => x.EmployeesStatus).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.EmployeesStatus.Any(y => y.StartDate.Date <= dateNow.Date && y.EndDate.Date > dateNow.Date) ? "true" : "false",
|
|
|
|
};
|
|
var deActiveCount = joinedQuery.Count(x => x.IsActiveString == "false");
|
|
var ActiveCount = joinedQuery.Count(x => x.IsActiveString == "true");
|
|
return (ActiveCount, deActiveCount);
|
|
|
|
}
|
|
|
|
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 RollCallEmployee GetBy(long employeeId, long workshopId)
|
|
{
|
|
return _context.RollCallEmployees.FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
|
|
}
|
|
|
|
#endregion
|
|
|
|
} |