Blokkolás, feloldás

This commit is contained in:
2025-04-08 14:59:35 +02:00
parent cdaceb1961
commit b5d4a163fd
22 changed files with 3576 additions and 77 deletions
+154 -44
View File
@@ -1,5 +1,6 @@
using AutoMapper;
using DocumentFormat.OpenXml.Office.CustomUI;
using DocumentFormat.OpenXml.Spreadsheet;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Serilog;
@@ -8,6 +9,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using WorkFlowCheck.BL.DocumentGenerator;
@@ -25,7 +27,10 @@ namespace WorkFlowCheck.BL.Services
private readonly IMapper _mapper;
private readonly INumberGeneratorService _numberGeneratorService;
public CheckListService(AppDbContext dbContext, IMapper mapper, INumberGeneratorService numberGeneratorService)
public CheckListService(AppDbContext dbContext,
IMapper mapper,
INumberGeneratorService numberGeneratorService,
IUserService userService)
{
_dbContext = dbContext;
_mapper = mapper;
@@ -43,6 +48,8 @@ namespace WorkFlowCheck.BL.Services
{
var res = await _dbContext.CheckListHeaders
.Where(w => w.Id == Id)
.Include(i => i.User)
.Include(i => i.AcceptUser)
.Include(i => i.CheckListRows)
.ThenInclude(r => r.CheckListTemplateRow)
.ThenInclude(r => r.CheckPoint)
@@ -78,14 +85,15 @@ namespace WorkFlowCheck.BL.Services
var retVal = new List<CheckListHeaderDTO>();
try
{
var roles = await _dbContext.CheckListHeaders
var checkListHeaders = await _dbContext.CheckListHeaders
.Include(i => i.CheckListRows)
.Include(i => i.User)
.Include(i => i.AcceptUser)
.AsNoTracking()
.ToListAsync();
if (roles != null)
if (checkListHeaders != null)
{
retVal = _mapper.Map<List<CheckListHeaderDTO>>(roles);
retVal = _mapper.Map<List<CheckListHeaderDTO>>(checkListHeaders);
}
}
catch (Exception ex)
@@ -202,6 +210,148 @@ namespace WorkFlowCheck.BL.Services
}
return retVal;
}
public async Task<bool> AcceptCheckListHeaderAsync(int id, int userid)
{
var retVal = false;
try
{
var checkListHeader = await _dbContext.CheckListHeaders
.Where(w => w.Id == id && w.CheckStatus == CheckStatus.Sent)
.FirstOrDefaultAsync();
if (checkListHeader != null)
{
checkListHeader.CheckStatus = CheckStatus.Signed;
checkListHeader.IsEditable = false;
checkListHeader.AcceptUserId = userid;
Log.Warning($"Ellenőrzési lap státuszváltozása: Ellenőrzés:{id}, Felhasználó:{userid}");
await _dbContext.SaveChangesAsync();
var pdf = await CreateCheckListHeaderPDFAsync(id);
if (pdf != null && pdf.Length > 0)
{
string pdfDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Pdf");
var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
var fileName = $"CD_{timestamp}_{checkListHeader.GuidNumber.ToString().ToUpper()}.pdf";
var filePath = Path.Combine(pdfDirectory, fileName);
await File.WriteAllBytesAsync(filePath, pdf);
retVal = true;
}
}
}
catch (Exception ex)
{
Log.Error(ex.Message);
}
return retVal;
}
public async Task<byte[]> CreateCheckListHeaderPDFAsync(int checkListHeaderId)
{
try
{
var checkListHeader = await this.GetCheckListHeaderAsync(checkListHeaderId);
string pdfDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Pdf");
byte[] byteArray = File.ReadAllBytes(Path.Combine(pdfDirectory, "CheckList_Template_V1.docx"));
SablonGenerator gen = new SablonGenerator(byteArray);
gen.SimpleReplace("#DocumentNumber#", checkListHeader.DocumentNumber);
gen.SimpleReplace("#DateExecution#", checkListHeader.DateExecution.ToString("yyyy.MM.dd HH:mm"));
gen.SimpleReplace("#WorkUser#", $"{checkListHeader.UserDTO?.LastName} {checkListHeader.UserDTO?.FirstName}");
gen.SimpleReplace("#AcceptUser#", $"{checkListHeader.AcceptUserDTO?.LastName} {checkListHeader.AcceptUserDTO?.FirstName}");
gen.SimpleReplace("#Guid#", checkListHeader.GuidNumber.ToString());
if (checkListHeader.CheckListRowDTO != null && checkListHeader.CheckListRowDTO.Count > 0)
{
var elements = new List<List<string>>();
foreach (var item in checkListHeader.CheckListRowDTO)
{
if (item.CheckListTemplateRowDTO != null)
{
var cells = new List<string>
{
$"{item.CheckListTemplateRowDTO.RowIndex.ToString()}.",
item.CheckListTemplateRowDTO.OperationDescription,
item.Answer
};
elements.Add(cells);
}
}
gen.SetTable(elements, "#rowindex");
}
byte[] content = gen.CloseAndGetDocument();
return DokumentumGenerator.DocxToPdfL(content);
}
catch (Exception ex)
{
Log.Error(ex.Message);
}
return new byte[0];
}
public async Task<bool> BlockCheckListHeaderAsync(int id, int userid)
{
var retVal = false;
try
{
var checkListHeader = await _dbContext.CheckListHeaders
.Where(w => w.Id == id && w.CheckStatus == CheckStatus.Sent)
.FirstOrDefaultAsync();
if (checkListHeader != null && checkListHeader.CheckStatus == CheckStatus.InProgress)
{
checkListHeader.CheckStatus = CheckStatus.Blocked;
checkListHeader.IsEditable = false;
Log.Warning($"Ellenőrzési lap blokkolva: Ellenőrzés:{id}, Felhasználó:{userid}");
await _dbContext.SaveChangesAsync();
retVal = true;
}
}
catch (Exception ex)
{
retVal = false;
Log.Error(ex.Message);
}
return retVal;
}
public async Task<bool> UnBlockCheckListHeaderAsync(int id, int userid)
{
var retVal = false;
try
{
var checkListHeader = await _dbContext.CheckListHeaders
.Where(w => w.Id == id && w.CheckStatus == CheckStatus.Sent)
.FirstOrDefaultAsync();
if (checkListHeader != null && checkListHeader.CheckStatus == CheckStatus.Blocked)
{
checkListHeader.CheckStatus = CheckStatus.InProgress;
checkListHeader.IsEditable = true;
Log.Warning($"Ellenőrzési lap feloldva: Ellenőrzés:{id}, Felhasználó:{userid}");
await _dbContext.SaveChangesAsync();
retVal = true;
}
}
catch (Exception ex)
{
retVal = false;
Log.Error(ex.Message);
}
return retVal;
}
public async Task<CheckListTemplateHeaderDTO> GetCheckListTemplateHeaderAsync(int Id)
{
@@ -425,46 +575,6 @@ namespace WorkFlowCheck.BL.Services
return retVal;
}
public async Task<byte[]> CreatePDF(int checkListHeaderId)
{
try
{
var checkListHeader = await this.GetCheckListHeaderAsync(checkListHeaderId);
string pdfDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Pdf");
byte[] byteArray = File.ReadAllBytes(Path.Combine(pdfDirectory, "CheckList_Template_V1.docx"));
SablonGenerator gen = new SablonGenerator(byteArray);
if (checkListHeader.CheckListRowDTO != null && checkListHeader.CheckListRowDTO.Count > 0)
{
var elements = new List<List<string>>();
foreach (var item in checkListHeader.CheckListRowDTO)
{
if (item.CheckListTemplateRowDTO != null)
{
var cells = new List<string>
{
$"{item.CheckListTemplateRowDTO.RowIndex.ToString()}.",
item.CheckListTemplateRowDTO.OperationDescription,
item.Answer
};
elements.Add(cells);
}
}
gen.SetTable(elements, "#rowindex");
}
byte[] content = gen.CloseAndGetDocument();
return DokumentumGenerator.DocxToPdfL(content);
}
catch (Exception ex)
{
Log.Error(ex.Message);
}
return new byte[0];
}
}
}
@@ -8,7 +8,10 @@ namespace WorkFlowCheck.BL.Services.Interfaces
Task<CheckListHeaderDTO> GetCheckListHeaderAsync(int Id);
Task<List<CheckListHeaderDTO>> GetAllCheckListHeaderAsync();
Task<CheckListHeaderDTO> UpdateCheckListHeaderAsync(CheckListHeaderDTO checkListHeaderDTO);
Task<bool> AcceptCheckListHeaderAsync(int id, int userid);
Task<bool> BlockCheckListHeaderAsync(int id, int userid);
Task<bool> UnBlockCheckListHeaderAsync(int id, int userid);
Task<byte[]> CreateCheckListHeaderPDFAsync(int checkListHeaderId);
Task<CheckListHeaderDTO> StartNewCheckListAsync(CheckListHeaderNewDTO checkListHeaderNewDTO);
@@ -21,10 +24,9 @@ namespace WorkFlowCheck.BL.Services.Interfaces
Task<CheckListRowDTO> GetCheckListRowAsync(int id);
Task<CheckListRowDTO> UpdateCheckListRowAsync(CheckListRowDTO checkListRowDTO);
Task<byte[]> CreatePDF(int checkListHeaderId);
}
}