Files
Backend-Api/ServiceHost/Areas/Client/Pages/Company/RollCall/EmployeeUploadPicture.cshtml.cs
2024-10-05 19:27:04 +03:30

428 lines
13 KiB
C#

using System.Security.Claims;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.Error;
using CompanyManagment.App.Contracts.RollCallEmployee;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
using CompanyManagment.App.Contracts.RollCallService;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using ServiceHost.Pages;
namespace ServiceHost.Areas.Client.Pages.Company.RollCall
{
[Authorize]
public class EmployeeUploadPictureModel : PageModel
{
public string WorkshopFullName;
public RollCallEmployeeViewModel Employees;
public bool HasEmployees;
public int MaxPersonValid;
public long WorkshopId;
public int PageIndex;
private readonly IWorkshopApplication _workshopApplication;
private readonly IEmployeeApplication _employeeApplication;
private readonly IRollCallEmployeeApplication _rollCallEmployeeApplication;
private readonly IRollCallServiceApplication _rollCallServiceApplication;
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly IPasswordHasher _passwordHasher;
private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
public EmployeeUploadPictureModel(IWorkshopApplication workshopApplication, IPasswordHasher passwordHasher, IRollCallEmployeeApplication rollCallEmployeeApplication, IRollCallServiceApplication rollCallServiceApplication, IWebHostEnvironment webHostEnvironment, IEmployeeApplication employeeApplication, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication)
{
_workshopApplication = workshopApplication;
_passwordHasher = passwordHasher;
_rollCallEmployeeApplication = rollCallEmployeeApplication;
_rollCallServiceApplication = rollCallServiceApplication;
_webHostEnvironment = webHostEnvironment;
_employeeApplication = employeeApplication;
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
}
public IActionResult OnGet()
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId > 0)
{
var serviceActive = _rollCallServiceApplication.GetActiveServiceByWorkshopId(workshopId);
if (serviceActive == null)
return Redirect("/Client/Company/RollCall");
var workshop = _workshopApplication.GetWorkshopInfo(workshopId);
WorkshopFullName = workshop.WorkshopFullName;
MaxPersonValid = _rollCallServiceApplication.GetActiveServiceByWorkshopId(workshopId).MaxPersonValid;
var distinctEmployees = _rollCallEmployeeApplication.GetPersonnelRollCallListPaginate(new RollCallEmployeeSearchModel()
{
WorkshopId = workshopId,
PageIndex = 0
});
HasEmployees = distinctEmployees.Count > 0 ? true : false;
return Page();
}
else
{
return NotFound();
}
}
public IActionResult OnGetEmployeeUploadDataAjax(int pageIndex, string searchName)
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId > 0)
{
MaxPersonValid = _rollCallServiceApplication.GetActiveServiceByWorkshopId(workshopId).MaxPersonValid;
var distinctEmployees = _rollCallEmployeeApplication.GetPersonnelRollCallListPaginate(new RollCallEmployeeSearchModel()
{
WorkshopId = workshopId,
PageIndex = pageIndex,
Name = searchName
});
Employees = new RollCallEmployeeViewModel
{
PersonnelInfoViewModels = distinctEmployees
};
return new JsonResult(new
{
isSuccedded = true,
data = Employees,
pageIndex = Employees.PersonnelInfoViewModels.Count()
});
}
else
{
return new JsonResult(new
{
isSuccedded = false,
message = "کارگاهی یافت نشد"
});
}
}
public IActionResult OnGetLoadInfoCount()
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId <= 0)
{
return new JsonResult(new
{
isSuccedded = false,
message = "کارگاهی یافت نشد"
});
}
var activeService = _rollCallServiceApplication.GetActiveServiceByWorkshopId(workshopId);
var maxPersonValid = activeService.MaxPersonValid;
var employees = _rollCallEmployeeApplication.GetPersonnelRollCallListAll(workshopId);
var activeCount = employees.Count(e => e.IsActiveString == "true");
var inactiveCount = employees.Count(e => e.IsActiveString == "false");
return new JsonResult(new
{
isSuccedded = true,
maxPersonValid = maxPersonValid == -1 ? "نامحدود" : maxPersonValid.ToString(),
isTrueActiveCount = activeCount,
isFalseActiveCount = inactiveCount,
message = "موفق"
});
}
public IActionResult OnGetCheckModalTakeImage()
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId <= 0)
{
return new JsonResult(new
{
isSuccedded = false,
message = "کارگاه شما یافت نشده است"
});
}
var plan = _rollCallServiceApplication.GetActiveServiceByWorkshopId(workshopId);
if (plan == null)
{
return new JsonResult(new
{
isSuccedded = false,
message = "شما سرویس خریداری شده ندارید"
});
}
if (plan.IsActiveString != "true")
{
return new JsonResult(new
{
isSuccedded = false,
message = "سرویس شما فعال نیست"
});
}
var maxValid = plan.MaxPersonValid;
if (maxValid == -1 || _rollCallEmployeeApplication.activedPerson(workshopId) < maxValid)
{
return new JsonResult(new
{
isSuccedded = true,
message = "موفق"
});
}
return new JsonResult(new
{
isSuccedded = false,
message = "محدودیت افزودن پرسنل"
});
}
public IActionResult OnGetModalTakeImages(long employeeId)
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId > 0)
{
var employeeWorkshopInfo = _rollCallEmployeeApplication.GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
bool hasPicture = false;
if (employeeWorkshopInfo != null && !string.IsNullOrEmpty(employeeWorkshopInfo.HasUploadedImage))
hasPicture = bool.Parse(employeeWorkshopInfo.HasUploadedImage);
var employeeDetails = _employeeApplication.GetDetails(employeeId);
string employeeName = string.Empty;
if (employeeDetails != null)
employeeName = employeeDetails.EmployeeFullName;
string pic1 = "";
string pic2 = "";
if (hasPicture)
{
byte[] fileContent1 = System.IO.File.ReadAllBytes($"{_webHostEnvironment.ContentRootPath}\\Faces\\{workshopId}\\{employeeId}\\{1}.jpg");
pic1 = Convert.ToBase64String(fileContent1);
byte[] fileContent2 = System.IO.File.ReadAllBytes($"{_webHostEnvironment.ContentRootPath}\\Faces\\{workshopId}\\{employeeId}\\{2}.jpg");
pic2 = Convert.ToBase64String(fileContent2);
}
var res = new TakePictureModel()
{
HasPicture = hasPicture,
EmployeeId = employeeId,
WorkshopId = workshopId,
Name = employeeName,
Pic1 = pic1,
Pic2 = pic2,
};
return Partial("ModalTakeImages", res);
}
else
{
var resultError = new ErrorViewModel()
{
IsSuccedded = false,
Message = "هیج کارگاهی یافت نشد"
};
return Partial("../Error/_ErrorModal", resultError);
}
}
public IActionResult OnPostTakePicture(string base64pic1, string base64pic2, long workshopId, long employeeId)
{
try
{
var directoryPath = $"{_webHostEnvironment.ContentRootPath}\\Faces\\{workshopId}\\{employeeId}";
if (!Directory.Exists(directoryPath))
Directory.CreateDirectory(directoryPath);
var filePath1 = Path.Combine(directoryPath) + $@"\1.jpg";
CreateImageFromBase64(base64pic1, filePath1);
var filePath2 = Path.Combine(directoryPath) + $@"\2.jpg";
CreateImageFromBase64(base64pic2, filePath2);
var employee = _employeeApplication.GetDetailsForClient(employeeId, workshopId);
var rollCallEmployee = _rollCallEmployeeApplication.GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
var result = new OperationResult()
{
IsSuccedded = false,
Message = "هنوز عملیاتی انجام نشده است"
};
if (rollCallEmployee == null)
{
var createCommand = new CreateRollCallEmployee()
{
EmployeeId = employeeId,
WorkshopId = workshopId,
EmployeeFullName = employee.EmployeeFullName,
HasUploadedImage = "true",
};
result = _rollCallEmployeeApplication.Create(createCommand);
_rollCallEmployeeStatusApplication.Create(new CreateRollCallEmployeeStatus()
{ RollCallEmployeeId = result.SendId });
}
else
{
result = _rollCallEmployeeApplication.UploadedImage(employeeId, workshopId);
}
if (result.IsSuccedded)
{
return new JsonResult(new
{
IsSuccedded = result.IsSuccedded,
Message = result.Message,
src = Tools.ResizeImage(Path.Combine(_webHostEnvironment.ContentRootPath, "Faces", workshopId.ToString(), employeeId.ToString(), "1.jpg"), 150, 150)
});
}
else
{
return new JsonResult(new
{
IsSuccedded = result.IsSuccedded,
Message = result.Message,
});
}
}
catch (Exception e)
{
Console.WriteLine(e);
return new JsonResult(new
{
IsSuccedded = false,
Message = e.Message,
});
}
}
public void CreateImageFromBase64(string base64, string imagePathWithExtension)
{
var subBase64 = base64.Substring(base64.LastIndexOf(',') + 1);
byte[] bytes = Convert.FromBase64String(subBase64);
System.IO.File.WriteAllBytes(imagePathWithExtension, bytes);
}
public IActionResult OnPostActivePersonnel(long id)
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId > 0)
{
var hasRollCallEmployee = _rollCallEmployeeApplication.GetDetails(id);
if (hasRollCallEmployee == null)
{
return new JsonResult(new
{
isSuccedded = false,
message = "برای این پرسنل، هنوز هیچ عکسی آپلود نشده است. بعد از آپلود عکس بطور خودکار فعال خواهد شد",
});
}
else
{
if (hasRollCallEmployee.HasUploadedImage == "false")
return new JsonResult(new
{
isSuccedded = false,
message = "برای این پرسنل، هنوز هیچ عکسی آپلود نشده است. بعد از آپلود عکس بطور خودکار فعال خواهد شد",
});
var result = _rollCallEmployeeApplication.Active(hasRollCallEmployee.Id);
if (result.IsSuccedded)
{
return new JsonResult(new
{
isSuccedded = result.IsSuccedded,
message = result.Message,
});
}
else
{
return new JsonResult(new
{
isSuccedded = result.IsSuccedded,
message = result.Message,
});
}
}
return new JsonResult(new
{
isSuccedded = false,
message = "خطایی رخ آمده است",
});
}
else
{
return new JsonResult(new
{
isSuccedded = false,
message = "کارگاه شما یافت نشد",
});
}
}
public IActionResult OnPostDeActivePersonnel(long id)
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId > 0)
{
var result = _rollCallEmployeeApplication.DeActive(id);
if (result.IsSuccedded)
{
return new JsonResult(new
{
isSuccedded = result.IsSuccedded,
message = result.Message,
});
}
return new JsonResult(new
{
isSuccedded = result.IsSuccedded,
message = result.Message,
});
}
else
{
return new JsonResult(new
{
isSuccedded = false,
message = "کارگاه شما یافت نشد",
});
}
}
public IActionResult OnGetLoadFirstImage(long employeeId, long workshopId)
{
var directoryPath = $"{_webHostEnvironment.ContentRootPath}\\Faces\\{workshopId}\\{employeeId}";
var imageDir = Path.Combine(directoryPath, "1.jpg");
return PhysicalFile(imageDir, "image/jpeg");
}
public IActionResult OnGetLoadSecondImage(long employeeId, long workshopId)
{
var directoryPath = $"{_webHostEnvironment.ContentRootPath}\\Faces\\{workshopId}\\{employeeId}";
var imageDir = Path.Combine(directoryPath, "2.jpg");
return PhysicalFile(imageDir, "image/jpeg");
}
}
}