222 lines
8.0 KiB
C#
222 lines
8.0 KiB
C#
using _0_Framework.Application;
|
|
using Company.Domain.EmployeeAgg;
|
|
using Company.Domain.LeftWorkAgg;
|
|
using Company.Domain.RollCallEmployeeAgg;
|
|
using Company.Domain.RollCallEmployeeStatusAgg;
|
|
using CompanyManagment.App.Contracts.RollCallEmployee;
|
|
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Transactions;
|
|
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
|
|
|
|
namespace CompanyManagment.Application;
|
|
|
|
public class RollCallEmployeeApplication : IRollCallEmployeeApplication
|
|
{
|
|
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
|
|
private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
|
|
private readonly IEmployeeRepository _employeeRepository;
|
|
private readonly ILeftWorkRepository _leftWorkRepository;
|
|
private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository;
|
|
private readonly IWebHostEnvironment _webHostEnvironment;
|
|
public RollCallEmployeeApplication(IRollCallEmployeeRepository rollCallEmployeeRepository, IEmployeeRepository employeeRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, ILeftWorkRepository leftWorkRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IWebHostEnvironment webHostEnvironment)
|
|
{
|
|
_rollCallEmployeeRepository = rollCallEmployeeRepository;
|
|
_employeeRepository = employeeRepository;
|
|
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
|
|
_leftWorkRepository = leftWorkRepository;
|
|
_rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository;
|
|
_webHostEnvironment = webHostEnvironment;
|
|
}
|
|
|
|
public OperationResult Create(CreateRollCallEmployee command)
|
|
{
|
|
var opreation = new OperationResult();
|
|
|
|
if (_rollCallEmployeeRepository.Exists(x =>
|
|
x.EmployeeId == command.EmployeeId && x.WorkshopId == command.EmployeeId))
|
|
return opreation.Succcedded();
|
|
var fullname = _employeeRepository.GetDetails(command.EmployeeId);
|
|
if (fullname == null)
|
|
return opreation.Failed("پرسنل یافت نشد");
|
|
var create = new RollCallEmployee(command.WorkshopId, command.EmployeeId, fullname.FName, fullname.LName);
|
|
_rollCallEmployeeRepository.Create(create);
|
|
|
|
if (command.HasUploadedImage == "true")
|
|
create.HasImage();
|
|
|
|
_rollCallEmployeeRepository.SaveChanges();
|
|
return opreation.Succcedded(create.id);
|
|
|
|
}
|
|
|
|
public OperationResult Active(long id)
|
|
{
|
|
var opreation = new OperationResult();
|
|
|
|
var emp = _rollCallEmployeeRepository.Get(id);
|
|
|
|
if (emp == null)
|
|
return opreation.Failed("پرسنل یافت نشد");
|
|
|
|
if (!_leftWorkRepository.Exists(x => x.EmployeeId == emp.EmployeeId && x.WorkshopId == emp.WorkshopId &&
|
|
x.StartWorkDate <= DateTime.Now && x.LeftWorkDate > DateTime.Now))
|
|
return opreation.Failed("کارمند شروع به کار ندارد");
|
|
|
|
if (emp.HasUploadedImage == "false")
|
|
return opreation.Failed("لطفا ابتدا عکس پرسنل را آپلود کنید");
|
|
|
|
using var transaction = new TransactionScope();
|
|
|
|
emp.Active();
|
|
|
|
var operation2 = _rollCallEmployeeStatusApplication.Create(new CreateRollCallEmployeeStatus() { RollCallEmployeeId = id });
|
|
if (operation2.IsSuccedded == false)
|
|
return operation2;
|
|
|
|
_rollCallEmployeeRepository.SaveChanges();
|
|
transaction.Complete();
|
|
|
|
return operation2;
|
|
}
|
|
|
|
public OperationResult DeActive(long id)
|
|
{
|
|
var opreation = new OperationResult();
|
|
var emp = _rollCallEmployeeRepository.GetWithRollCallStatus(id);
|
|
if (emp == null)
|
|
return opreation.Failed("پرسنل یافت نشد");
|
|
var lastStatus = emp.EmployeesStatus.MaxBy(x => x.StartDate);
|
|
emp.DeActive();
|
|
_rollCallEmployeeRepository.SaveChanges();
|
|
_rollCallEmployeeStatusApplication.Deactivate(lastStatus.id);
|
|
return opreation.Succcedded();
|
|
}
|
|
|
|
public OperationResult UploadedImage(long Employeeid, long WorkshopId)
|
|
{
|
|
var opreation = new OperationResult();
|
|
var emp = _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(Employeeid, WorkshopId);
|
|
if (emp == null)
|
|
return opreation.Failed("پرسنل یافت نشد");
|
|
|
|
var rollCall = _rollCallEmployeeRepository.Get(emp.Id);
|
|
rollCall.HasImage();
|
|
_rollCallEmployeeRepository.SaveChanges();
|
|
var path = Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", WorkshopId.ToString(), Employeeid.ToString());
|
|
var thumbnailPath = Path.Combine(path, "Thumbnail.jpg");
|
|
try
|
|
{
|
|
var thumbnail = Tools.ResizeImage(Path.Combine(path, "1.jpg"), 150, 150);
|
|
System.IO.File.WriteAllBytes(thumbnailPath, Convert.FromBase64String(thumbnail));
|
|
}
|
|
catch
|
|
{
|
|
// ignored
|
|
}
|
|
|
|
return opreation.Succcedded();
|
|
}
|
|
|
|
|
|
public List<RollCallEmployeeViewModel> GetByWorkshopId(long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.GetByWorkshopId(workshopId);
|
|
}
|
|
|
|
public EditRollCallEmployee GetDetails(long id)
|
|
{
|
|
return _rollCallEmployeeRepository.GetDetails(id);
|
|
}
|
|
|
|
public RollCallEmployeeViewModel GetByEmployeeIdAndWorkshopId(long employeeId, long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
|
|
}
|
|
|
|
public List<RollCallEmployeeViewModel> GetPersonnelRollCallListPaginate(RollCallEmployeeSearchModel command)
|
|
{
|
|
return _rollCallEmployeeRepository.GetPersonnelRollCallListPaginate(command);
|
|
}
|
|
|
|
public int activedPerson(long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.activedPerson(workshopId);
|
|
}
|
|
|
|
#region Pooya
|
|
public List<RollCallEmployeeViewModel> GetRollCallEmployeesByWorkshopId(long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.GetRollCallEmployeesByWorkshopId(workshopId);
|
|
}
|
|
public List<RollCallEmployeeViewModel> GetActivePersonnelByWorkshopId(long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.GetActivePersonnelByWorkshopId(workshopId);
|
|
}
|
|
|
|
|
|
public bool IsEmployeeRollCallActive(long employeeId, long workshopId)
|
|
{
|
|
RollCallEmployeeViewModel rollCallEmployee = _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
|
|
if (rollCallEmployee == null || rollCallEmployee.IsActiveString != "true" || rollCallEmployee.HasUploadedImage != "true")
|
|
return false;
|
|
var now = DateTime.Now;
|
|
return _rollCallEmployeeStatusRepository.Exists(x => x.RollCallEmployeeId == rollCallEmployee.Id && x.StartDate < now && x.EndDate > now);
|
|
|
|
|
|
|
|
}
|
|
|
|
public List<RollCallEmployeeViewModel> GetEmployeeRollCalls(long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.GetEmployeeRollCalls(workshopId);
|
|
}
|
|
|
|
public (int activeEmployees, int deActiveEmployees) GetActiveAndDeActiveRollCallEmployees(long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.GetActiveAndDeActiveRollCallEmployees(workshopId);
|
|
}
|
|
|
|
public List<RollCallEmployeeViewModel> GetPersonnelRollCallListAll(long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.GetPersonnelRollCallListAll(workshopId);
|
|
}
|
|
|
|
public bool HasEmployees(long workshopId)
|
|
{
|
|
return _rollCallEmployeeRepository.HasEmployees(workshopId);
|
|
}
|
|
|
|
|
|
|
|
public OperationResult ChangeEmployeeRollCallName(long rollCallEmployeeId, string fName, string lName)
|
|
{
|
|
OperationResult result = new();
|
|
if (string.IsNullOrWhiteSpace(lName) || string.IsNullOrWhiteSpace(fName))
|
|
return result.Failed("نام و نام خانوادگی نمی توانند خالی باشند");
|
|
fName = fName.Trim();
|
|
lName = lName.Trim();
|
|
var fullName = $"{fName} {lName}";
|
|
var entity = _rollCallEmployeeRepository.Get(rollCallEmployeeId);
|
|
|
|
|
|
if (entity == null)
|
|
return result.Failed(ApplicationMessages.RecordNotFound);
|
|
|
|
if (_rollCallEmployeeRepository.Exists(x => x.WorkshopId == entity.WorkshopId && x.EmployeeFullName == fullName && x.id != rollCallEmployeeId))
|
|
return result.Failed("نام و نام خانوادگی کارمند نمی تواند با نام و نام خانوادگی کارمند دیگری در آن کارگاه یکسان باشد");
|
|
|
|
if (entity.IsActiveString != "true")
|
|
return result.Failed("امکان تغییر نام برای کارمند غیر فعال وجود ندارد");
|
|
|
|
|
|
entity.ChangeName(fName, lName);
|
|
_rollCallEmployeeRepository.SaveChanges();
|
|
return result.Succcedded();
|
|
}
|
|
#endregion
|
|
} |